/*****************************************************************************************************
Under GPL
Timor(at)cyhex.com

* type = { int, float, text, email, url, null=string }
validate(form,'fieldname,type,minlen',fieldname2,type,minlen',...)

example:
onClick="validate('f1','comment,,5','fname,email,5'); return document.formSubmit;">
******************************************************************************************************/

    function clear_error(){
        var arr;
        var args = clear_error.arguments;
        var error = "";
        var f = args[0]; // get the form

           for(i = 1; i < args.length; i++) {
                arr = args[i].split(",");

                var element = document.forms[f].elements[arr[0]];
                if(element == null) {
                    alert( arr[0] + ' does not exist');
                }
           }

           for(i = 1; i < args.length; i++) {
            arr = args[i].split(",");

            var element = document.forms[f].elements[arr[0]];
             var div_name = arr[0]+"_div";
            var type = arr[1];
            var len = arr[2];
            var name = arr[3];

               element.className = 'input';
               var div = getDiv(div_name);
                if (isDefined(div)){
                   div.className = '';
                }

           }

    }

	function validate(){
		var arr;
		var args = validate.arguments;
		var error = "";
		var f = args[0]; // get the form

           for(i = 1; i < args.length; i++) {
                arr = args[i].split(",");

                var element = document.forms[f].elements[arr[0]];
                if(element == null) {
                    alert( arr[0] + ' does not exist');
                }
           }

		   for(i = 1; i < args.length; i++) {
			arr = args[i].split(",");
			var element = document.forms[f].elements[arr[0]];
 			var type = arr[1];
			var len = arr[2];
			var name = arr[3];

 
				if(!valid(element.value,type,element,len)){
					$(element).removeClass('rfield');
					$(element).addClass('rfield');
					$('#log').html($('#log').html()+$(element).attr('name')+' '+args[i]+'<br>');
					error +='error';
				}else{
					$(element).removeClass('rfield');
				}
			}
		if(error != ""){
			$("#error").show();
			document.formSubmit = false;
			return false;
		}else{
			document.formSubmit = true;
			return true;
		}

	}

    arrayIsKey = function(){
      for(i in this){
        if(i === arguments[0])
          return true;
      };
      return false;
    };

    arrayIsNotArray = function() {
        //alert( this.constructor.toString());
        return (this.constructor.toString().indexOf("Array") == -1)
    }



	function valid(value,type,element,len){

		if(value == "")
			return false;

		if(len > 0 &&  value.length < len)
			return false;

        elems = type.split(":");
        if(!elems.isNotArray()) {
            type = elems[0];
            var minval = elems[1];
            if(elems.length >= 3) {
                var maxval=elems[2];
            } 
        }
		switch(type){
			case "int":
				if(isNaN(parseInt(value)))
					return false;
				break;
            case "intgt":
                var val = parseInt(value);
                if(isNaN(val)) return false;
                if(val < minval) return false;
                break;
			case "float":
				if(isNaN(parseFloat(value)))
					return false;
				break;
            case "floatgt":
                var val = parseFloat(value);
                if(isNaN(val)) return false;
                if(val < minval) return false;
                break;
            case "floatgtlt":
                var val = parseFloat(value);
                if(isNaN(val)) return false;
                // note minval is actualy a max val here
                if(val < minval) return false;
                if(val > maxval) return false;
                break;
			case "email":
				var valid_mail = /^[a-z0-9._-]+@[a-z0-9A-ZßüäöÄÖÜ.-]+\.[a-z]{2,4}$/i;
				if(value.search(valid_mail) == -1)
					return false;
				break;
			case "url":
				var valid_url = /^(https?|ftp):\/\/([a-z0-9._-]+:[a-z0-9._-]+@)?[a-z0-9A-ZßüäöÄÖÜ#._\/~% -]+(\?([a-z0-9_-]+(=[a-zA-Z0-99ßüäöÄÖÜ+%?_-]+&?)?)*)?$/i;
				if(value.search(valid_url)== -1)
					return false;
				break;
			case "checked":
				if(!element.checked)
					return false;
				break;
		}
		return true;
	}

	function test(str){
		alert(str);
	}

	function getDiv(id){
	 return document.getElementById(id);
	}

	function setDivVisible(div_id, visible){
	  div = getDiv(div_id);
	  if (isDefined(div)){
		 div.style.visibility = visible? "visible":"hidden";
	  }
	}
	function setDivText(div_id, text){
	  div = getDiv(div_id);
	  if (isDefined(div)){
		 div.innerHTML=text;
	  }
	}
	function showError(idName, text){
	   setDivVisible(idName, true);
	   setDivText(idName, text);
	}
	function isDefined(variable){
		if (variable == null) return false;
		return (typeof(variable) == "undefined")?  false: true;
	}

	function searchValue(val, res, type){
		elem = document.getElementById(val);
		if (isDefined(elem)){
			elem2 = document.getElementById(res);
			if (isDefined(elem2)){
				elem2.value = '';
				fillValue(val, res, type);
			}
		}
	}

	function fillValue(val, res, type){
		elem = document.getElementById(val);
		if (isDefined(elem)){
			elem2 = document.getElementById(res);
			if (isDefined(elem2)){
				if (elem2.value ==""){
					ajaxLoad(elem.value, res, type);
				}
			}
		}
	}

	function ajaxLoad(value, res, type){
		arr = {};
		link ='/lookup-'+type+'2name/'+value;
		$.get(link, arr, function(data){ valueLoaded(data, res);} );
	}

	function valueLoaded(data, res){
		//alert('here with '+data+' ['+res+']');
		$('#'+res).attr('value', data);
		res= "#"+res+"icon";
		$(res).css({border:'1px solid blue'});
		$(res).css({border:'2px solid blue'});
		$(res).css({border:'3px solid blue'});
		$(res).css({border:'0px'});
		//$(res).animate({border:'0px solid blue'}, "slow");
	}

var isNN =  (navigator.appName.indexOf("Netscape")!=-1);
function autoTab(input, e) {
len = input.maxLength;
var keyCode = (isNN) ? e.which : e.keyCode;
var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
if(input.value.length >= len && !containsElement(filter,keyCode)) {
input.value = input.value.slice(0, len);
input.form[(getIndex(input)+1) % input.form.length].focus();
}
function containsElement(arr, ele) {
var found = false, index = 0;
while(!found && index < arr.length)
if(arr[index] == ele)
found = true;
else
index++;
return found;
}
function getIndex(input) {
var index = -1, i = 0, found = false;
while (i < input.form.length && index == -1)
if (input.form[i] == input)index = i;
else i++;
return index;
}
return true;
}

var lastHighlited=null;
function rowsHighlight(){
	$('div[@class="row"] input').each(function (i) {
		$(this).focus(function (){
			if ($(this).attr('type')=="submit") return;
			fparent = $(this).parent().get(0);
			dparent = $(fparent).parent().get(0);
			div2hi = dparent;
			if ((!(div2hi==lastHighlited)) && lastHighlited!=null){
				lh = $(lastHighlited);
				lh.attr('class', 'row');
			}
			$(div2hi).attr('class', 'rowhl');
			lastHighlited = div2hi;
		});
	});
	$('#buttonBack').mouseover(function(){
		$(this).attr('class', 'subzhl');
	});
	$('#buttonBack').mouseout(function(){
		$(this).attr('class', 'subz');
	});
	$('#buttonNext').mouseover(function(){
		$(this).attr('class', 'subwhl');
	});
	$('#buttonNext').mouseout(function(){
		$(this).attr('class', 'subw');
	});
}


