// ------------------------------------------------------------------------------------------------
// Diverse Funktionen für die Feldvalidierung
// CopyRight by www.simplified.ch
// Autor : Gilbert Herzig
// ------------------------------------------------------------------------------------------------


// ------------------------------------------------------------------------------------------------
// Funktion prüft Feld auf bestimmte unerlaubte Zeichen
// Aufruf im Textfeld Tag : onKeypress="CheckChars('44,47,.....');"
// ------------------------------------------------------------------------------------------------
function CheckChars(chars)
	{
	// CharSets :
	// " = 34
	// ' = 39
	// * = 42
	// + = 43
	// , = 44
	// - = 45
	// . = 46
	// / = 47
	// : = 58
	// ; = 59
	// = = 61
	// ? = 63
	// \ = 92
	// ` = 96
	// ^ = 94
	// alert(event.keyCode);

	var denied = chars.split(",");
	for (n = 0; n < denied.length; n++)
		{
		if(event.keyCode == denied[n])
			{
				event.returnValue = false
				break;
			}
		}
	}

// ------------------------------------------------------------------------------------------------
// Funktion prüft Feld auf nur erlaubte Zeichen
// Aufruf im Textfeld Tag : onKeypress="AllowChars('44,47,.....');"
// wobei die angegebenen Chars erlaubt sind
// ------------------------------------------------------------------------------------------------
function AllowChars(chars)
	{
	var allow = chars.split(",");
	for (n = 0; n < allow.length; n++)
		{
		if(event.keyCode == allow[n])
			{
				return true;
			}
		}
		event.returnValue = false
	}


	
// ------------------------------------------------------------------------------------------------
// Funktion prüft Feld auf korrekte EMail Syntax
// Aufruf im Textfeld Tag : onBlur="if(this.value!=''){CheckEMail(this,this.value)}"
// ------------------------------------------------------------------------------------------------
function CheckEMail(objField,tmpVal)
	{

	if(!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(tmpVal))
		{
			alert("Invalid email format!");
			objField.focus();
			return false;
		}
	}

// ------------------------------------------------------------------------------------------------
// Funktion prüft ob ausschliesslich Zahlen verwendet wurden
// Als Parameter wird angegeben werden, dass Dezimaltrennung (.) erlaubt ist oder nicht
// Aufruf im Textfeld Tag : onBlur="if(this.value!=''){NumberOnly(this,this.value,true|false)}"
// ------------------------------------------------------------------------------------------------
function NumberOnly(objField,tmpVal,dec)
	{
		if (dec==true)
			{
				var checkString = "0123456789.";
			}else{
				var checkString = "0123456789";
			}
		var checkStr = tmpVal;
		var allValid = true;
		var allNum = "";

		for (i = 0;  i < checkStr.length;  i++)
			{
				ch = checkStr.charAt(i);
				for (j = 0;  j < checkString.length;  j++)
					if (ch == checkString.charAt(j))
					break;
					if (j == checkString.length)
						{
							allValid = false;
							break;
						}
					allNum += ch;
			}

		if (!allValid)
			{
				alert("Please enter numbers only!");
				objField.focus();
				return false;
			}else{
				return true;
			}
	}


// ------------------------------------------------------------------------------------------------
// Funktion prüft Feld auf korrekte Zeit
// Aufruf im Textfeld Tag : onBlur="if(this.value!=''){CheckTime(this,this.value)}"
// ------------------------------------------------------------------------------------------------
function CheckTime(objField,tmpTime)
	{
	// ----------------------------------------------------------------------------------------
	// Ersetzte ggf. alle Kommas oder Punkte durch Doppelpunkt
	// ----------------------------------------------------------------------------------------
		out	= ",";
		fil	= ":";
		tempVar	= "" + tmpTime;
		while (tempVar.indexOf(out)>-1)
			{
				pos = tempVar.indexOf(out);
				tempVar = "" + (tempVar.substring(0, pos) + fil + 
				tempVar.substring((pos + out.length), tempVar.length));
			}
		tmpTime = tempVar

		out	= ".";
		fil	= ":";
		tempVar	= "" + tmpTime;
		while (tempVar.indexOf(out)>-1)
			{
				pos = tempVar.indexOf(out);
				tempVar = "" + (tempVar.substring(0, pos) + fil + 
				tempVar.substring((pos + out.length), tempVar.length));
			}
		tmpTime = tempVar


	// ----------------------------------------------------------------------------------------
	// Prüfe ob Punkte im Zeitformat oder ob ohne (22:15 oder 2215)
	// ----------------------------------------------------------------------------------------
		tt = tmpTime.indexOf(":")
		if(tt==-1)	// Keine Doppelpunkte eingegeben, Formatiere String
			{
				tmpVar = "" + tmpTime;
				tmpTime = tmpVar.substring(0,2) + ":" + tmpVar.substring(2,4)
			}


	// ----------------------------------------------------------------------------------------
	// Zerlege Stunde Minute
	// ----------------------------------------------------------------------------------------
		tmpVar=tmpTime.split(':');
		Stunde = tmpVar[0];
		Minute = tmpVar[1];
		if(Stunde.length==1){Stunde = "0" + Stunde}
		if(Minute.length==1){Minute = "0" + Minute}
		tmpTime = Stunde + ":" + Minute
		objField.value = tmpTime;

	// ----------------------------------------------------------------------------------------
	// Prüfe ob Zeit möglich ist
	// ----------------------------------------------------------------------------------------
		// Stunde
		if(Stunde>23||Stunde<=0)
			{
				alert("Invalid date format!");
				objField.focus();
				return false;
			}
		// Minute
		if(Minute>59||Minute<0)
			{
				alert("Invalid time format!");
				objField.focus();
				return false;
			}
	}



