
function getFieldValue(name) {
	return getValue(document.forms[0].elements[name]);
}
function getFormFieldValue(f,name) {
//alert(f.elements[name]);
	return getValue(f.elements[name]);
}

function validate(sender,myarray,err_hd){

//	var err_msg = !err_hd?new Array('Folgende Fehler sind aufgetreten:\n'):new Array(err_hd+'\n');
	var err_msg = new Array();
	var err_field = new Array();
	var error = false;
	var i;
	
	for (i=0;i<myarray.length;i++){
	//  field = document.forms[sender.name].elements[myarray[i][0]];
	  field = sender.elements[myarray[i][0]];
	  if(!field) {
		alert("internal field " + myarray[i][0] + " unknown");
		return false;
	  }
	// errortext reset
	
	var r = document.getElementById("error_"+myarray[i][0]);
	if (r) setVisible(r,false);
	
	//* Block 1 ?berpr?ft Felder, die ausgef?llt sein m?ssen */
	  if (myarray[i][1].indexOf('e')>-1){
	    if (!getValue(field)){
	      error = true;
	      err_msg.push(myarray[i][2]);
	      err_field.push(myarray[i][0]);
	    }
	  }
	
	//* Block 2 ?berpr?ft, ob die Emailadresse formal richtig ist */
	  if (myarray[i][1].indexOf('m')>-1) {
	    if (getValue(field)) {
	      var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
	      var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
	      var regex = "^"+usr+"\@"+domain+"$";
	      var myrxp = new RegExp(regex);
	      var check = (myrxp.test(getValue(field)));
	      if (check!=true) {
	        error=true;
	        err_msg.push(myarray[i][2]);
	        err_field.push(myarray[i][0]);
	      }
	    }
	  }
	
	//* Block 3 ?berpr?ft Felder, deren Wert eine Zahl sein muss */
	  else if (myarray[i][1].indexOf('n')>-1) {
	    var num_error = false;
	    if(getValue(field)) {
	      var myvalue = getValue(field);
	      var num = myvalue.match(/[^0-9,\.]/gi)
	      var dot = myvalue.match(/\./g);
	      var com = myvalue.match(/,/g);
	        if (num!=null) {
	          num_error = true;
	        }
	        else if ((dot!=null)&&(dot.length>1)) {
	          num_error = true;
	        }
	        else if ((com!=null)&&(com.length>1)) {
	          num_error = true;
	        }
	        else if ((com!=null)&&(dot!=null)) {
	          num_error = true;
	        }
	    }
	    if (num_error==true) {
	        error = true;
	        err_msg.push(myvalue+" "+myarray[i][2]);
	        err_field.push(myarray[i][0]);
	    }
	  }
	//* Block 3 ?berpr?ft Felder, deren Wert eine Zahl sein muss */
	  else if (myarray[i][1].indexOf('g')>-1) {
	    var num_error = false;
	    if(getValue(field)) {
	      var myvalue = getValue(field);
	      var num = myvalue.match(/[^0-9]/gi)

	        if (num!=null) {
	          num_error = true;
	        }
	    }
	    if (num_error==true) {
	        error = true;
	        err_msg.push(myarray[i][2]);
	        err_field.push(myarray[i][0]);
	    }
	  }
	
	//* Block 4 ?berpr?ft Wert anhand eines regul?ren Audrucks auf bestimmte Muster */
	  else if (myarray[i][1].indexOf('r')>-1) {
	    var regexp = myarray[i][3];
	    if (getValue(field)) {
	      if (!regexp.test(getValue(field))) {
	        error = true;
	        err_msg.push(myarray[i][2]);
	        err_field.push(myarray[i][0]);
	      }
	    }
	  }
	//* Block 4 ?berpr?ft Wert anhand eines regul?ren Audrucks auf bestimmte Muster */
	  else if (myarray[i][1].indexOf("dt")>-1) {
	    if (getValue(field)) {
	      if (!isValidDateTime(getValue(field))) {
	        error = true;
	        err_msg.push(getValue(field)+" "+myarray[i][2]);
	        err_field.push(myarray[i][0]);
	      }
	    }
	  }
	  else if (myarray[i][1].indexOf('d')>-1) {
	    if (getValue(field)) {
	      if (!isValidDate(getValue(field))) {
	        error = true;
	        err_msg.push(getValue(field)+" "+myarray[i][2]);
	        err_field.push(myarray[i][0]);
	      }
	    }
	  }
	  else if (myarray[i][1].indexOf("t")>-1) {
	    if (getValue(field)) {
	      if (!isValidTime(getValue(field))) {
	        error = true;
	        err_msg.push(getValue(field)+" "+myarray[i][2]);
	        err_field.push(myarray[i][0]);
	      }
	    }
	  }
	  else if (myarray[i][1].indexOf('i')>-1) {
	    var nr = myarray[i][3];

	    if (nr != -1 && getValue(field) && getValue(field).length < nr) {
	        error = true;
	        err_msg.push(myarray[i][2]);
	        err_field.push(myarray[i][0]);
	    }
	  }
	  else if (myarray[i][1].indexOf('a')>-1) {
	    var nr = myarray[i][3];

	    if (nr != -1 && getValue(field) && getValue(field).length > nr) {
	        error = true;
	        err_msg.push(myarray[i][2]);
	        err_field.push(myarray[i][0]);
	    }
	  }
	  /*
	  else if (myarray[i][1].indexOf('o')>-1) {
	    var field2 = sender.elements[myarray[i][3]];;
	    if (!getValue(field) && !getValue(field2)) {
	        error = true;
	        err_msg.push(myarray[i][2]);
	    }
	  }
	  */
	  else if (myarray[i][1].indexOf('o')>-1) {
//	    var field2 = sender.elements[myarray[i][3]];;
		var fields = myarray[i][3].split("|");
		var c;
		var ok = false;
		if(getValue(field)) {
			ok = true;
		}
		for(c=0;c<fields.length && !error;c++) {
			var field2 = sender.elements[fields[c]];
//			alert(field2.name);
		    if (getValue(field2)) {
		    	ok = true;
		    }		   
		}
	   	if(!ok) {
	        error = true;
	        err_msg.push(myarray[i][2]);		   	
	        err_field.push(myarray[i][0]);
	   	}
	  }
	  
	  
	  else if (myarray[i][1].indexOf('=')>-1) {
	    var field2 = sender.elements[myarray[i][3]];;
	    if (getValue(field)) {
	      if (getValue(field) != getValue(field2)) {
	        error = true;
	        err_msg.push(getValue(field)+" "+myarray[i][2]);
	        err_field.push(myarray[i][0]);
	      }
	    }
	  }

	  /* Sozialversicherungsnummer, Joerg */
	  
	  else if (myarray[i][1].indexOf('s')>-1) {		
	    var div=11;
	    var fact=new Array(3,7,9,0,5,8,4,2,1,6);
	    var sum=0;
	    var str=getValue(field);
	    for(var x = 0; x < 10; x++) {
	      //alert(str.charAt(x));
	      sum+=fact[x]*str.charAt(x);
	      //alert(sum);
	    }
	    sum%=11;
	    //alert(sum+" "+str.charAt(3));
	    if(sum!=str.charAt(3) || str.length != 10) {
	      error = true;
	      err_msg.push(myarray[i][2]);
	      err_field.push(myarray[i][0]);
	    }
	  }
	
	}
	

  if (error) {
    //err_msg = err_msg.join('\n\xB7 ');
    //alert(err_msg);
    var i=0;
    var errStr ="";
    var f= "";
    for(i=0;i<err_field.length;i++) {
   		f+=err_field[i];
    	var ef = document.getElementById("error_"+err_field[i]);
    	if(ef) {
//    		ef.innerHTML = err_msg[i];
    		setVisible(ef,true);
    	} else {
    		errStr += err_msg[i]+"\n";
    	}
    
    }
//    alert(f);
    if(errStr) {
    	alert("Folgende Fehler sind aufgetreten:\n" + errStr);		    			
    }
    return false;
  } else {
    return true;
  }
}

