// -----------------------------------------------------------------------------// Generic Form Validation//// Copyright (C) 2000 Jacob Hage - [jacobhage@hotmail.com]// 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!
//BeCom 2002 - S.B.
//Declare this variable in the page BEFORE the INCLUDE SRC directive//var selectecLanguage	= "greek";		// Choose between "english", "danish", "dutch", "french", "spanish", "russian", "portuguese", "greek"
//~~~~~SET this in the page//BeCom 2002 - S.B.//checking e-mail with regular expressions, since inline rule is inacurate
reg_email = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/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
language.greek			= new Array();
// Error messages in greek:		BeCom 2002 - S.B.
/*  >>>>>>>>> MUST enter in unicode	language.greek.header		= escape("ÐñïÝêõøáí ôá ðáñáêÜôù ëÜèç:");	language.greek.start		= escape("->");	language.greek.field		= escape(" Ôï ðåäßï ");	language.greek.require		= escape(" åßíáé õðï÷ñåùôéêü");	language.greek.min			= escape(" êáé ðñÝðåé íá ðåñéÝ÷åé ôïõëÜ÷éóôïí ");	language.greek.max			= escape(" êáé äåí ðñÝðåé íá ðåñéÝ÷åé ðáñáðÜíù áðü ");	language.greek.minmax		= escape(" êáé ü÷é ðåñéóóüôåñï áðü ");	language.greek.chars		= escape(" ÷áñáêôÞñåò");	language.greek.num			= escape(" êáé ðñÝðåé íá ðåñéÝ÷åé Ýíáí áñéèìü");	language.greek.email		= escape(" ðñÝðåé íá ðåñéÝ÷åé ìßá äéåýèõíóç çëåêôñïíéêïý ôá÷õäñïìåßïõ (e-mail)");
*/	
	language.greek.header		= unescape("%u03A0%u03C1%u03BF%u03AD%u03BA%u03C5%u03C8%u03B1%u03BD%20%u03C4%u03B1%20%u03C0%u03B1%u03C1%u03B1%u03BA%u03AC%u03C4%u03C9%20%u03BB%u03AC%u03B8%u03B7%3A");	language.greek.start		= "->";	language.greek.field		= unescape("%20%u03A4%u03BF%20%u03C0%u03B5%u03B4%u03AF%u03BF%20");	language.greek.require		= unescape("%20%u03B5%u03AF%u03BD%u03B1%u03B9%20%u03C5%u03C0%u03BF%u03C7%u03C1%u03B5%u03C9%u03C4%u03B9%u03BA%u03CC");	language.greek.min			= unescape("%20%u03BA%u03B1%u03B9%20%u03C0%u03C1%u03AD%u03C0%u03B5%u03B9%20%u03BD%u03B1%20%u03C0%u03B5%u03C1%u03B9%u03AD%u03C7%u03B5%u03B9%20%u03C4%u03BF%u03C5%u03BB%u03AC%u03C7%u03B9%u03C3%u03C4%u03BF%u03BD%20");	language.greek.max			= unescape("%20%u03BA%u03B1%u03B9%20%u03B4%u03B5%u03BD%20%u03C0%u03C1%u03AD%u03C0%u03B5%u03B9%20%u03BD%u03B1%20%u03C0%u03B5%u03C1%u03B9%u03AD%u03C7%u03B5%u03B9%20%u03C0%u03B1%u03C1%u03B1%u03C0%u03AC%u03BD%u03C9%20%u03B1%u03C0%u03CC%20");	language.greek.minmax		= unescape("%20%u03BA%u03B1%u03B9%20%u03CC%u03C7%u03B9%20%u03C0%u03B5%u03C1%u03B9%u03C3%u03C3%u03CC%u03C4%u03B5%u03C1%u03BF%20%u03B1%u03C0%u03CC%20");	language.greek.chars		= unescape("%20%u03C7%u03B1%u03C1%u03B1%u03BA%u03C4%u03AE%u03C1%u03B5%u03C2");	language.greek.num			= unescape("%20%u03BA%u03B1%u03B9%20%u03C0%u03C1%u03AD%u03C0%u03B5%u03B9%20%u03BD%u03B1%20%u03C0%u03B5%u03C1%u03B9%u03AD%u03C7%u03B5%u03B9%20%u03AD%u03BD%u03B1%u03BD%20%u03B1%u03C1%u03B9%u03B8%u03BC%u03CC");	language.greek.email		= unescape("%20%u03C0%u03C1%u03AD%u03C0%u03B5%u03B9%20%u03BD%u03B1%20%u03C0%u03B5%u03C1%u03B9%u03AD%u03C7%u03B5%u03B9%20%u03BC%u03AF%u03B1%20%u03B4%u03B9%u03B5%u03CD%u03B8%u03C5%u03BD%u03C3%u03B7%20%u03B7%u03BB%u03B5%u03BA%u03C4%u03C1%u03BF%u03BD%u03B9%u03BA%u03BF%u03CD%20%u03C4%u03B1%u03C7%u03C5%u03B4%u03C1%u03BF%u03BC%u03B5%u03AF%u03BF%u03C5%20%28e-mail%29");// 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 het formulier:"	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		= " karakters";	language.dutch.num			= " en moet een nummer zijn";	language.dutch.email		= " moet een geldig e-mail adres zijn.";// 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";
*/	
// -----------------------------------------------------------------------------// BeCom 2002 - S.B.function vltrim(str){
	for(var i=0;str.charAt(i)==" ";i++);
	return str.substring(i,str.length);
}
function vrtrim(str){
	for(var i=str.length-1;str.charAt(i)==" ";i--);
	return str.substring(0,i+1);
}
function valltrim(str){return vltrim(vrtrim(str));}
// -----------------------------------------------------------------------------// -----------------------------------------------------------------------------// 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 		= checkObjects[i].form.value;			//validateObject.len 		= checkObjects[i].form.value.length;			//BeCom 2002 - S.B.
			validateObject.len 		= valltrim(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";}				//e-mail validation by BeCom 2002 - S.B.
				if (validateObject.val.match(reg_email) == null){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));		errors = "";		returnVal = false;	} else {		returnVal = true;	}}