// -----------------------------------------------------------------------------
// Validazione form
//
// Copyright (C)  Mauro Introini 
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
// Inizializzazione variabili
// -----------------------------------------------------------------------------
var checkObjects		= new Array(); 	//
var errors				= ""; 			//
var returnVal			= false; 		// 
var language			= new Array(); 	// 
//var selectecLanguage	= "italiano";	// 
language.italiano		= new Array();
language.inglese		= new Array();
language.tedesco		= new Array();
language.francese		= new Array();
language.spagnolo		= new Array();

// Messaggi in Italiano:
	language.italiano.header		= "Controllare i seguenti dati:"
	language.italiano.start		= "->";
	language.italiano.field		= " Il dato : ";
	language.italiano.require	= " è obbligatorio";
	language.italiano.min		= " e deve avere  ";
	language.italiano.max		= " e massimo ";
	language.italiano.minmax	= " e non piu' di ";
	language.italiano.chars		= " caratteri";
	language.italiano.num		= " e deve contenere numeri";
	language.italiano.email		= " deve contenere un indirizzo e-mail valido";

// Error messages in inglese:
	language.inglese.header		= "The following error(s) occured:"
	language.inglese.start		= "->";
	language.inglese.field		= " Field ";
	language.inglese.require	= " is required";
	language.inglese.min		= " and must consist of at least ";
	language.inglese.max		= " and must not contain more than ";
	language.inglese.minmax		= " and no more than ";
	language.inglese.chars		= " characters";
	language.inglese.num		= " and must contain a number";
	language.inglese.email		= " must contain a valid e-mail address";

// Messaggi in tedesco:
	language.tedesco.header		= "Bitte überprüfen Sie nochmals Ihre Angaben:"
	language.tedesco.start		= "->";
	language.tedesco.field		= " Diese Angabe: ";
	language.tedesco.require	= " ist notwendig  ";
	language.tedesco.min		= " und muss ... enthalten  ";
	language.tedesco.max		= " und maximal ";
	language.tedesco.minmax	= " und nicht mehr  ";
	language.tedesco.chars		= " Buchstaben";
	language.tedesco.num		= " und muss Zahlen enthalten";
	language.tedesco.email		= " muss eine aktive E-Mail Adresse enthalten ";

// Error messages in francese: 
	language.francese.header		= "L'erreur suivante s'est produite: "
	language.francese.start		= "->";
	language.francese.field		= " Le champs ";
	language.francese.require		= " est obligatoire";
	language.francese.min			= " et doit contenir au moins ";
	language.francese.max			= " et ne doit pas contenir plus de ";
	language.francese.minmax		= " et pas plus de ";
	language.francese.chars		= " caract\350res";
	language.francese.num			= " et doit contenir un nombre ";
	language.francese.email		= " doit contenir une adresse e-mail valide";

// Error messages in spagnolo: 
	language.spagnolo.header		= "Se ha producido un error:"
	language.spagnolo.start		= "->";
	language.spagnolo.field		= " El campo ";
	language.spagnolo.require	= " es obligatorio";
	language.spagnolo.min		= " y debe contener al menos ";
	language.spagnolo.max		= " y no debe contener m\341s de ";
	language.spagnolo.minmax		= " y no m\341s de ";
	language.spagnolo.chars		= " caracteres";
	language.spagnolo.num		= " y debe contener un n\372mero";
	language.spagnolo.email		= " debe contener una direcci\363n de e-mail v\341lida";


// -----------------------------------------------------------------------------
// 
//
// n = Nome dell'input field (Richiesto)
// type= string, num, email (Richiesto)
// min = Numero minimo [min] caratteri
// max = Numero minimo [min] caratteri
// d = (null)
// -----------------------------------------------------------------------------
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;		
	}
	
	eval("V_"+n+" = new formResult(x,type,HTMLname,min,max);");
	checkObjects[eval(checkObjects.length)] = eval("V_"+n);
}

// -----------------------------------------------------------------------------
// formResult - Usato internamente per creare l'oggettto
// -----------------------------------------------------------------------------
function formResult(form,type,HTMLname,min,max){
	this.form = form;
	this.type = type;
	this.HTMLname = HTMLname;
	this.min  = min;
	this.max  = max;
}

// -----------------------------------------------------------------------------
// validate - Function chiamata da onSubmit e ritorna "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;
			
			//Linea di Debug
			//alert("validateObject: "+validateObject+"\nvalidateObject.val: "+validateObject.val+"\nvalidateObject.len: "+validateObject.len+"\nvalidateObject.min,validateObject.max: "+validateObject.min+","+validateObject.max+"\nvalidateObject.type: "+validateObject.type);
			
			// Controlla l'input. Minimo e massimo
			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"){
				// Controlla l'esistenza di "@" e ".". La lunghezza deve essere di almeno 5 caratteri. Il "." deve sempre essere dopo la @.
				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";}
			}
		}
	}
	// Usato per settare il returnVal. Se errors -> mostra il messaggio di errore
	if(errors){
		alert(language[selectecLanguage].header.concat("\n"+errors));
		errors = "";
		returnVal = false;
	} else {
		returnVal = true;
	}
}