function getValue(field) {
	if(field) {
		if(field.options) {
			if(!field.options[field.selectedIndex]) {
				return "";
			}
			if(field.options[field.selectedIndex].value) {
				return field.options[field.selectedIndex].value;
			} else {
				//return field.options[field.selectedIndex].text;
			}
		} else if(field[0]) {
			var i;
			for(i=0;i<field.length;i++) {
				if(field[i].checked) {
					return field[i].value;
				}
			}
		} else {
			if(field.type && field.type =="checkbox") {
				if(field.checked) {
					return field.value;			
				} else {
					return "";			
				}
			}
			return field.value;
		}
	} else {
		alert("getValue internal field " + field + " unknown");
		return "";
	}	
}
function setFieldValue(field,v) {
	setValue(document.forms[0].elements[field],v);
}
function setValue(field,v) {
	if(field) {
		if(field.options) {
			if(!v[0]) {
				var i;
				for(i=0;i<field.options.length;i++) {
					if(field.options[i].value == v) {
						field.selectedIndex = i;
						field.options[i].selected=true;
//						alert("setting:"+field.selectedIndex+":"+i);
						break;
					}				
				}			
			} else {
			
			}
		} else {
			field.value = v;
		}
	}
}
function isValidDateTime (datum)
{
	var dt = datum.split(" ");
	return isValidDate(dt[0]) && isValidTime(dt[1]);
}

function isValidTime (datum) {
	var dt = datum.split(":");
	var h = parseInt(dt[0]);
	var m = parseInt(dt[1]);
	return h >= 0 && h<24 && m>=0 && m<60;
}
function isValidDate (datum)
{
    //(Schritt 1) Fehlerbehandlung
 if (!datum) return false;
 datum=datum.toString();

    //(Schritt 2) Aufspaltung des Datums
 datum=datum.split(".");
 if (datum.length!=3) return false;

    //(Schritt 3) Entfernung der fuehrenden Nullen und Anpassung des Monats

 datum[0]=parseInt(datum[0],10);
 datum[1]=parseInt(datum[1],10)-1;

    //(Schritt 4) Behandlung Jahr nur zweistellig
 if (datum[2].length==2) datum[2]="20"+datum[2];

    //(Schritt 5) Erzeugung eines neuen Dateobjektes
 var kontrolldatum=new Date(datum[2],datum[1],datum[0]);

    //(Schritt 6) Vergleich, ob das eingegebene Datum gleich dem JS-Datum ist
 if (kontrolldatum.getDate()==datum[0] && kontrolldatum.getMonth()==datum[1] && kontrolldatum.getFullYear()==datum[2])
     return true; else return false;

}



