function validate(sender,myarray,err_hd,setFocus) {
	
	var err_msg = !err_hd?new Array():new Array(err_hd+'\n');
	var error = false;
	var ArrayHL = new Array();
	
	$("#ErrorLayer").hide('slow');
	
	$(".error").removeClass("error");
	
	for (i=0;i<myarray.length;i++) {
		$(".label_"+myarray[i][0]).html("");

		formular = document.getElementById(sender);
		field = formular.elements[myarray[i][0]];
		
		if (!field) {
			alert(myarray[i][0]);
		}

		/* Block 1 überprüft Felder, die ausgefüllt sein müssen */
		if (myarray[i][1].indexOf('blank')>-1) {
			if (!field.value) {
				error = true;
				err_msg.push(myarray[i][2]);
				ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
				if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
			}
		}
		
		
		/* Block 1 überprüft Felder, die ausgefüllt sein müssen */
		if (myarray[i][1].indexOf('captcha')>-1) {
			var captcha_error = false;
			
			if (!field.value) {
				captcha_error = true;
			}
			
			if (field.value.length != 0 && field.value.length < myarray[i][3]) {
				captcha_error = true;
			}

			if (captcha_error) {
				error = true;
				err_msg.push(myarray[i][2]);
				ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
				if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
			}
		}

		else if (myarray[i][1].indexOf('image')>-1) {
			if (!field.value) {
				error = true;
				err_msg.push(myarray[i][2]);
				ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
				if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
			}
		}
		
		else if (myarray[i][1].indexOf('strlen')>-1) {
			if (field.value.length != 0 && field.value.length < myarray[i][3]) {
				error = true;
				err_msg.push(myarray[i][2]);
				ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
				if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
			}
		}
	
		else if (myarray[i][1].indexOf('ident')>-1) {
			field2 = formular.elements[myarray[i][3]];
			if (field.value != field2.value) {
				error = true;
				err_msg.push(myarray[i][2]);
				ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
				if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
				ArrayHL.push( new Array ( myarray[i][3], '' ) );
				if (myarray[i][4]!='') { ArrayHL.push(myarray[i][4]); }
			}
		}
	
		/* Block 2 überprüft, ob die Emailadresse formal richtig ist */
		else if (myarray[i][1].indexOf('email')>-1) {
			if (field.value) {
				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-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
				var regex = "^"+usr+"\@"+domain+"$";
				var myrxp = new RegExp(regex);
				var check = (myrxp.test(field.value));
				if (check!=true) {
					error=true;
					err_msg.push(myarray[i][2]);
					ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
					if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
				}
			}
		}
	
		else if (myarray[i][1].indexOf('internet')>-1) {
			if (field.value) {
				var regex = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
				var myrxp = new RegExp(regex);
				var check = (myrxp.test(field.value));
				if (check!=true) {
					error=true;
					err_msg.push(myarray[i][2]);
					ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
					if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
				}
			}
		}
	
		else if (myarray[i][1].indexOf('radio')>-1) {
			var check = false;
			for(var x=0; x<field.length; x++){
				if(field[x].checked) { check = true; }
			}
			if (!check) {
				error = true;
				err_msg.push(myarray[i][2]);
				ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
				if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
			}
		}
	
		else if (myarray[i][1].indexOf('checkbox')>-1) {
			if(!field.checked) {
				error = true;
				err_msg.push(myarray[i][2]);
				ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
				if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
			}
		}
	
		/* Block 3 überprüft Felder, deren Wert eine Zahl sein muss */
		else if (myarray[i][1].indexOf('nummer')>-1) {
			var num_error = false;
			if(field.value) {
				var myvalue = field.value;
				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(myarray[i][2]);
				ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
				if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
			}
		}
	
		else if (myarray[i][1].indexOf('telefon')>-1) {
			var num_error = false;
			if(field.value) {
				var myvalue = field.value;
				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(myarray[i][2]);
				ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
				if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
			}
		}
	
		/* 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 (field.value) {
				if (!regexp.test(field.value)) {
					error = true;
					err_msg.push(field.value+" "+myarray[i][2]);
					ArrayHL.push(myarray[i][0]);
					if (myarray[i][4]!='') { ArrayHL.push(myarray[i][4]); }
				}
			}
		}
		 */
	
		/* Block 5 überprüft Felder, die als Preis formatiert sein müssen, ändert die Formatierung eventuell */
		else if (myarray[i][1].indexOf('preis')>-1) {
			var myvalue = field.value;
			var reg = /,-{1,}|\.-{1,}/;
			var nantest_value = myvalue.replace(reg,"");
			var num = nantest_value.match(/[^0-9,\.]/gi)
			sep = '.';
			if (field.value) {
				var myvalue = field.value.replace(/\./,',');
				if (myvalue.indexOf(',')==-1) { field.value = myvalue+sep+'00'; }
				else if (myvalue.indexOf(",--")>-1) { field.value = myvalue.replace(/,--/,sep+'00'); }
				else if (myvalue.indexOf(",-")>-1) { field.value = myvalue.replace(/,-/,sep+'00'); }
				else if (!myvalue.substring(myvalue.indexOf(',') + 2)) {
					error=true;
					err_msg.push(field.value+" "+myarray[i][2]);
					ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
					if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
				}
				else if (myvalue.substring(myvalue.indexOf(',') + 3)!='') {
					error=true;
					err_msg.push(field.value+" "+myarray[i][2]);
					ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
					if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
				}
				else if (num!=null) {
					error=true;
					err_msg.push(field.value+" "+myarray[i][2]);
					ArrayHL.push( new Array ( myarray[i][0], myarray[i][2] ) );
					if (myarray[i][4]!='') { ArrayHL.push( new Array ( myarray[i][4], '' ) ); }
				}
			}
		}
	
		/* Block 6 überprüft Namensfelder, und korrigiert evtl. die Groß-/Kleinschreibung */
		else if (myarray[i][1].indexOf('c')>-1) {
			var noble = new Array("de","von","van","der","d","la","da","of");
			var newvalue='';
			var myvalue = field.value.split(/\b/);
			for (k=0;k<myvalue.length;k++) {
				newvalue+= myvalue[k].substr(0,1).toUpperCase()+myvalue[k].substring(1);
			}
			for(k=0;k<noble.length;k++){
				var reg = new RegExp ("\\b"+noble[k]+"\\b","gi");
				newvalue = newvalue.replace(reg,noble[k]);
			}
			field.value = newvalue;
		}
	}

	/* im Fehlerfall werden hier die gesammelten Fehlermeldungen verarbeitet und angezeigt. Wenn das
	Formular ohne Beanstandung ist, wird es übertragen */
	if (error) {
		err_msg = err_msg.join('\n\xB7 ');
		//alert(err_msg);
		for (k=0;k<ArrayHL.length;k++) {
			$(".label_"+ArrayHL[k][0]).append(ArrayHL[k][1]);
			$(".error_"+ArrayHL[k][0]).addClass("error");
		}

		if (setFocus) {
 			IDSetFocus = ArrayHL[0];
	 		if (document.getElementById(IDSetFocus)) {
	 			document.getElementById(IDSetFocus).focus();
	 			document.getElementById(IDSetFocus).select();
	 		}
	 		if (document.getElementById('DropDownInput_'+IDSetFocus)) {
	 			document.getElementById('DropDownInput_'+IDSetFocus).focus();
	 			document.getElementById('DropDownInput_'+IDSetFocus).select();
	 		}
		}

 		return false;
	} else {
		return true;
	}
}
