/***********************************************************************************************************
*                                                                                                          *
*                     Funktion von Omar Sanchez, ENNEC soluciones (www.ennec.net)                          *  
*               basiert in einem Javascript gefunden unter www.codeproject.com                             *
*                                  veroeffentlicht unter Lizenz GPL                                        *
*                                                                                                          *
************************************************************************************************************
*                                                                                                          *
*                                                                                                          *
* Diese Funktion ueberprueft die Formularfelder nach einem vordefinierten Muster. Damit die Funktion       *
* erkennen kann, wie das Feld behandelt werden soll, wird ein Feld des Typs hidden mit der Definition      *
* verwendet                                                                                                *
*                                                                                                          *
* Sintax:                                                                                                  *
* <input type="text" name="<name>">                                                                        *
* <input type="hidden" name="CHK_<name>"                                                                   *
* value="<typ>[|<cod>][|<min>|<max>][|<nicht gueltig>]|<obligatorisch>|<Feldname>">                        *
*                                                                                                          *
*   BEMERKUNG: Die Felder <typ>,<min>,<max>,<obligatorisch>,<Feldname> beruecksichtigen                    * 
*   GROSSBUCHSTABEN nicht                                                                                  *
*                                                                                                          *
* + typ:                                                                                                   *
*   · STR   : string, <cod> gibt code an ALF->alphabetisch, ALN->alphanumerisch, ALL->irgendeine           *
*                                        ALS->alphanumerisch (min. 1 Zahl muss vorhanden sein)             *
*                                        ANO->alphanumerisch ohne Umlaute (nur a-z,0-9)                    *
*                                        ASO->alphanumerisch ohne Umlaute (min. 1 Zahl)                    *
* <input type="hidden" name="CHK_<name>" value="str|<cod>|<min>|<max>|<obligatorisch>|<Feldname>">         *
*   · INT   : ganze Zahl.                                                                                  * 
* <input type="hidden" name="CHK_<name>" value="int|<min>|<max>|<obligatorisch>|<Feldname>">               *
*   · FLOAT : Dezimale Zahl.                                                                               *
* <input type="hidden" name="CHK_<name>" value="float|<min>|<max>|<obligatorisch>|<Feldname>">             *
*   · DATE  : Datum (DD/MM/YYYY oder DD-MM-YYYY).                                                          *
* <input type="hidden" name="CHK_<name>" value="date|<min>|<max>|<obligatorisch>|<Feldname>">              *
*   · TIME  : Zeit (HH:MM oder HH:MM:SS).                                                                  *
* <input type="hidden" name="CHK_<name>" value="date|<min>|<max>|<obligatorisch>|<Feldname>">              *
*   · MAIL : ueberprueft ob das Feld mindestens ein "@" und ein "." hat, zwei Zeichen vor "@", mindestens  *
*            zwei Zeichen zwischen "@" und "." und mindestens 2 Zeichen nach dem Punkt und das Ende        *
* <input type="hidden" name="CHK_<name>" value="mail|<obligatorisch>|<Feldname>">                          *
*   · CHECK : es hat nur ein Parameter, entweder TRUE oder FALSE fuer den Fall wie z.B. das Akzeptieren    *
*             der Konditionen.                                                                             *
* <input type="hidden" name="CHK_<name>" value="check|<obligatorisch>|<Feldname>">                         *
*   · RADIO : es hat nur ein Parameter, entweder TRUE oder FALSE um eine Auswahl zu zwingen                *
* <input type="hidden" name="CHK_<name>" value="radio|<obligatorisch>|<Feldname>">                         *
*   · SEL   : es nimmt das obligatorische Parameter sowie eines aus einem nicht gueltigem Feldes fuer      *
*             die typische Division an; auch um das erste Feld als nicht gueltig zu kennzeichnen, wenn     *
*             es sich um ein Einzelauswahl-Feld handelt oder um ein Wert fuer nicht gueltig anzugeben,     *
*             welches identisch zu den Werten der nicht gueltigen Optionen ist.                            *
* <input type="hidden" name="CHK_<name>" value="sel|<nicht gueltig>|<obligatorisch>|<Feldname>">           *
*                                                                                                          *
* + min/max:                                                                                               *
*   · minimaler/maximaler Wert. Im Fall eines Datums, minimales/maximales Datum.                           *
*                                                                                                          *
* + obligatorisch:                                                                                         *
*   · nimmt true oder false an zum Bestimmen ob das Feld ausgefuellt werden muss oder nicht                *
*                                                                                                          *
* + Feldname:                                                                                              *
*   · Dieser Name bezieht sich auf das Feld der Meldungen.                                                 *
*                                                                                                          *  
*                                                                                                          *
* Verlinkung der Funktion:                                                                                 *
*                                                                                                          *
*    <script language="JavaScript" src="<Pfad>formvalidator.js"></script>                                  *
*                                                                                                          *
* Um das Formular vor dem submit zu Validieren, sollte es wie folgt integriert werden:                     *
*   <form name="fomForm" onsubmit="return CheckForm(this, <language>);">                                   *
*                                                                                                          *
* <language>: 0-deutsch; 1-englisch; (2-italienisch); 3-französisch; 4-spanisch                            *
*                                                                                                          *
***********************************************************************************************************/

