var errors ="";
function chkFrm(theForm)
{
	errors="";
	if (theForm.checkem)
	{
		var chk = theForm.checkem.value;
		if (chk)
		{
			chk=chk.split(",");
			for (i=0;i<chk.length;i+=3)
			{
				var ok = true;
				var nm = chk[i];var co = chk[i+1];var sn=chk[i+2];
				if (co.indexOf("{") !=-1)
				{var pos = co.indexOf("{");var x = co;co = x.substring(0,pos);var len = x.substring(pos+1,x.indexOf("}"));}
				switch (co)
				{
				case "e": // empty
					ok = NotEmpty(theForm.elements[nm].value);
					if (!ok) {errors += "Feld " + sn + " darf nicht leer sein.\n";}
				break;
				case "eo": // not empty all fields
					var f = nm.split("#");
					var ok = false;
					for(y=0;y<f.length;y++)
					{
						ok = NotEmpty(theForm.elements[f[y]].value);
						if (ok)
							break;
					}
					if (!ok) {errors += "Feld " + sn + " darf nicht leer sein.\n";}
				break;
				case "n": // number
					ok = IsNumber(theForm.elements[nm].value);
					if(!ok) {errors += "Feld " + sn + " darf nur Zahlen enthalten.\n";};		 
				break;
				case "d": // date (german)
					ok = IsDate(theForm.elements[nm].value); 
					if (!ok) {errors += "Feld " + sn + ": Kein korrektes Datumsformat (tt.mm.jjjj).\n";}		
				break;	
				case "de": // date correct or empty
					var ok2 =  NotEmpty(theForm.elements[nm].value);
					if (ok2) {ok=IsDate(theForm.elements[nm].value)};
					if (!ok) {errors += "Feld " + sn + ": Kein korrektes Datumsformat (tt.mm.jjjj).\n";}		
				break;
				case "m": // mail
					ok = IsMail(theForm.elements[nm].value);
					if (!ok) {errors += "Feld " + sn + " muss eine gültige Emailadresse enthalten.\n";};		
				break;	
				case "fl": // fieldlength {length}
					ok = HasLength(theForm.elements[nm].value,len) 
					if (!ok){errors += "Feld " + sn + " muss mindestens " + len + " Zeichen lang sein.\n";}
				break;	
				case "c": // one or more fields must be checked
					var ok = false;
					theVal =  nm.split("#");
					ok = isChecked(theVal,theForm);
					if (!ok){errors += "Feld " + sn + " muss ausgewählt sein.\n";}
				break;	
				case "eoc": // either checked or filled
					theVal =  nm.split("#");
					ok = CheckEitherOr(theVal,theForm)
					if (!ok){errors += "Eins der Felder muss ausgewählt sein: " +  sn + "\n";}
				break;
				}
			} // end for loop checks
			if(errors){alert("Es wurden folgende Fehler entdeckt:\n" + errors);return false;}else{return true};
	
		}
		else
		{
			alert ("Missing configuration for validation.\nCheck fields in hidden field \"checkem\".");
			return false;
		}	
	}
	else
	{
		alert ("Missing configuration for validation.\nCheck hidden field \"checkem\".");
		return false;
	}	
}
function NotEmpty(theVal)
{return (theVal!="") ? true : false};

function IsNumber(theVal)
{var re = new RegExp ("^\\d+([\.,]?\\d+)?$");var p = re.test(theVal); return (p) ? true : false}

function IsDate(theVal)
{var re = new RegExp ("^(\\d{1,2})[\.](\\d{1,2})[\.](\\d\\d(\\d\\d)?)$");var p = re.test(theVal);return (p) ? true : false} 


function IsMail(theVal)
{var re = new RegExp ("^([0-9a-zA-Z][0-9a-zA-Z-_\\.]+)@([0-9a-zA-Z][0-9a-zA-Z-_]+\\.)+[a-zA-Z]{2,4}$");var p = re.test(theVal);return (p) ? true : false}

function HasLength(theVal,theLength)
{return (theVal.length<parseInt(theLength)) ? false :true }

function isChecked(theVal,theForm) {
	for(z=0;z<theVal.length;z++)
	{
		if (theForm.elements[theVal[z]].checked==true)
			return true;
	}	
	return false;	
}	
function CheckEitherOr(theVal,theForm) {
	retval = false;
	for(z=0;z<theVal.length;z++)
	{
		Ftype =  (theForm.elements[theVal[z]].type);
		switch (Ftype)
		{
			case "checkbox":
			case "radio":
				if (theForm.elements[theVal[z]].checked==true)
					return true;
			break;
			default:
				if (NotEmpty(theForm.elements[theVal[z]].value))
					return true;
			break;
		}
	}	
	return false;	
}
