function formchecker(theForm,checkArray) {

	var allvalid = true;
	var alertstr = "";
	var num_of_elements = theForm.length;
	var checkArrayValues = new Array;
	var radioArray = new Array;


	if(checkArray!=""){
	
	var checkArrayValuesTemp = checkArray.split(",");
	var y = 0;
	
		for(var x=0;x<checkArrayValuesTemp.length/2;x++){

                checkArrayValues[x] = new Array(checkArrayValuesTemp[y],checkArrayValuesTemp[y+1]);
				y += 2;
				
		}	
	}

	for (var i=0; i<num_of_elements; i++) {
			var theElement = theForm.elements[i];
			var element_type = theElement.type;
			var element_name = theElement.name;
			var element_value = theElement.value;
	
	// Check Text boxes ...
	
			if (element_type == "text") {
				
				for(var z=0;z<checkArrayValues.length;z++){
					if(element_name==checkArrayValues[z][0]&&checkArrayValues[z][1]=="string"){
						if (element_value.length == 0) {
							alertstr += "Das Feld '" + element_name + "' ist nicht ausgef\u00FCllt.\n\n";
							allvalid = false;
						} 
					}
					
					if(element_name==checkArrayValues[z][0]&&checkArrayValues[z][1]=="email"){
						if (element_value.length == 0) {
							
							var element_nameTmp = element_name.toLowerCase();
						 if(element_nameTmp=="e_mail")element_name = element_name.replace("_","-");
							
							alertstr += "Das Feld '" + element_name + "' ist nicht ausgef\u00FCllt.\n\n";
							allvalid = false;
						}else{
				
  							// Check: kommt ein '@' und ein '.' in der Adresse vor
  							var emailFilter=/^.+@.+\..{2,3}$/;
  							if (!(emailFilter.test(element_value))) { 
										
											var element_nameTmp = element_name.toLowerCase();
						 				if(element_nameTmp=="e_mail")element_name = element_name.replace("_","-");
							
											alertstr += "Das Feld '" + element_name + "' enth\u00e4lt keine g\u00FCltige E-Mailadresse.\n\n";
											allvalid = false;
									}else{
							
								  	// Check: werden illegale Zeichen verwendet
	  								var illegalChars= /[\(\)\<\>\ \,\;\:\\\/\"\'\[\]]/
	  								if (element_value.match(illegalChars)){
											
													var element_nameTmp = element_name.toLowerCase();
						 						if(element_nameTmp=="e_mail")element_name = element_name.replace("_","-");

											  alertstr += "Das Feld '" + element_name + "' enth\u00e4lt keine g\u00FCltige E-Mailadresse.\n\n";
													allvalid = false;
											}else{
								
											  // Check: gibt es zwei @
			 
			 									var firstTime = element_value.indexOf("@");
			 									firstTime = parseInt(firstTime,10)+1;
 												if (element_value.indexOf("@",firstTime)!=-1){
														
															var element_nameTmp = element_name.toLowerCase();
						 								if(element_nameTmp=="e_mail")element_name = element_name.replace("_","-");
													
														
														alertstr += "Das Feld '" + element_name + "' enth\u00e4lt keine g\u00FCltige E-Mailadresse.\n\n";
														allvalid = false;
													}else{
				
														// Check: gibt es die Kombination .@
				 										if (element_value.indexOf(".@")!=-1){
															
																	var element_nameTmp = element_name.toLowerCase();
						 										if(element_nameTmp=="e_mail")element_name = element_name.replace("_","-");

															
																	alertstr += "Das Feld '" + element_name + "' enth\u00e4lt keine g\u00FCltige E-Mailadresse.\n\n";
																	allvalid = false;
															}
												}
										}
							}
  						}
					}
                }
			}
	
	// Check Textarea boxes ...
	
			if (element_type == "textarea") {
			
				for(var z=0;z<checkArrayValues.length;z++){
					if(element_name==checkArrayValues[z][0]&&checkArrayValues[z][1]=="string"){
						
						if (element_value.length == 0) {
							alertstr += "Das Feld '" + element_name + "' ist nicht ausgef\u00FCllt.\n\n";
							allvalid = false;
						}
					}
				} 
			}
			
			
			
			
			
			
			
	// Check Radiobuttons ...
	
			if (element_type == "radio") {
			
				for(var z=0;z<checkArrayValues.length;z++){
					if(element_name==checkArrayValues[z][0]&&checkArrayValues[z][1]=="radio"){
						
						if(radioArray.length>0){
						    var allreadyChecked = false;
							var rChecked = false;
							for(var a=0;a<radioArray.length;a++){
								if(radioArray[a]==element_name)allreadyChecked=true;
							}
							if(!allreadyChecked){
								for(var b=0;b<(eval("theForm."+element_name+".length"));b++){
									if(eval("theForm."+element_name+"["+b+"].checked"))rChecked = true;
								}
								if(!rChecked){
									alertstr += "Bei '" + element_name + "' ist nichts ausgew\u00e4hlt.\n\n";
									allvalid = false;
								}
								radioArray.push(element_name);
							}
						}else{
						    var rChecked = false;
							for(var b=0;b<(eval("theForm."+element_name+".length"));b++){
								if(eval("theForm."+element_name+"["+b+"].checked"))rChecked = true;
							}
							if(!rChecked){
								alertstr += "Bei '" + element_name + "' ist nichts ausgew\u00e4hlt.\n\n";
								allvalid = false;
							}
							radioArray.push(element_name);
						}	
					}
				} 
			}				
			
		
			
			
	// Check Select ...
	
			if (element_type == "select-one") {
			
			
				for(var z=0;z<checkArrayValues.length;z++){
					if(element_name==checkArrayValues[z][0]&&checkArrayValues[z][1]=="select"){
						if(eval("theForm."+element_name+".options[theForm."+element_name+".selectedIndex].value")==""){
							alertstr += "Bei '" + element_name + "' ist nichts ausgew\u00e4hlt.\n\n";
							allvalid = false;
						}
					}
				}		
			}			
			
			
			

			
										
						
	}

	if (document.getElementById("sperre").value.length == 0) {
		alertstr += "Das Feld 'Spamschutz' ist nicht ausgef\u00FCllt.\n\n";
		allvalid = false;
	} 


	if (allvalid) {
		return true;
	} else {
		alert (alertstr);
		return false;
	}
}