var lang = new Array();
// Deutsch
lang[0] = new Array();
lang[0][0] = "Das Feld '{0}' muss ausgefüllt werden";
lang[0][1] = "Das Feld '{0}' darf nur Buchstaben enthalten";
lang[0][2] = "Das Feld '{0}' darf nur alphanumerische Zeichen enthalten";
lang[0][3] = "Die Eingabe im Feld '{0}' ist zu kurz";
lang[0][4] = "Die Eingabe im Feld '{0}' ist zu lang";
lang[0][5] = lang[0][0];
lang[0][6] = "Die Eingabe im Feld '{0}' muss numerisch sein";
lang[0][7] = "Die Eingabe im Feld '{0}' muss eine ganze Zahl sein";
lang[0][8] = "Der Wert im Feld '{0}' ist zu klein";
lang[0][9] = "Der Wert im Feld '{0}' ist zu gross";
lang[0][10] = lang[0][0];
lang[0][11] = lang[0][6];
lang[0][12] = lang[0][8];
lang[0][13] = lang[0][9];
lang[0][14] = "Wählen Sie bitte im Feld '{0}' eine Option aus";
lang[0][15] = "Klicken Sie bitte das Feld '{0}' an";
lang[0][16] = "Wählen Sie bitte ein Element im Feld '{0}' aus";
lang[0][17] = "Das ausgewählte Element im Feld '{0}' ist nicht gültig";
lang[0][18] = "Geben Sie bitte eine E-Mail Adresse ins Feld '{0}' ein";
lang[0][19] = "Die im Feld '{0}' eingegebene E-Mail Adresse ist nicht gültig";
lang[0][20] = "Geben Sie bitte ein Datum ins Feld '{0}' ein";
lang[0][21] = "Der eingegebene Wert im Feld '{0}' ist kein gültiges Datum (DD.MM.YYYY)";
lang[0][22] = "Das eingegebene Datum im Feld '{0}' befindet sich vor dem Minimaldatum";
lang[0][23] = "Das eingegebene Datum im Feld '{0}' befindet sich nach dem Maximaldatum";
lang[0][24] = "Geben Sie bitte eine Zeit im Feld '{0}' ein";
lang[0][25] = "Der eingegebene Wert im Feld '{0}' ist keine gültige Zeit (HH:MM:SS)";
lang[0][26] = "Die eingegebene Zeit im Feld '{0}' befindet sich vor dem Minimalzeit";
lang[0][27] = "Das eingegebene Zeit im Feld '{0}' befindet sich nach dem Maximalzeit";
lang[0][28] =  "Das Feld '{0}' muss ein Zahl enthalten";

// Französisch
lang[1] = new Array();
lang[1][0] = "Le champ '{0}' doit être rempli";
lang[1][1] = "Le champ '{0}' doit contenir uniquement des lettres";
lang[1][2] = "Le champ '{0}' doit contenir uniquement caractères alphanumériques";
lang[1][3] = "L'entrée dans le champ '{0}' est trop courte";
lang[1][4] = "L'entrée dans le champ '{0}' est trop longue";
lang[1][5] = lang[1][0];
lang[1][6] = "L'entrée dans le champ '{0}' doit être numérique";
lang[1][7] = "L'entrée dans le champ '{0}' doit être un nombre entier";
lang[1][8] = "La valeur dans le champ '{0}' est trop petite";
lang[1][9] = "La valeur dans le champ '{0}' est trop grande";
lang[1][10] = lang[1][0];
lang[1][11] = lang[1][6];
lang[1][12] = lang[1][8];
lang[1][13] = lang[1][9];
lang[1][14] = "Choisissez une option dans le champ '{0}'";
lang[1][15] = "Veuillez sélectionner le champ '{0}'";
lang[1][16] = "Veuillez sélectionner un element du champ '{0}'";
lang[1][17] = "L'element sélectionné du champ'{0}' n'est pas valable";
lang[1][18] = "Veuillez saisir une adresse électronique dans le champ '{0}'";
lang[1][19] = "L'entrée dans le champ '{0}' n'est pas une adresse électronique valable";
lang[1][20] = "Veuillez remplir la date dans le champ '{0}'";
lang[1][21] = "La valeur du champ'{0}' n'est pas une date avec format valable (DD.MM.YYYY)";
lang[1][22] = "La date dans le champ '{0}' est antérieure à la valeur minimale définie pour la date";
lang[1][23] = "La date dans le champ '{0}' est postérieure à la valeur maximale définie pour la date";
lang[1][24] = "Veuillez remplir l'heure dans le champ'{0}'";
lang[1][25] = "La valeur du champ '{0}' n'est pas une heure avec format valable (HH:MM:SS)";
lang[1][26] = "L'heure dans le champ '{0}' est antérieure à la valeur minimale définie pour l'heure";
lang[1][27] = "L'heure dans le champ '{0}' est postérieure à la valeur maximale définie pour l'heure";
lang[1][28] = "Le champ '{0}' doit contenir un nombre";

