// ************************************************
//
// KEEPACTION Copyright 2001
// Libreria per il controllo dei campi di un form
//
// ************************************************

function isSelected (e) {

	if (typeof(e.length) == "undefined") 
		if (e.checked) 
			return true;

    for (i=0; i<e.length; i++) 
		if (e[i].checked)
			   return true;
	
	return false;
	
}

// Restituisce true se una stringa contiene solo spazi bianchi
function isblank(s)
{
	for(var i = 0; i < s.length; i++){
		var c = s.charAt(i);
		if ((c != "") && (c != "\n") && (c != "\t")) return false;
	}
	return true;
}

// Controlla se il parametro passato è una data valida.
// Tiene conto anche degli anni bisestili
function kaIsDate(stringaData)
{
 var year,month,day;

 // Controllo la validità del parametro passato
 if (typeof(stringaData)!="string") 
 	return 0;
// Controllo la validità del formato data
 if (!(stringaData.charAt(2)=="/" && stringaData.charAt(5)=="/" && stringaData.length==10)) 
 	return 0;
// Estraggo gli elementi che compongono la data 
 year = stringaData.substring(6,10);
 month = stringaData.substring(3,5);
 day = stringaData.substring(0,2);
 
 if (isNaN(year))
  return false;

 if (isNaN(month)||month < 1 || month > 12)
  return false;

 var monthDays = new Array(31,29,31,30,31,30,31,31,30,31,30,31);

 if (isNaN(day)||day < 1 || day > monthDays[month-1])
  return false;
  
// Controllo validità dei giorni per il mese di febbraio
 if (month == 2 && day == 29 && (year%4 != 0)) 
  return false;

// Se  tutti i controlli sono andati a buon fine la data è valida
  return true;
}

// Controlla se il parametro passato è una data valida.
// Tiene conto anche degli anni bisestili
function kaIsDateShort(stringaData)
{
 var year,month;

 // Controllo la validità del parametro passato
 if (typeof(stringaData)!="string") 
 	return 0;
// Controllo la validità del formato data
 if (!(stringaData.charAt(2)=="/" && stringaData.length==5)) 
 	return 0;
// Estraggo gli elementi che compongono la data 
 year = stringaData.substring(3,5);
 month = stringaData.substring(0,2);
 
 if (isNaN(year))
  return false;

 if (isNaN(month)||month < 1 || month > 12)
  return false;

// Se  tutti i controlli sono andati a buon fine la data è valida
  return true;
}

function isNumber(n)
{
	if (n.length == 0) return false;
	for (var i = 0; i<n.length; i++) {
		var v = parseFloat(n.charAt(i));
		if (isNaN(v) && n.charAt(i) != ",")return false
	}
	
	return true;
}

function isCAP(n)
{
	if (n.length < 5) return false;
	
	for (var i = 0; i<n.length; i++) {
		var v = parseFloat(n.charAt(i));
		if (isNaN(v))return false
	}
	
	return true;
}

function isEmail(n)
{
	if (n.search("@") < 0) 
		return false;
	else
		return true;
}

