function validate(frm, obj, typ, txt) {
	switch(typ) 
	{ 
		case "required": 
		{
			if (eval(document.forms[frm].elements[obj].value.length) == 0) {
				alert(txt);
				document.forms[frm].elements[obj].focus();
				return false;
			}
			break;
		} // "required"
		case "mail": 
		{ 
			if(!validateMail(document.forms[frm].elements[obj].value)) { 
				alert(document.forms[frm].elements[obj].value + ": " + txt);
				document.forms[frm].elements[obj].focus();
				return false;
			}                                           
			break; 
		}// "mail" 
		case "date": 
		{ 
			if (!document.forms[frm].elements[obj].value)
				return true;
	
			eDate = validateDate(document.forms[frm].elements[obj].value);
			if(!eDate) { 
				alert(document.forms[frm].elements[obj].value + ": " + txt);
				document.forms[frm].elements[obj].focus();
				return false;
			} else
				document.forms[frm].elements[obj].value = eDate;
			break; 
		}// "date" 
		case "time": 
		{ 
			if (!document.forms[frm].elements[obj].value)
				return true;
	
			eTime = validateTime(document.forms[frm].elements[obj].value);
			if(!eTime) { 
				alert(document.forms[frm].elements[obj].value + ": " + txt);
				document.forms[frm].elements[obj].focus();
				return false;
			} else
				document.forms[frm].elements[obj].value = eTime;
			break; 
		}// "time" 
		case "index": 
		{
			if (eval(document.forms[frm].elements[obj].selectedIndex) == 0) {
				alert(txt);
				document.forms[frm].elements[obj].focus();
				return false;
			}
			break;
		} // "index"
		case "number": 
		{
			if (eval(document.forms[frm].elements[obj].value.length) == 0)
				return true;
			document.forms[frm].elements[obj].value = replaceChars(document.forms[frm].elements[obj].value, ",", ".")
			if (isNaN(document.forms[frm].elements[obj].value)) {
				alert(txt);
				document.forms[frm].elements[obj].focus();
				return false;
			}
			break;
		} // "number"
		return true;
	} // switch
}

function validateMail(email) {
  if(email.length <= 0)
	  return true;

	var splitted = email.match("^(.+)@(.+)$");
	if(splitted == null)
		return false;
	if(splitted[1] != null ) {
		var regexp_user=/^\"?[\w-_\.]*\"?$/;
		if(splitted[1].match(regexp_user) == null)
			return false;
	}
	if(splitted[2] != null) {
		var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
		if(splitted[2].match(regexp_domain) == null) {
			var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
			if(splitted[2].match(regexp_ip) == null)
				return false;
		}// if
	  return true;
  }
	return false;
}

function validateDate(entryDate) {
	//(Schritt 1) Fehlerbehandlung
	entryDate = entryDate.toString();
	entryDate = replaceChars(entryDate, ",", ".");
	entryDate = replaceChars(entryDate, "-", ".");

	//(Schritt 2) Aufspaltung des Datums
 	entryDate = entryDate.split(".");
 	if (entryDate.length != 3)
		return false;

	//(Schritt 3) Entfernung der fuehrenden Nullen und Anpassung des Monats

	entryDate[0]=parseInt(entryDate[0],10);
	entryDate[1]=parseInt(entryDate[1],10) - 1;

	//(Schritt 4) Behandlung Jahr nur zweistellig
	if (entryDate[2].length == 2)
		entryDate[2] = "20" + entryDate[2];

	//(Schritt 5) Erzeugung eines neuen Dateobjektes
	var checkDate = new Date(entryDate[2], entryDate[1], entryDate[0]);

	//(Schritt 6) Vergleich, ob das eingegebene Datum gleich dem JS-Datum ist
	if (checkDate.getDate() == entryDate[0] && checkDate.getMonth() == entryDate[1] && checkDate.getFullYear()==entryDate[2])
		return entryDate[0] + "." + (entryDate[1] + 1) + "." + entryDate[2];
	else
		return false;
}

function validateTime(entryTime) {
	//(Schritt 1) Fehlerbehandlung
	entryTime = entryTime.toString();
	entryTime = replaceChars(entryTime, ",", ":");
	entryTime = replaceChars(entryTime, "-", ":");
	entryTime = replaceChars(entryTime, ".", ":");

	//(Schritt 2) Aufspaltung des Datums
 	entryTime = entryTime.split(":");
 	if (entryTime.length != 2)
		return false;

	//(Schritt 3) Entfernung der fuehrenden Nullen und Anpassung des Monats

	entryTime[0]=parseInt(entryTime[0],10);
	entryTime[1]=parseInt(entryTime[1],10);

	//(Schritt 5) Erzeugung eines neuen Dateobjektes
	var checkTime = new Date(1970, 0, 1, entryTime[0], entryTime[1]);

	//(Schritt 6) Vergleich, ob das eingegebene Datum gleich dem JS-Datum ist
	if (checkTime.getHours() == entryTime[0] && checkTime.getMinutes() == entryTime[1])
		return entryTime[0] + ":" + entryTime[1];
	else
		return false;
}

function replaceChars(entryString, outChar, inChar) {
	temp = "" + entryString; // temporary holder
	
	while (temp.indexOf(outChar)>-1) {
		pos= temp.indexOf(outChar);
		temp = "" + (temp.substring(0, pos) + inChar + 
		temp.substring((pos + outChar.length), temp.length));
	}
	return temp;
}