// Italienisch
lang[2] = new Array();
lang[2][0] = "Il campo '{0}' deve essere riempito";
lang[2][1] = "Il campo '{0}' deve contenere solo lettere";
lang[2][2] = "Il campo '{0}' deve contenere esclusivamente caratteri alfanumerici";
lang[2][3] = "La voce specificata nel campo '{0}' è troppo corta";
lang[2][4] = "La voce specificata nel campo '{0}' è troppo lunga";
lang[2][5] = lang[2][0];
lang[2][6] = "L'immissione specificata nel campo '{0}' deve essere numerica";
lang[2][7] = "L'immissione specificata nel campo '{0}' deve essere un numero intero";
lang[2][8] = "Il valore specificato nel campo '{0}' è troppo piccolo";
lang[2][9] = "Il valore specificato nel campo '{0}' è troppo grande";
lang[2][10] = lang[2][0];
lang[2][11] = lang[2][6];
lang[2][12] = lang[2][8];
lang[2][13] = lang[2][9];
lang[2][14] = "Scegliere un'opzione dal campo '{0}'";
lang[2][15] = "Selezionare il campo '{0}'";
lang[2][16] = "Selezionare un elemento dal campo '{0}'";
lang[2][17] = "L'elemento selezionato nel campo '{0}' non è valido";
lang[2][18] = "Immettere un indirizzo e-mail nel campo'{0}'";
lang[2][19] = "L'immissione specificata nel campo '{0}' non è un indirizzo e-mail valido";
lang[2][20] = "Immettere la data nel campo '{0}'";
lang[2][21] = "Il valore nel campo '{0}' non è una data valida (DD.MM.YYYY)";
lang[2][22] = "La data nel campo '{0}' è anteriore a quella definita nel valore minimo per la data";
lang[2][23] = "La data nel campo '{0}' è posteriore a quella definita nel valore massimo per la data";
lang[2][24] = "Immettere l'ora nel campo '{0}'";
lang[2][25] = "Il valore nel campo '{0}' non è un'ora valida (HH:MM:SS)";
lang[2][26] = "L'ora nel campo '{0}' è anteriore a quella definita nel valore minimo per l'ora";
lang[2][27] = "L'ora nel campo'{0}' è posteriore a quella definita nel valore massimo per l'ora";
lang[2][28] = "Il campo '{0}' deve contenere un numero";

// Englisch
lang[3] = new Array();
lang[3][0] = "The field '{0}' has to be filled out";
lang[3][1] = "The field '{0}' should only contain letters";
lang[3][2] = "The field '{0}' should only contain alphanumeric characters";
lang[3][3] = "The entry in field '{0}' is too short";
lang[3][4] = "The entry in field '{0}' is too long";
lang[3][5] = lang[3][0];
lang[3][6] = "The entry in field '{0}' should be numeric";
lang[3][7] = "The entry in field '{0}' should be a whole number";
lang[3][8] = "The value in field '{0}' is too small";
lang[3][9] = "The value in field '{0}' is too big";
lang[3][10] = lang[3][0];
lang[3][11] = lang[3][6];
lang[3][12] = lang[3][8];
lang[3][13] = lang[3][9];
lang[3][14] = "Please choose an option of the field '{0}'";
lang[3][15] = "Please check the field '{0}'";
lang[3][16] = "Please select an element of the field '{0}'";
lang[3][17] = "The selected element of the field '{0}' is not valid";
lang[3][18] = "Please enter an e-mail address in the field '{0}'";
lang[3][19] = "The entry in the field '{0}' is not a valid e-mail address";
lang[3][20] = "Please fill in a date in the field '{0}'";
lang[3][21] = "The value of the field '{0}' is not a valid date (DD.MM.YYYY)";
lang[3][22] = "The date in field '{0}' is before the min date value";
lang[3][23] = "The date in field '{0}' is after the max date value";
lang[3][24] = "Please fill in a time in the field '{0}'";
lang[3][25] = "The value of the field '{0}' is not a valid time (HH:MM:SS)";
lang[3][26] = "The time in field '{0}' is before the min time value";
lang[3][27] = "The time in field '{0}' is after the max time value";
lang[3][28] = "The field '{0}' must contain a number";