//Funzione che esegue la verifica del modulo. Viene richiamata dal gestore di eventi onSubmit().
function kaVerifyForm(f)
{
	var errors = false;
	var lastGroupName = "";
	var msgerrors = "";

	// Ciclo tra gli elementi del form
	for(var i = 0; i < f.length; i++) {
		
		var e = f.elements[i];
		
		switch (e.type) {
			
			case "text":
			case "textarea": 
			case "file":

				// Azzera il campo errore per il controllo
				if (navigator.appName == "Microsoft Internet Explorer" && eval(e.name + ".innerText")!="")
					eval(e.name + ".innerText=''");
			
				// controlla se il campo è vuoto
				if (((e.value == null) || (e.value == "") || isblank(e.value)) && !e.optional) {
					if (navigator.appName == "Microsoft Internet Explorer")
						eval(e.name + ".innerText='Campo vuoto'");
					else
						msgerrors += e.name + " Campo vuoto\n";
					errors = true;
					continue;
				}else{
					 if(((e.value == null) || (e.value == "") || isblank(e.value)) && e.optional)
						continue;
				}

				// controllo per i campi di tipo data	
				if (e.date) 
					if (!kaIsDate(e.value)) {
	 					 if (navigator.appName == "Microsoft Internet Explorer")
							 eval(e.name + ".innerText='Data non valida'");
						 else
						 	 msgerrors += e.name + " Data non valida\n";

 						 errors = true;
					}
				// controllo per i campi di tipo data	
				if (e.dateshort) 
					if (!kaIsDateShort(e.value)) {
	 					 if (navigator.appName == "Microsoft Internet Explorer")
							 eval(e.name + ".innerText='Data non valida'");
						 else
						 	 msgerrors += e.name + " Data non valida\n";

 						 errors = true;
					}
				// controllo per i campi di tipo numerico							 
				if (e.numeric){
					if (!isNumber(e.value)){
						if (navigator.appName == "Microsoft Internet Explorer")
							eval(e.name + ".innerText='Previsto valore numerico'");
						else
						 	msgerrors += e.name + " Previsto valore numerico\n";
  					    errors = true;
					}	
				}
				// controllo per i campi di tipo CAP							 
				if (e.cap){
					if (!isCAP(e.value)){
						if (navigator.appName == "Microsoft Internet Explorer")
							eval(e.name + ".innerText='CAP non valido'");
						else
						 	msgerrors += e.name + " CAP non valido\n";
  					    errors = true;
					}	
				}
				// controllo per i campi di tipo EMAIL							 
				if (e.email){
					if (!isEmail(e.value)){
						if (navigator.appName == "Microsoft Internet Explorer")
							eval(e.name + ".innerText='indirizzo e-mail non valido'");
						else
						 	msgerrors += e.name + " indirizzo e-mail non valido\n";
  					    errors = true;
					}	
				}
				break;

			case "select-one":
				// Azzera il campo errore per il controllo
				if (navigator.appName == "Microsoft Internet Explorer" && eval(e.name + ".innerText")!="")
					eval(e.name + ".innerText=''");


				// Controlla se il campo è stato selezionato
				if(!e.optional && ((e.value == "") || (e.value == null) || (e.value == e.nullvalue) )){
					if (navigator.appName == "Microsoft Internet Explorer")
						eval(e.name + ".innerText='Non è stato selezionato nessun elemento'");
					else
						msgerrors += e.name + " Non è stato selezionato nessun elemento\n";
					errors = true;
				}	
				break;
				
			case "radio":
			case "checkbox":
				// Controlla che il gruppo di radio abbia un valore selezionato
				if (e.name == lastGroupName)
					continue;
					
				// Azzera il campo errore per il controllo
				if (navigator.appName == "Microsoft Internet Explorer" && eval(e.name + ".innerText")!="")
					eval(e.name + ".innerText=''");
					
				lastGroupName=e.name;	
				
				if(!e.optional && (!isSelected(eval("f." + e.name)))){
					if (navigator.appName == "Microsoft Internet Explorer")
						eval(e.name + ".innerText='Non è stata effettuata nessuna selezione'");
					else
					 	msgerrors += e.name + " Non è stata effettuata nessuna selezione\n";
					errors = true;
				}
				break;
				
			case "password":
				// controlla la validità dei campi password
				// Nel form devono essere inseriti 2 campi password
				// con lo stesso nome, in questo modo viene creato
				// un array di oggetti utilizzato per confrontare
				// le due password inserite.
				
				if(e.singlepass) {

					// Azzera il campo errore per il controllo
					if (navigator.appName == "Microsoft Internet Explorer" && eval(e.name + ".innerText")!="")
						eval(e.name + ".innerText=''");
				
					// controlla se il campo è vuoto
					if (((e.value == null) || (e.value == "") || isblank(e.value)) && !e.optional) {
						if (navigator.appName == "Microsoft Internet Explorer")
							eval(e.name + ".innerText='Campo vuoto'");
						else
							msgerrors += e.name + " Campo vuoto\n";
						errors = true;
						continue;
					}else{
						 if(((e.value == null) || (e.value == "") || isblank(e.value)) && e.optional)
							continue;
					}
				} else {
			
					// Controllo inserimento password per registrazione
					if (e.name == lastGroupName)
						continue;
				
					// Azzera il campo errore per il controllo
					if (navigator.appName == "Microsoft Internet Explorer" && eval(e.name + ".innerText")!="")
						eval(e.name + ".innerText=''");
		
					lastGroupName=e.name;
					
					var campo1 = eval("f." + e.name + "[0].value");
					var campo2 = eval("f." + e.name + "[1].value");
					var minchar = e.minchar;

					if (((campo1 == null) || (campo1 == "") || isblank(campo1)) ||
						((campo2 == null) || (campo2 == "") || isblank(campo2))) {
							if (navigator.appName == "Microsoft Internet Explorer")
								eval(e.name + ".innerText='Entrambi i campi password devono essere compilati'");
							else
								msgerrors += e.name + " Entrambi i campi password devono essere compilati\n";
							errors = true;
							continue;
					}
					if (campo1 != campo2){
						if (navigator.appName == "Microsoft Internet Explorer")
							eval(e.name + ".innerText='La password inserita non è valida'");
						else
							msgerrors += e.name + " La password inserita non è valida\n";
						errors = true;
					}
					else 
						if (campo1.length < minchar){
							if (navigator.appName == "Microsoft Internet Explorer")
								eval(e.name + ".innerText='La lunghezza della password non può essere inferiore a " + minchar + " caratteri'");
							else
								msgerrors += e.name + " La lunghezza della password non può essere inferiore a " + minchar + " caratteri\n";
							errors = true;
						}
				}
				break;
		}
	}
	
	// Verifica se sono stati riscontrati errori
	
	if (!errors) return true;
	
	msg = "Il modulo non è stato inviato per l'errata compilazione dei campi.\n";
	msg += "I campi errati sono stati evidenziati"
	
	if (navigator.appName == "Microsoft Internet Explorer")
		alert(msg);
	else
		alert (msg + "\n\n" + msgerrors);
	
	return false;
}
