// -----------------------------------------------------------------------------

// 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!

var selectedLanguage	= "IT";	// Choose between "english", "danish", "dutch", "french", "spanish", "russian", "portuguese"

language.GB		= new Array();

//language.danish			= new Array();

language.DE			= new Array();

language.AT			= new Array();

language.CH			= new Array();

language.NL 		= new Array();

language.FR			= new Array();

language.ES		= 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.IT		= new Array(); 



// Error messages in IT:

	language.IT.header		= "Sono presenti degli errori:"

	language.IT.start		= "->";

	language.IT.field		= " Il campo ";

	language.IT.require	= " e' obbligatorio";

	language.IT.min		= " deve essere lungo almeno ";

	language.IT.max		= " e non deve contenere piu' di ";

	language.IT.minmax		= " e non piu' di ";

	language.IT.chars		= " caratteri";

	language.IT.num		= " e deve contenere un numero";

	language.IT.email		= " deve contenere un indirizzo email valido";





// Error messages in EN:

	language.GB.header		= "The following error(s) occured:"

	language.GB.start		= "->";

	language.GB.field		= " Field ";

	language.GB.require	= " is required";

	language.GB.min		= " and must consist of at least ";

	language.GB.max		= " and must not contain more than ";

	language.GB.minmax		= " and no more than ";

	language.GB.chars		= " characters";

	language.GB.num		= " and must contain a number";

	language.GB.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 " // EN: " 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 DE: 

	language.DE.header		= "Man hat folgende Fehler festgestellt:"

	language.DE.start		= "->";

	language.DE.field		= " Das Feld ";

	language.DE.require		= " ist obligatorisch";

	language.DE.min			= " en moet bestaan uit minstens";

	language.DE.max			= " en moet bestaan uit meer dan";

	language.DE.minmax		= " en niet meer dan";

	language.DE.chars		= " karakters";

	language.DE.num			= " muss eine Nummer sein";

	language.DE.email		= " muss eine gltige Email-Adresse sein.";

	

// Error messages in AT: 

	language.AT.header		= "Man hat folgende Fehler festgestellt:"

	language.AT.start		= "->";

	language.AT.field		= " Das Feld ";

	language.AT.require		= " ist obligatorisch";

	language.AT.min			= " en moet bestaan uit minstens";

	language.AT.max			= " en moet bestaan uit meer dan";

	language.AT.minmax		= " en niet meer dan";

	language.AT.chars		= " karakters";

	language.AT.num			= "  muss eine Nummer sein";

	language.AT.email		= "  muss eine gltige Email-Adresse sein.";

	

// Error messages in CH: 

	language.CH.header		= "Man hat folgende Fehler festgestellt:"

	language.CH.start		= "->";

	language.CH.field		= " Das Feld ";

	language.CH.require		= " ist obligatorisch";

	language.CH.min			= " en moet bestaan uit minstens";

	language.CH.max			= " en moet bestaan uit meer dan";

	language.CH.minmax		= " en niet meer dan";

	language.CH.chars		= " karakters";

	language.CH.num			= "  muss eine Nummer sein";

	language.CH.email		= "  muss eine gltige Email-Adresse sein.";

	

// Error messages in NL:

	language.NL.header   = "De volgende fouten hebben zich voorgedaan:"

	language.NL.start		= "->";

	language.NL.field		= " Het veld ";

	language.NL.require	= " is verplicht";

	language.NL.min		= " moet een minimale lengte hebben van ";

	language.NL.max		= " en moet niet langer zijn dan ";

	language.NL.minmax		= " en niet meer dan ";

	language.NL.chars		= " karakters";

	language.NL.num		= " en moet een numeriek karakter bevatten";

	language.NL.email		= " moet een geldig e-mail adres bevatten";



// Error messages in FR: 

	language.FR.header		= "L'erreur suivante s'est produite: "

	language.FR.start		= "->";

	language.FR.field		= " Le champs ";

	language.FR.require		= " est obligatoire";

	language.FR.min			= " et doit contenir au moins ";

	language.FR.max			= " et ne doit pas contenir plus de ";

	language.FR.minmax		= " et pas plus de ";

	language.FR.chars		= " caract\350res";

	language.FR.num			= " et doit contenir un nombre ";

	language.FR.email		= " doit contenir une adresse e-mail valide";



// Error messages in ES: 

	language.ES.header		= "Se ha producido un error:"

	language.ES.start		= "->";

	language.ES.field		= " El campo ";

	language.ES.require	= " es obligatorio";

	language.ES.min		= " y debe contener al menos ";

	language.ES.max		= " y no debe contener m\341s de ";

	language.ES.minmax		= " y no m\341s de ";

	language.ES.chars		= " caracteres";

	language.ES.num		= " y debe contener un n\372mero";

	language.ES.email		= " debe contener una direcci\363n de e-mail v\341lida";

	/*

// Error messages in portuguese: 

	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: 

	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: 

	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: 

	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 		= 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"){

			/*	if((validateObject.type == "num" && validateObject.len <= 0) || (validateObject.type == "num" && isNaN(validateObject.val))){errors+=language[selectedLanguage].start+language[selectedLanguage].field+validateObject.HTMLname+language[selectedLanguage].require+language[selectedLanguage].num+"\n";

				} else */
				
				if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max)){errors+=language[selectedLanguage].start+language[selectedLanguage].field+validateObject.HTMLname+language[selectedLanguage].require+language[selectedLanguage].min+validateObject.min+language[selectedLanguage].minmax+validateObject.max+language[selectedLanguage].chars+"\n";

				} else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)){errors+=language[selectedLanguage].start+language[selectedLanguage].field+validateObject.HTMLname+language[selectedLanguage].require+language[selectedLanguage].min+validateObject.min+language[selectedLanguage].chars+"\n";

				} else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)){errors+=language[selectedLanguage].start+language[selectedLanguage].field+validateObject.HTMLname+language[selectedLanguage].require+language[selectedLanguage].max+validateObject.max+language[selectedLanguage].chars+"\n";

				} else if (!validateObject.min && !validateObject.max && validateObject.len <= 0){errors+=language[selectedLanguage].start+language[selectedLanguage].field+validateObject.HTMLname+language[selectedLanguage].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[selectedLanguage].start+language[selectedLanguage].field+validateObject.HTMLname+language[selectedLanguage].email+"\n";}

			}

		}

	}

	// Used to set the state of the returnVal. If errors -> show error messages in chosen language

	if(errors){

		alert(language[selectedLanguage].header.concat("\n"+errors));

		errors = "";

		return false;

	} else {

		return true;

	}

}