// Spanisch
lang[4] = new Array();
lang[4][0] = "El campo {0} es obligatorio";
lang[4][1] = "El valor del campo {0} debe ser alfabético";
lang[4][2] = "El valor del campo {0} debe ser alfanumérico";
lang[4][3] = "El valor del campo {0} es demasiado corto";
lang[4][4] = "El valor del campo {0} es demasiado largo";
lang[4][5] = lang[4][0];
lang[4][6] = "El valor del campo {0} debe ser numérico";
lang[4][7] = "El valor del campo {0} debe ser un número entero";
lang[4][8] = "El valor del campo {0} es demasiado bajo";
lang[4][9] = "El valor del campo {0} es demasiado alto";
lang[4][10] = lang[4][0];
lang[4][11] = lang[4][6];
lang[4][12] = lang[4][8];
lang[4][13] = lang[4][9];
lang[4][14] = "Es obligatorio seleccionar una acción en el campo {0}";
lang[4][15] = "Es obligatorio seleccionar el campo {0}";
lang[4][16] = lang[4][15];
lang[4][17] = "La opción seleccionada en el campo {0} no es válida";
lang[4][18] = "Es obligatorio introducir el campo {0}";
lang[4][19] = "El E-mail introducido en el campo {0} no es válido";
lang[4][20] = lang[4][0];
lang[4][21] = "El valor del campo {0} no es una fecha con formato (DD.MM.YYYY)";
lang[4][22] = "La fecha del campo {0} es anterior a la fecha mínima admitida";
lang[4][23] = "La fecha del campo {0} es posterior a la fecha máxima admitida";
lang[4][24] = "Introduzca una hora en el campo '{0}'";
lang[4][25] = "El valor del campo'{0}' no es una hora con formato (HH:MM:SS)";
lang[4][26] = "La hora introducida en el campo '{0}' es anterior a la hora mínima admitida";
lang[4][27] = "La hora introducida en el campo '{0}' es posterior a la hora máxima admitida";
lang[4][28] = "El campo'{0}' debe contener un número";