// ------------------------------------------------------------------------------------------------
// Funktion prüft Feld auf korrektes Datum
// Aufruf im Textfeld Tag : onBlur="if(this.value!=''){CheckDate(this,this.value)}"
// ------------------------------------------------------------------------------------------------
function CheckDate(objField,tmpDate)
	{
	// ----------------------------------------------------------------------------------------
	// Prüfe Inhalt auf mindestens 6 Zeichen, sonst Abbruch
	// ----------------------------------------------------------------------------------------
		if(objField.value.length<6)
			{
				alert("Invalid date time format!");
				objField.value="";
				objField.focus();
				return false;
			}

	// ----------------------------------------------------------------------------------------
	// Prüfe Inhalt auf mindestens 6 Zeichen, sonst Abbruch
	// ----------------------------------------------------------------------------------------
		if(objField.value.length>10)
			{
				alert("Invalid date time format!");
				objField.value="";
				objField.focus();
				return false;
			}

	// ----------------------------------------------------------------------------------------
	// Ersetzte ggf. alle Kommas durch Punkt
	// ----------------------------------------------------------------------------------------
		out	= ",";
		fil	= ".";
		tempVar	= "" + tmpDate;
		while (tempVar.indexOf(out)>-1)
			{
				pos = tempVar.indexOf(out);
				tempVar = "" + (tempVar.substring(0, pos) + fil + 
				tempVar.substring((pos + out.length), tempVar.length));
			}
		tmpDate = tempVar

	// ----------------------------------------------------------------------------------------
	// Rufe Funtion NumberOnly auf um zu prüfen ob Zahlen und Punkte angegeben wurden
	// ----------------------------------------------------------------------------------------
		if(NumberOnly(objField,tmpDate,true)==false)
		{
			objField.value="";
			
		}else{


	// ----------------------------------------------------------------------------------------
	// Prüfe ob Punkte im Datumsformat oder ob ohne (25.12.01 oder 251201)
	// ----------------------------------------------------------------------------------------
		dd = tmpDate.indexOf(".")
		if(dd==-1)	// Keine Punkte eingegeben, Formatiere String
			{
				tmpVar = "" + tmpDate;
				tmpDate = tmpVar.substring(0,2) + "." + tmpVar.substring(2,4) + "." + tmpVar.substring(4,tmpVar.length)
			}


	// ----------------------------------------------------------------------------------------
	// Zerlege Tag Monat Jahr
	// ----------------------------------------------------------------------------------------
		tmpVar=tmpDate.split('.');
		Tag = tmpVar[0];
		Monat = tmpVar[1];
		Jahr = tmpVar[2];
		if(Tag.length==1){Tag = "0" + Tag}
		if(Monat.length==1){Monat = "0" + Monat}
		tmpDate = Tag + "." + Monat + "." + Jahr
		objField.value = tmpDate;

	// ----------------------------------------------------------------------------------------
	// Prüfe ob das Jahr ein Schaltjahr ist oder nicht (für Februar)
	// ----------------------------------------------------------------------------------------
		var Schaltjahr = false;
		tmpInt = "" + (Jahr/4)		// Ist Jahr durch 4 eine Ganzzahl ? (Schaltjahr)
		if(tmpInt.indexOf(".")==-1)
			{Schaltjahr = true;}
		tmpInt = "" + (Jahr/100)	// Ist Jahr durch 100 eine Ganzzahl ? (KEIN Schaltjahr)
		if(tmpInt.indexOf(".")==-1)
			{Schaltjahr = false;}
		tmpInt = "" + (Jahr/400)	// Ist Jahr durch 400 eine Ganzzahl ? (Schaltjahr)
		if(tmpInt.indexOf(".")==-1)
			{Schaltjahr = true;}

	// ----------------------------------------------------------------------------------------
	// Prüfe ob Datum möglich ist
	// ----------------------------------------------------------------------------------------
		// Tag
		// Wenn 31 Tage gültig sind
		if(Monat==1||Monat==3||Monat==5||Monat==7||Monat==8||Monat==10||Monat==12)
			{
				if(Tag>31||Tag<=0)
					{
						alert("Invalid date time format!");
						objField.value="";
						objField.focus();
						return false;
					}
			}
		// Tag
		// Wenn 30 Tage gültig sind
		if(Monat==4||Monat==6||Monat==9||Monat==11)
			{
				if(Tag>30||Tag<=0)
					{
						alert("Invalid date time format!");
						objField.value="";
						objField.focus();
						return false;
					}
			}
		// Tag
		// Wenn Februar
		if(Monat==2)
			{
				if(Schaltjahr==true)
					{
						if(Tag>29||Tag<=0)
							{
								alert("Invalid date time format!");
								objField.value="";
								objField.focus();
								return false;
							}
						}
					else
						{
						if(Tag>28||Tag<=0)
							{
								alert("Invalid date time format!");
								objField.value="";
								objField.focus();
								return false;
							}
					}
			}

		// Monat
		if(Monat<=0||Monat>12)
			{
				alert("Invalid date time format!")
				objField.value="";
				objField.focus();
				return false;
			}
		}
	}

