// -----------------------------------------------------------------------------// Generic Form Validation//// Copyright (C) 2000 Jacob Hage - [jacobhage@hotmail.com]// Distributed under the terms of the GNU Library General Public License// -----------------------------------------------------------------------------// Altered by G&G - George Stathis - Gina Theodorly (www.gandg.gr)//	* added Greek Language Support//	* added string1 mode (string with only one word)//	* added afm mode (checks Greek AFM)// -----------------------------------------------------------------------------// 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	= "greek";	// Choose between "english", "greek", "dutch", "french", "spanish", "russian", "portuguese"language.english		= new Array();language.greek			= new Array();language.dutch			= new Array();// 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";	language.english.afm		= " must containg a valid AFM";	language.greek.oneString	= " πρέπει να αποτελείται από μία μόνο λέξη";// Error messages in greek:	language.greek.header		= "Παρουσιάστηκαν τα ακόλουθα σφάλματα:"	language.greek.start		= "->";	language.greek.field		= " Το πεδίο ";	language.greek.require	= " είναι υποχρεωτικό";	language.greek.min		= " και πρέπει να περιέχει τουλάχιστον ";	language.greek.max		= " και δεν πρέπει να περιέχει πάνω από ";	language.greek.minmax		= " και όχι περισσότερους από ";	language.greek.chars		= " χαρακτήρες";	language.greek.num		= " και πρέπει να περιέχει αριθμό";	language.greek.email		= " πρέπει να περιέχει μία σωστή διεύθυνση e-mail";	language.greek.afm		= " πρέπει να περιέχει ένα σωστό ΑΦΜ";	language.greek.oneString	= " πρέπει να αποτελείται από μία μόνο λέξη";		// 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.";	language.dutch.afm		= " moet een geldit AFM ";// -----------------------------------------------------------------------------// 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;			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" || validateObject.type == "string1"){				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";				} 				if (validateObject.type == "string1" && validateObject.val.indexOf(" ") != -1) {						errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].oneString+"\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";}			} else if (validateObject.type="afm") {				if (!checkAfm(validateObject.val)) {					errors+=language[selectecLanguage].start+language[selectecLanguage].field+validateObject.HTMLname+language[selectecLanguage].afm+"\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;	}}function checkAfm(f) {	var i, fsum=0, n=512, l=0, r;	if (f.length==9) {		for (i=0; i<8; i++) {			n=n/2;			fsum = fsum + f.substr(i,1)*n;		}		l=fsum % 11;		if (l==10 && f.substr(i,8)==0) 			r=true;		else if (l==f.substr(i,8))			r=true;		else			r=false;	} else 		r=false;	return r;}