function CheckForm(form, language)
{
	var i;
    var x;
    var j;
    var okis;
    var arr; //um das array der Optionen zu speichern.
    var str; //Variable mit dem Wert des Feldes zum Ueberpruefen.
    var campo_error = ""; //Variable fuer das Fehler-Feld.
    var error = ""; //Variable fuer die Fehler.
    var campo;  // Variable des Feldes zum Ueberpruefen.
    var bgcolor = "#FFFFFF"; // Normale farbe der verschiedenen Felder.
    var bgerror = "#CCCCCC"; // Farbe fuer die falsche Felder.
    var salto = "\n"; //fuer das einfache Aendern der Zeilenspruenge bei jedem Fehler.
    var previo = "- "; //vor jeder Fehler-Zeile.
    
    var langtext = new Array()
    langtext = lang[language];
    

    for (i=0;i<form.elements.length;i++)    
    {
        if(form.elements[i].name != null && form.elements[i].name.substr(0,4) == "CHK_")
        {           
                        
            str = GetFieldValueByName(form,form.elements[i].name.substr(4));
            
            if(!IsVisible(form.elements[i].name.substr(4))) continue;
            
            if(str != null)
            {
                campo=GetFieldByName(form,form.elements[i].name.substr(4));
                for (x=0;x<form.elements.length;x++)  //alle Felder werden durchsucht
                {
                        if (form.elements[x].name == campo.name) //ob sie den gleichen Name haben
                        { 
                            form.elements[x].style.background = bgcolor;
                        }
                }
                str = Trim(str);
                            
                arr = form.elements[i].value.split("|");            

                switch(arr[0].toUpperCase())
                {
                    case "STR":
                        //check mandatory field                         
                        if (str.length == 0){
                            if  (arr[4].toUpperCase() == "TRUE")
                            {
                                error = error + previo + langtext[0].replace("{0}",arr[5]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                        }
			else{
               switch (arr[1].toUpperCase())
				{
				case "ALF":
					if (!IsAlpha(str))
					{
						error = error + previo + langtext[1].replace("{0}",arr[5]) + salto ;
						if (!campo_error){campo_error=campo};
						campo.style.background = bgerror;
					}
					break;
				case "ALN":
					if (!IsAlphaNumeric(str))
					{
						error = error + previo + langtext[2].replace("{0}",arr[5]) + salto ;
                                    		if (!campo_error){campo_error=campo};
						campo.style.background = bgerror;
					}
					break;
				case "ALS":
					if (!IsAlphaNumeric(str))
					{
						error = error + previo + langtext[2].replace("{0}",arr[5]) + salto ;
                                    		if (!campo_error){campo_error=campo};
						campo.style.background = bgerror;
					}
					if (str.search(/[0-9]/) == -1) 
					{
						error = error + previo + langtext[28].replace("{0}",arr[5]) + salto;
                                    		if (!campo_error){campo_error=campo};
						campo.style.background = bgerror;
					}
					break;
				case "ANO":
					if (!IsAlphaNumericWithoutUmlaut(str))
					{
						error = error + previo + langtext[2].replace("{0}",arr[5]) + salto ;
                                    		if (!campo_error){campo_error=campo};
						campo.style.background = bgerror;
					}
					break;
				case "ASO":
					if (!IsAlphaNumericWithoutUmlaut(str))
					{
						error = error + previo + langtext[2].replace("{0}",arr[5]) + salto ;
                                    		if (!campo_error){campo_error=campo};
						campo.style.background = bgerror;
					}
					if (str.search(/[0-9]/) == -1) 
					{
						error = error + previo + langtext[28].replace("{0}",arr[5]) + salto;
                                    		if (!campo_error){campo_error=campo};
						campo.style.background = bgerror;
					}
					break;
					
				}


                            //check min length  
                            if (str.length < parseInt(arr[2],10))
                            {
                                error = error + previo + langtext[3].replace("{0}",arr[5]) + salto ;
                                
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                            
                            //check max length
                            if (str.length > parseInt(arr[3],10))
                            {
                                error = error + previo + langtext[4].replace("{0}",arr[5]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                        }
                        break;
                                            
                    case "INT":
                                                                
                        //check mandatory field
                        if (str.length == 0){
                            if  (arr[3].toUpperCase() == "TRUE")
                            {
                                error = error + previo + langtext[5].replace("{0}",arr[4]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                        }
                        else{                           
                            //check sanity
                            if(!(IsNumeric(str)))
                            {
                                error = error + previo + langtext[6].replace("{0}",arr[4]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
							else
                            if(!(IsINT(str)))
                            {
                                error = error + previo + langtext[7].replace("{0}",arr[4]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                                               
                            //check min value
                            else
							if (arr[1] != "x")
                            {
                                if (parseInt(str,10) < parseInt(arr[1],10))
                                {
                                    error = error + previo + langtext[8].replace("{0}",arr[4]) + salto ;
                                    if (!campo_error){campo_error=campo};
                                    campo.style.background = bgerror;
                                    
                                }
                            }
                            
                            //check max length
                            else
							if (arr[2] != "x")
                            {
                                if (parseInt(str,10) > parseInt(arr[2],10))
                                {
                                    error = error + previo + langtext[9].replace("{0}",arr[4]) + salto ;
                                    if (!campo_error){campo_error=campo};
                                    campo.style.background = bgerror;
                                    
                                }
                            }
                        }
                        break;
                    
                    case "FLOAT":
                        str= Replace(str,",",".");                                              
                        //check mandatory field
                        if (str.length == 0){
                            if  (arr[3].toUpperCase() == "TRUE")
                            {
                                error = error + previo + langtext[10].replace("{0}",arr[4]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                        }
                        else{                           
                            //check sanity
                            if(!(IsNumeric(str)))
                            {
                                error = error + previo + langtext[11].replace("{0}",arr[4]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                                                    
                            //check min value
                            else 
							if (arr[1] != "x")
                            {
                                if (parseFloat(str) < parseFloat(arr[1]))
                                {
                                    error = error + previo + langtext[12].replace("{0}",arr[4]) + salto ;
                                    if (!campo_error){campo_error=campo};
                                    campo.style.background = bgerror;
                                    
                                }
                            }
                            
                            //check max length
                            else
							if (arr[2] != "x")
                            {
                                if (parseFloat(str) > parseFloat(arr[2]))
                                {
                                    error = error + previo + langtext[13].replace("{0}",arr[4]) + salto ;
                                    if (!campo_error){campo_error=campo};
                                    campo.style.background = bgerror;
                                    
                                }
                            }
                        }                   
                        break;
                    case "RADIO":
                        //check mandatory field
						okis = false;
                        if  (arr[1].toUpperCase() == "TRUE")
                        {
                            for (x=0;x<form.elements.length;x++)  //alle Felder werden durchsucht
                            {
                                if (form.elements[x].name == campo.name && form.elements[x].checked)
                                { //ob sie den gleichen Namen haben und ob sie ueberprueft sind oder nicht
                                    okis = true; //wenn sie ueberprueft sind, dann ist die Ausgabe als richtig gekennzeichnet
                                }
                            }
                            if (!okis){ //es war nicht gekennzeichnet 
                                error = error + previo + langtext[14].replace("{0}",arr[2]) + salto ;
                                if (!campo_error){campo_error=campo};
                                for (x=0;x<form.elements.length;x++)  //wieder alle Felder werden durchsucht
                                {
                                    if (form.elements[x].name == campo.name) //ob sie den gleichen Namen haben
                                    { 
                                        form.elements[x].style.background = bgerror;
                                    }
                                }
                            }
                        }
                        break;

                    case "CHECK":
                        //check mandatory field
                        if  (arr[1].toUpperCase() == "TRUE" && !campo.checked)
                        {
                            error = error + previo + langtext[15].replace("{0}",arr[2]) + salto ;
                            if (!campo_error){campo_error=campo};
                            campo.style.background = bgerror;
                        
                        }
                        break;

                    case "SEL":
                        //check mandatory field
						if (campo.selectedIndex < 0){
                            if  (arr[2].toUpperCase() == "TRUE")
                            {
                                error = error + previo + langtext[16].replace("{0}",arr[3]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                        }
                        else {
                            if (arr[1] == str)
                            {
                                error = error + previo + langtext[17].replace("{0}",arr[3]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                            }
                        }
                        break;
                    
                    case "MAIL":
                        //check mandatory field
                        if (str.length == 0){
                            if  (arr[1].toUpperCase() == "TRUE")
                            {
                                error = error + previo + langtext[18].replace("{0}",arr[2]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                        }
                        else {
                            if (!isEmail(str))
                            {
                                error = error + previo + langtext[19].replace("{0}",arr[2]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                        }
                        break;
                                        
                        
                    case "DATE":
                        
                        //check mandatory field
                        if (str.length == 0){
                            if  (arr[3].toUpperCase() == "TRUE")
                            {
                                error = error + previo + langtext[20].replace("{0}",arr[4]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                        }
                        else{
							                    
                            //check sanity
                            if(!((IsDate(str,"/")) || (IsDate(str,"-")) || (IsDate(str,"."))))
                            {
                                error = error + previo + langtext[21].replace("{0}",arr[4]) + salto;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }

                            //check min value
                            else 
							{
								if (arr[1] != "x")
	                            {
	                                if( ((GetDate(str,".") < GetDate(arr[1],"/")) || (GetDate(str,"/") < GetDate(arr[1],"/")) || (GetDate(str,"-") < GetDate(arr[1],"/"))) || 
	                                    ((GetDate(str,".") < GetDate(arr[1],"-")) || (GetDate(str,"/") < GetDate(arr[1],"-")) || (GetDate(str,"-") < GetDate(arr[1],"-"))) ||
	                                    ((GetDate(str,".") < GetDate(arr[1],".")) || (GetDate(str,"/") < GetDate(arr[1],".")) || (GetDate(str,"-") < GetDate(arr[1],"."))) )
	                                {
	                                    error = error + previo + langtext[22].replace("{0}",arr[4]) + salto ;
	                                    if (!campo_error){campo_error=campo};
	                                    campo.style.background = bgerror;
	                                    
	                                }
	                            }
                            
	                            //check max length
	                            if (arr[2] != "x")
	                            {
		                            //if (((GetDate(str,"/") > GetDate(arr[2],"/")) || (GetDate(str,"-") > GetDate(arr[2],"/"))) || ((GetDate(str,"/") > GetDate(arr[2],"-")) || (GetDate(str,"-") > GetDate(arr[2],"-"))))
		                            if( ((GetDate(str,".") > GetDate(arr[2],"/")) || (GetDate(str,"/") > GetDate(arr[2],"/")) || (GetDate(str,"-") > GetDate(arr[2],"/"))) || 
	                                    ((GetDate(str,".") > GetDate(arr[2],"-")) || (GetDate(str,"/") > GetDate(arr[2],"-")) || (GetDate(str,"-") > GetDate(arr[2],"-"))) ||
	                                    ((GetDate(str,".") > GetDate(arr[2],".")) || (GetDate(str,"/") > GetDate(arr[2],".")) || (GetDate(str,"-") > GetDate(arr[2],"."))) )

	                                {
	                                    error = error + previo + langtext[23].replace("{0}",arr[4]) + salto ;
	                                    if (!campo_error){campo_error=campo};
	                                    campo.style.background = bgerror;
	                                    
	                                }
	                            }
							}
                        }                   
                        break;
                    case "TIME":
                        
                        //check mandatory field
                        if (str.length == 0){
                            if  (arr[3].toUpperCase() == "TRUE")
                            {
                                error = error + previo + langtext[24].replace("{0}",arr[4]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }
                        }
                        else{                           
                            //check sanity
                            if(!IsTime(str))
                            {
                                error = error + previo + langtext[25].replace("{0}",arr[4]) + salto ;
                                if (!campo_error){campo_error=campo};
                                campo.style.background = bgerror;
                                
                            }

                            //check min value
                            else if (arr[1] != "x")
                            {
                                if (GetTime(str) < GetTime(arr[1]))
                                {
                                    error = error + previo + langtext[26].replace("{0}",arr[4]) + salto ;
                                    if (!campo_error){campo_error=campo};
                                    campo.style.background = bgerror;
                                    
                                }
                            }
                            
                            //check max length
                            else if (arr[2] != "x")
                            {
                                if (GetTime(str) > GetTime(arr[2]))
                                {
                                    error = error + previo + langtext[27].replace("{0}",arr[4]) + salto ;
                                    if (!campo_error){campo_error=campo};
                                    campo.style.background = bgerror;
                                    
                                }
                            }
                        }                   
                        break;
                  }
            }
        }
    }
    if (error)
    {
        alert (error);
        if (campo_error.hidden == false)
			campo_error.focus();
        return false;
        
    }
    else {
	return true;
    }
}

//============================================================================================

function Replace(string,replacechar,replacewith) 
{
    var temp = "";
    var i;
    
    string = '' + string;
    splitstring = string.split(replacechar);
    for(i = 0; i < splitstring.length; i++)
    {
        if(i < (splitstring.length -1))
            temp += splitstring[i] + replacewith;
        else
            temp += splitstring[i];
    }
    return temp;
}

//============================================================================================

function GetFieldValueByName(form,name)
{
    var i;
    
    for (i=0;i<form.elements.length;i++)
    {
        if(form.elements[i].name == name)
            return (form.elements[i].value);
    }
    return null;
}

function GetFieldByName(form,name)
{
    var i;
    
    for (i=0;i<form.elements.length;i++)
    {
        if(form.elements[i].name == name)
            return (form.elements[i]);
    }
    return null;
}

/*

======================= STANDARD HELPER FUNCTIONS BELOW =======================================

*/
function IsNumeric(str)
{
    var i;
    for(i=0;i<str.length;i++)
    {
        if(!(   ((str.charAt(i) <= '9') && (str.charAt(i) >= '0')) ||
                (str.charAt(i) == ' ') || (str.charAt(i) == '.') || (str.charAt(i) == ',') || (str.charAt(i) == '-')))
            return(false);
    }
    return(true);
}

//============================================================================================

function IsAlphaNumeric(str)
{
    var i;
    for(i=0;i<str.length;i++)
    {
        if(!(   ((str.charAt(i) <= '9') && (str.charAt(i) >= '0')) ||
                ((str.charAt(i) <= 'z') && (str.charAt(i) >= 'a')) ||
                (str.charAt(i) == ' ') || (str.charAt(i) == '-') ||
                (str.charAt(i) == 'ü') || (str.charAt(i) == 'ä') ||
                (str.charAt(i) == 'ö') || (str.charAt(i) == 'Ü') ||
                (str.charAt(i) == 'Ä') || (str.charAt(i) == 'Ö') ||
                (str.charAt(i) == 'é') || (str.charAt(i) == 'ß') ||
                ((str.charAt(i) <= 'Z') && (str.charAt(i) >= 'A')) ))
            return(false);
    }
    return(true);
}

//============================================================================================

function IsAlpha(str)
{
    var i;
    
    for(i=0;i<str.length;i++)
    {
        if(!(   ((str.charAt(i) <= 'z') && (str.charAt(i) >= 'a')) ||
                (str.charAt(i) == ' ') || (str.charAt(i) == '-') ||
                (str.charAt(i) == 'ü') || (str.charAt(i) == 'ä') ||
                (str.charAt(i) == 'ö') || (str.charAt(i) == 'Ü') ||
                (str.charAt(i) == 'Ä') || (str.charAt(i) == 'Ö') ||
                (str.charAt(i) == 'é') || (str.charAt(i) == 'ß') ||
                ((str.charAt(i) <= 'Z') && (str.charAt(i) >= 'A')) ))
            return(false);
    }
    return(true);
}

//============================================================================================

function IsAlphaNumericWithoutUmlaut(str)
{
    var i;
    for(i=0;i<str.length;i++)
    {
        if(!(   ((str.charAt(i) <= '9') && (str.charAt(i) >= '0')) ||
                ((str.charAt(i) <= 'z') && (str.charAt(i) >= 'a')) ||
                ((str.charAt(i) <= 'Z') && (str.charAt(i) >= 'A')) ))
            return(false);
    }
    return(true);
}

//============================================================================================

function Trim(str)
{
    //trim leding spaces
    while(true)
    {
        if(str.charAt(0) == ' ')
            str = str.substr(1);
        else
            break;
    }
    
    //trim trailing spaces
    while(true)
    {
        if(str.charAt(str.length-1) == ' ')
            str = str.substr(0,str.length-1);
        else
            break;
    }
    return(str);    
}

//============================================================================================

function IsDate(argDate,token)
{
    var date_split;
    var i;
    var tdate, tmonth, tyear;
    
    date_split = argDate.split(token);
    
    //check for date parts
    if(date_split.length != 3) {return(false);}
        
    //check for zero values
    for(i=0;i<date_split.length;i++)
    {
		// Wenn Jahrhundert fehlt mit 20 ergänzen
		if(i==2 && date_split[i].length == 2) date_split[i] = '20' + date_split[i];		
        if(parseInt(date_split[i],10) == 0) {return(false);}
    }
    
    //check for 2 or 4-digit year
	if(!(date_split[2].length == 4 || date_split[2].length == 2)) return(false);
	
	//check for valid date, e.g. 29/02/1997
    tdate = parseInt(date_split[0],10);
    tmonth = parseInt(date_split[1],10);
    tyear = parseInt(date_split[2],10);
    var date = new Date(parseInt(date_split[2],10),parseInt(date_split[1],10)-1,parseInt(date_split[0],10));
	if(date.getDate() != tdate) {return(false);}    
    if(date.getMonth() != (tmonth-1)) {return(false);}    
    if(date.getFullYear() != tyear) {return(false);}
        
    return(true);
}


function GetDate(argDate,token)
{
    //use IsDate() first !!!!
    
    var date_split; 
    var tdate, tmonth, tyear;
    
    date_split = argDate.split(token);
    
    tdate = parseInt(date_split[0],10);
    tmonth = parseInt(date_split[1],10);
    tyear = parseInt(date_split[2],10);
    
    return date = new Date(parseInt(date_split[2],10),parseInt(date_split[1],10)-1,parseInt(date_split[0],10));
        
}


function IsTime(argTime)
{
    var time_split;
    var i;
    var thour = 0, tmin = 0, tsec = 0;
    
    time_split = argTime.split(":");
    
    //check for time parts
    if(time_split.length < 2)
        return(false);
        
    //check for zero values
    for(i=0;i<time_split.length;i++)
    {
        if(parseInt(time_split[i],10) >= (i==0 ? 24 : 60))
            return(false);
    }
    
    return(true);
}


function GetTime(argTime)
{
    var time_split;
    var i;
    var thour = 0, tmin = 0, tsec = 0;
    
    time_split = argTime.split(":");

    thour = parseInt(time_split[0],10);
    tmin = parseInt(time_split[1],10);
    if(time_split.length > 1) tsec = parseInt(time_split[2],10);
    
    var timeInSec = (thour * 60 * 60) + (tmin * 60) + tsec
    
    return timeInSec;
}



function isEmail(argString)
{
	var a = false;
	var res = false;
	if(typeof(RegExp) == 'function')
	{
		var b = new RegExp('abc');
		if(b.test('abc') == true){a = true;}
	}

	if(a == true)
	{
		reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
				 '(\\@)([a-zA-Z0-9\\-\\.]+)'+
				 '(\\.)([a-zA-Z]{2,4})$');
		res = (reg.test(argString));
	}
	else
	{
		res = (argString.search('@') >= 1 && argString.lastIndexOf('.') > argString.search('@') && argString.lastIndexOf('.') >= argString.length-5)
	}
	return(res);
}


function IsINT(entero)
{
for (var i = 0; i < entero.length; i++) {
	if (entero.charAt(i) < "0" ||  entero.charAt(i) > "9") {
		return false;
    }
}
return true;

}


function PadLeft(sString, nLength, sPadChar)
{
	sRet = ""
	for(i=1;i<nLenght;i++) sRet += sPadChar;
	sRet += sString;
	return sRet.substr(sRet.length-nLength);	
}


function IsVisible(sName)
{
	var d=document;
	var el=d.getElementsByName?d.getElementsByName(sName)[0]:d.all?d.all[sName]:d.layers[sName];
	if(d.layers) el.style=el;
	return (el.style.visibility != "hidden");
}