// ------------------------------------------------------------------------------------------------
// Funktion prüft alle Formfelder ob Zwangsfelder sind über den class-Namen und/oder die id
// für IE und kompatible
// Aufruf im Form Tag : onsubmit="return Validate(this)"
// ------------------------------------------------------------------------------------------------
function Validate(theForm)
	{
	// ----------------------------------------------------------------------------------------
	// Text der ausgegeben wird bei Fehler
	// ----------------------------------------------------------------------------------------
		var pass=true;

		var msg1 = "Please complete all the highlighted fields";
		switch (lng) {
		    case "de":
		        msg1 = unescape("Bitte f%FCllen Sie alle farblich markierten Felder aus");
		        break;
		    case "fr":
		        msg1 = unescape("Veuillez compl%E9ter tous les champs marqu%E9s en couleur");
		        break;
		    case "it":
		        msg1 = "Vi preghiamo di compilare tutti i campi evidenziati";
		        break;
		    case "es":
		        msg1 = "Le rogamos que rellene todos los campos marcados en color";
		        break;
		    case "en":
		        msg1 = "Please complete all the highlighted fields";
		        break;
		}

		// Radio Buttons in eigener Routiene verarbeiten da technik etwas anders
		aryRadio = new Array();
		cntRadio = new Array();
		var counter = 0;
		var radiopass=false;
		for (i=0;i<theForm.length;i++)
			{
				var tempobj=theForm.elements[i];
				if(tempobj.className=="rbmust"&&tempobj.type=="radio")
					{			
						if(aryRadio[tempobj.name]==undefined)
							{
								aryRadio[tempobj.name]=tempobj.name;
								cntRadio[counter]=tempobj.name;
								counter+=1;
							}
						if((tempobj.checked==true)&&(aryRadio[tempobj.name]!=''))
						{
							aryRadio[tempobj.name]='';
						}
					}
			}

		for (i=0;i<cntRadio.length;i++)
			{
				if(aryRadio[cntRadio[i]]!='')
				{
					alert('radio groups '+aryRadio[cntRadio[i]]+' needs a choice')
					pass=false;
				}
			}

		if(pass==true)
			{
				for (i=0;i<theForm.length;i++)
					{
						var tempobj=theForm.elements[i];

						if(tempobj.className=="tbmust"||tempobj.className=="comboxmust")
							{
		
								if((tempobj.type=="text"||tempobj.type=="password"||tempobj.type=="file"||tempobj.type=="textarea")&&tempobj.value=='')
									{
										pass=false;
										break;
									}
		
								if(tempobj.className=="comboxmust"&&(tempobj.length==0||tempobj.value==""))
									{
										pass=false;
										break;
									}
		
							}

					    if (tempobj.className == "listboxmust") {

					        if (tempobj.length == 0) {
					            pass = false;
					            break;
					        }

					    }

					}
			}

		if (!pass)
			{
			    //alert("Please enter data to all colored fields");
			    alert(msg1);
				tempobj.focus();
				return false;
			}else{
				return true;
			}
	}
