// -----------------------------------------------------------------------------// Generic Form Validation//// Copyright (C) 2000 Jacob Hage - [info@hagedesign.dk]// Distributed under the terms of the GNU Library General Public License// -----------------------------------------------------------------------------// -----------------------------------------------------------------------------// Initializing script  - setting global variables// -----------------------------------------------------------------------------var checkObjects        = new Array();  // Array containing the objects to validate.var errors              = "";           // Variable holding the error message.var returnVal           = false;        // General return value. The validated form will only be submitted if true.var language            = new Array();  // Language independent error messages!var selectecLanguage    = "dutch";  // Choose between "english", "danish", "dutch", "french", "spanish", "russian", "portuguese"language.english        = new Array();language.danish         = new Array();language.dutch          = new Array();language.french         = new Array();language.spanish        = new Array();language.russian        = new Array();language.portuguese     = new Array();language.swedish        = new Array();language.polish         = new Array();language.brazport       = new Array(); // Brazilian Portuguese// Error messages in english:    language.english.header     = "The following error(s) occured:"    language.english.start      = "->";    language.english.field      = " Field ";    language.english.require    = " is required";    language.english.min        = " and must consist of at least ";    language.english.max        = " and must not contain more than ";    language.english.minmax     = " and no more than ";    language.english.chars      = " characters";    language.english.num        = " and must contain a number";    language.english.email      = " must contain a valid e-mail address";    // Error messages in Danish:    language.danish.header      = "Der opstod f\370lgende fejl:";    language.danish.start       = "->";    language.danish.field       = " Feltet ";    language.danish.require     = " skal udfyldes";    language.danish.min         = " og skal best\345 af mindst ";    language.danish.max         = " og m\345 ikke best\345 af flere end ";    language.danish.minmax      = " og ikke flere " // English: " and no more than ";    language.danish.chars       = " tegn";    language.danish.num         = " og m\345 kun best\345 af tal";    language.danish.email       = " skal indeholde en korrekt e-mail addresse";    // Error messages in Dutch: Thanks to Benjo de Lange <webmaster@bennie-webdesign.com> for translation    language.dutch.header       = "De volgende fout(en) zitten in de ingevulde gegevens:"    language.dutch.start        = "->";    language.dutch.field        = " Veld ";    language.dutch.require      = " is verplicht";    language.dutch.min          = " en moet bestaan uit minstens ";    language.dutch.max          = " en moet bestaan uit meer dan";    language.dutch.minmax       = " en niet meer dan ";    language.dutch.chars        = " letters.";    language.dutch.num          = " en moet een getal (met de juiste waarde) zijn.";    language.dutch.email        = " moet een geldig e-mail adres zijn.";    language.dutch.footer       = "Wij verzoeken u op 'OK' te drukken en de ingevulde tekst aan te passen."// Error messages in French: Thanks to Christophe Lance <christophe@jcp-marketing-event.ch> for translation    language.french.header      = "L'erreur suivante s'est produite: "    language.french.start       = "->";    language.french.field       = " Le champs ";    language.french.require     = " est obligatoire";    language.french.min         = " et doit contenir au moins ";    language.french.max         = " et ne doit pas contenir plus de ";    language.french.minmax      = " et pas plus de ";    language.french.chars       = " caract\350res";    language.french.num         = " et doit contenir un nombre ";    language.french.email       = " doit contenir une adresse e-mail valide";// Error messages in Spanish: Thanks to Edu <edu@macneto.com>    language.spanish.header     = "Se ha producido un error:"    language.spanish.start      = "->";    language.spanish.field      = " El campo ";    language.spanish.require    = " es obligatorio";    language.spanish.min        = " y debe contener al menos ";    language.spanish.max        = " y no debe contener m\341s de ";    language.spanish.minmax     = " y no m\341s de ";    language.spanish.chars      = " caracteres";    language.spanish.num        = " y debe contener un n\372mero";    language.spanish.email      = " debe contener una direcci\363n de e-mail v\341lida";    // Error messages in russian: Thanks to: Alexander Presman <apresman@gosned.com>    language.russian.header     = " Âîçíèêëà Îøèáêà(è):"    language.russian.start      = "->";    language.russian.field      = " Ïîëå ";    language.russian.require    = " îáÿçàòåëüíî";    language.russian.min        = " è äîëæíî ñîäåðæàòü íå ìåíåå ";    language.russian.max        = " è íå äîëæíî ñîäåðæàòü áîëåå ";    language.russian.minmax     = " è íå áîëåå ";    language.russian.chars      = " çíàêîâ";    language.russian.num        = " è äîëæíî ñîäåðæàòü ÷èñëîâîå çíà÷åíèå";    language.russian.email      = " äîëæíî ñîäåðæàòü äåéñòâèòåëüíûé e-mail àäðåñ";    // Error messages in portuguese: Thanks to: Marcelo Rodrigues de Camargo <marcelo@dechichi.com.br>    language.portuguese.header  = "O(s) seguinte(s) erro(s) ocorreu(am):"    language.portuguese.start   = "->";    language.portuguese.field   = " Campo ";    language.portuguese.require = " e' necessario";    language.portuguese.min     = " e deve conter pelo menos ";    language.portuguese.max     = " e nao deve conter mais de ";    language.portuguese.minmax  = " e nao mais que ";    language.portuguese.chars   = " caracteres";    language.portuguese.num     = " e deve conter numero";    language.portuguese.email   = " deve conter um e-mail valido";// Error messages in Swedish: Thanks to Roger Edvardsson <roger.edvardsson@noed.com>    language.swedish.header     = "Fšljande fel uppstod:";    language.swedish.start      = "->";    language.swedish.field      = " FŠltet ";    language.swedish.require    = " mŒste fyllas i";    language.swedish.min        = " och skall bestŒ av minst ";    language.swedish.max        = " och skall inte bestŒ av fler Šn ";    language.swedish.minmax     = " och inte fler Šn ";    language.swedish.chars      = " tecken";    language.swedish.num        = " och mŒste innehŒlla ett nummer";    language.swedish.email      = " mŒste innehŒlla en korrekt epost adress";// Error messages in polish: Thanks to Marcin Maciukiewicz <ciukes@poczta.fm>    language.polish.header      = "Wyst¹pi³ nastêpuj¹cy b³¹d(b³êdy):"    language.polish.start       = "* ";    language.polish.field       = " Pole <";    language.polish.require     = "> jest wymagane";    language.polish.min         = " i musi zawieraæ conajmniej ";    language.polish.max         = " i nie mo¿e zawieraæ wiêcej ni¿ ";    language.polish.minmax      = " i nie wiêcej ni¿ ";    language.polish.chars       = " znaki";    language.polish.num         = " i musi zawieraæ liczbê";    language.polish.email       = " musi zawieraæ prawid³owy adres e-mail";// Error messages in brazilian portuguese: Thanks to Fernando D. de Castilhos <fernando.castilhos@edw3.com>    language.brazport.header    = "O(s) seguinte(s) erro(s) ocorreu(ram):"    language.brazport.start     = "->";    language.brazport.field     = " O campo ";    language.brazport.require   = " é obrigatório";    language.brazport.min       = " e deve ser composto de no mínimo por ";    language.brazport.max       = " e não deve conter mais de ";    language.brazport.minmax    = " e não mais de ";    language.brazport.chars     = " caracteres";    language.brazport.num       = " e deve conter um número";    language.brazport.email     = " deve conter um endereço de e-mail válido";// -----------------------------------------------------------------------------// define - Call this function in the beginning of the page. I.e. onLoad.//// n = name of the input field (Required)// type= string, num, email (Required)// min = the value must have at least [min] characters (Optional)// max = the value must have maximum [max] characters (Optional)// d = (Optional)// -----------------------------------------------------------------------------function define(n,type,HTMLname,min,max,d){   var p;   var i;   var x;        if(!d) d=document;    if((p=n.indexOf("?"))>0&&parent.frames.length){        d=parent.frames[n.substring(p+1)].document;        n=n.substring(0,p);    }    if(!(x=d[n])&&d.all) x=d.all[n];        for (i=0;!x&&i<d.forms.length;i++){        x=d.forms[i][n];    }    for(i=0;!x&&d.layers&&i<d.layers.length;i++){        x=define(n,type,HTMLname,min,max,d.layers[i].document);        return x;           }        // Create Object. The name will be "V_something" where something is the "n" parameter above.    eval("V_"+n+" = new formResult(x,type,HTMLname,min,max);");    checkObjects[eval(checkObjects.length)] = eval("V_"+n);}// -----------------------------------------------------------------------------// formResult - Used internally to create the objects// -----------------------------------------------------------------------------function formResult(form,type,HTMLname,min,max){    this.form = form;    this.type = type;    this.HTMLname = HTMLname;    this.min  = min;    this.max  = max;}// -----------------------------------------------------------------------------// validate - Call this function onSubmit and return the "returnVal". (onSubmit="validate();return returnVal;")// -----------------------------------------------------------------------------function validate(){    if(checkObjects.length>0){        errorObject = "";            for(i=0;i<checkObjects.length;i++){            validateObject          = new Object();            validateObject.form     = checkObjects[i].form;            validateObject.HTMLname = checkObjects[i].HTMLname;            validateObject.val      = kommapunt(checkObjects[i].form.value);            if (validateObject.HTMLname == "telefoon") {               validateObject.val = telnum(validateObject.val);               if (validateObject.val < 100000000 || validateObject.val.length < 10) {                  validateObject.val = "fout";               }            }            if (validateObject.HTMLname == "diameter van de palen") {               if (validateObject.val < 99) {                  validateObject.val = "fout";               }            }            validateObject.len      = checkObjects[i].form.value.length;            validateObject.min      = checkObjects[i].min;            validateObject.max      = checkObjects[i].max;            validateObject.type     = checkObjects[i].type;                        //Debug alert line            //alert("validateObject: "+validateObject+"\nvalidateObject.val: "+validateObject.val+"\nvalidateObject.len: "+validateObject.len+"\nvalidateObject.min,validateObject.max: "+validateObject.min+","+validateObject.max+"\nvalidateObject.type: "+validateObject.type);                        // Checking input. If "min" and/or "max" is defined the input has to be within the specific range            if(validateObject.type == "num" || validateObject.type == "string"){                if((validateObject.type == "num" && validateObject.len <= 0) || (validateObject.type == "num" && isNaN(validateObject.val))){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+language[selectecLanguage].num+"\n";                } else if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max)){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+language[selectecLanguage].min+validateObject.min+language[selectecLanguage].minmax+validateObject.max+language[selectecLanguage].chars+"\n";                } else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+language[selectecLanguage].min+validateObject.min+language[selectecLanguage].chars+"\n";                } else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+language[selectecLanguage].max+validateObject.max+language[selectecLanguage].chars+"\n";                } else if (!validateObject.min && !validateObject.max && validateObject.len <= 0){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].require+"\n";                }            } else if(validateObject.type == "email"){                // Checking existense of "@" and ".". The length of the input must be at least 5 characters. The "." must neither be preceding the "@" nor follow it.                if((validateObject.val.indexOf("@") == -1) || (validateObject.val.charAt(0) == ".") || (validateObject.val.charAt(0) == "@") ||(validateObject.len < 6) || (validateObject.val.indexOf(".") == -1) || (validateObject.val.charAt(validateObject.val.indexOf("@")+1) == ".") || (validateObject.val.charAt(validateObject.val.indexOf("@")-1) == ".")){errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].email+"\n";}            }        }    }    // Used to set the state of the returnVal. If errors -> show error messages in chosen language    if(errors){        alert(language[selectecLanguage].header.concat("\n"+errors+"\n"+language[selectecLanguage].footer));        errors = "";        returnVal = false;    } else {        returnVal = true;    }}// -----------------------------------------------------------------------------// kommapunt - vertalen komma's in punten ivm getallen// -----------------------------------------------------------------------------    function kommapunt(temp) {         out = ",";         add = ".";         if (temp.length>0) {            while (temp.indexOf(out)>-1) {               pos= temp.indexOf(out);               temp = (temp.substring(0, pos) + add + temp.substring((pos + out.length), temp.length));           }         }         return temp    }// -----------------------------------------------------------------------------// telnum - verwijderen streepje ivm telefoonnummers// -----------------------------------------------------------------------------    function telnum(temp) {         out = "-";         add = "";         if (temp.length>0) {            while (temp.indexOf(out)>-1) {               pos= temp.indexOf(out);               temp = (temp.substring(0, pos) + add + temp.substring((pos + out.length), temp.length));           }         }         out = "(";         add = "";         if (temp.length>0) {            while (temp.indexOf(out)>-1) {               pos= temp.indexOf(out);               temp = (temp.substring(0, pos) + add + temp.substring((pos + out.length), temp.length));           }         }         out = ")";         add = "";         if (temp.length>0) {            while (temp.indexOf(out)>-1) {               pos= temp.indexOf(out);               temp = (temp.substring(0, pos) + add + temp.substring((pos + out.length), temp.length));           }         }         return temp    }
