//
// Routines jscript per il controllo delle caselle di input
//

function checkChars(checkStr, string)
{
  var checkOK = string;
  var allValid = true;
  var allNum = "";
  for (i = 0;  i < checkStr.length;  i++) {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length) {
      allValid = false;
      break;
    }
    allNum += ch;
  }
  return (allValid);
}

function checkVoidField(field)
{
  if (field.value == "")
  {
	field.focus();
    alert ("Inserire un valore nel campo contenente il cursore.");
    return false;
  }
	return true;
}

function checkCFAndPIVA(cf, piva)
{
  if ((cf.value.length == 0) && (piva.value.length == 0))
  {
		cf.focus();
		alert ("Occorre inserire il Codice Fiscale e/o la Partita IVA.");
    return false;
  }
//	if ((cf.value.length > 0) && (cf.value.length < 16) && (cf.value.length != 11))
//  {
//		cf.focus();
//    alert ("Il codice fiscale deve essere lungo 11 o 16 caratteri.");
//    return false;
//	}
//	if ((piva.value.length > 0) && (piva.value.length < 11))
//  {
//		piva.focus();
//    alert ("La partita IVA deve essere lunga 11 caratteri.");
//    return false;
//  }
	return true;
}


function checkCF(field)
{
  if (field.value.length == 0)
  {
	 field.focus();
    alert ("Occorre inserire il Codice Fiscale.");
    return(false);
  }
 if (field.value.length< 16)
 {
	 field.focus();
     alert ("La lunghezza del codice fiscale non è \n" + "corretta: il codice fiscale dovrebbe essere lungo\n" + "esattamente 16 caratteri.\n");
     return(false);
  }
  return(true);
}


function ControllaCF(field)
{
   var validi, i, s, set1, set2, setpari, setdisp;
   
   cf=field.value;	
 
    if( cf == '' || cf.length==0){
    	 field.focus();
		 alert ("Occorre inserire il Codice Fiscale.");
		 return(false);
    }
    cf = cf.toUpperCase();
    if( cf.length != 16 ){
    	 field.focus();
		 alert("La lunghezza del codice fiscale non e' \n" + "corretta: il codice fiscale dovrebbe essere lungo\n" + "esattamente 16 caratteri.\n");
         return(false);
     }
    validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    for( i = 0; i < 16; i++ ){
        if( validi.indexOf( cf.charAt(i) ) == -1 ){
            field.focus();
            alert( "Il codice fiscale contiene un carattere non valido `" + cf.charAt(i) + "'.\nI caratteri validi sono le lettere e le cifre.\n");
			return(false);     
		 }
    }
    set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
    setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
    s = 0;
    for( i = 1; i <= 13; i += 2 )
        s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
    for( i = 0; i <= 14; i += 2 )
        s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
    if( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) ){
		field.focus();
        alert( "Il codice fiscale non e' corretto:\n" + "il codice di controllo non corrisponde.\n");
        return(false);     
     }
     
     return(true);
}

/*****************************************
    Controllo della Partita I.V.A.
******************************************/

function ControllaPIVA(field)
{
	pi=field.value;	

    if( pi == '' || pi.length==0){
		return(true);
    }    
    if( pi.length != 11 && pi.length!=0){
    	field.focus();
		alert("La lunghezza della partita IVA non e'\n" + "corretta: la partita IVA dovrebbe essere lunga\n" + "esattamente 11 caratteri.\n");
        return(false);
	}
    validi = "0123456789";
    for( i = 0; i < 11; i++ ){
        if( validi.indexOf( pi.charAt(i) ) == -1 ){
			 field.focus();
			 alert("La partita IVA contiene un carattere non valido `" + pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n");
			 return(false);			 
        }
    }
    s = 0;
    for( i = 0; i <= 9; i += 2 )
        s += pi.charCodeAt(i) - '0'.charCodeAt(0);
    for( i = 1; i <= 9; i += 2 ){
        c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
        if( c > 9 )  c = c - 9;
        s += c;
    }
    if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) ){
        field.focus();
		alert( "La partita IVA non e' valida:\n" + "il codice di controllo non corrisponde.\n");
        return(false);     
    }
   return(true);
}


function checkEMail(field)
{
  if (field.value.length > 0) 
	{
		if ((field.value.indexOf("@") == -1) || (field.value.indexOf(".") == -1))
		{
			field.focus();
	    alert ("L'indirizzo e-mail non è corretto.");
	    return false;
	  }
	}
  return true;
}



function checkCurrency(field)
{
	var allOk = true;
	var cnt = 0;
	var j;
	
  if (field.value.length > 0)
	{
		if (!checkChars(field.value, "0123456789,"))
			allOk = false;

		if (allOk == true) {
	    for (j = 0;  j < field.value.length;  j++) {
	      if (',' == field.value.charAt(j))
	        cnt++;
			}
					
			if (cnt > 1)
				allOk = false;
		}

		if (allOk == false) {
			field.focus();
	    alert ("Il valore in valuta nel campo contenente il cursore non è corretto.\nUsare solo la virgola per i decimali e nessun punto per le migliaia.");
	    return false;
	  }
	}	
	return true;
}

function checkSignedCurrency(field)
{
	var allOk = true;
	var cnt = 0;
	var sign = false;
	var j;
	
  if (field.value.length > 0)
	{
		if (field.value.substr(0,1) == '-') {
			sign = true;
			if (!checkChars(field.value.slice(1), "0123456789,")) {
				allOk = false;
			}
		}
		else {
			if (!checkChars(field.value, "0123456789,")) {
				allOk = false;
			}
		}			
		if (allOk == true) {
	    for (j = 0;  j < field.value.length;  j++) {
	      if (',' == field.value.charAt(j))
	        cnt++;
			}
					
			if (cnt > 1)
				allOk = false;
		}

		if (allOk == false) {
			field.focus();
	    alert ("Il valore in valuta nel campo contenente il cursore non è corretto.\nUsare solo la virgola per i decimali, nessun punto per le migliaia e non inserire spazi.");
	    return false;
	  }
	}	
	return true;
}

function checkCAP(field)
{
	if (field.value.length > 0)
	{
		if ((field.value.length < 5) || (!checkChars(field.value, "0123456789")))
	  {
			field.focus();
	    alert ("Il CAP deve essere costituito da 5 cifre.");
	    return false;
	  }
	}
	return true;
}

function checkABI(field)
{
	if ((field.value.length != 5) || (!checkChars(field.value, "0123456789")))
  {
		field.focus();
    alert ("Il codice ABI deve essere costituito da 5 cifre.");
    return false;
  }
	return true;
}

function checkCAB(field)
{
	if ((field.value.length != 5) || (!checkChars(field.value, "0123456789")))
  {
		field.focus();
    alert ("Il codice CAB deve essere costituito da 5 cifre.");
    return false;
	}
	return true;
}

function checkOnlyNumeric(field)
{
	if (field.value.length > 0)
	{
		var valore = field.value;
		
		// Strippa gli zero iniziali perché darebbe una interpretazione ottale!
		while (valore.length > 1)
		{
			if (valore.substr(0,1) != "0")
				break;
			valore = valore.substr(1);
		}
		if (field.value != valore)
			field.value = valore;

		// Controlla che il testo sia solo numerico		
	  if (!checkChars(valore, "0123456789"))
	  {
			field.focus();
	    alert ("Nel campo contenente il cursore si possono inserire solo cifre numeriche.");
	    return false;
	  }
	}
	return true;
}

function checkData(field)
{
	var allOk = true;

	if (field.value.length > 0)
	{
		var mesi = "312831303130313130313031";
		var giorno = field.value.substr(0,2);
		var mese = field.value.substr(3,2);
		var anno = field.value.substr(6,4);
		//alert(anno);		alert(mese);		alert(giorno);
		if (field.value.length != 10)
			allOk = false;
			
		if (allOk == true)
		  if (checkChars(giorno+mese+anno, "0123456789") == false)
				allOk = false;			

		if (allOk == true){
				if ((field.value.substr(2,1) != '-') || (field.value.substr(5,1) != '-')){
				  		if ((field.value.substr(2,1) != '/') || (field.value.substr(5,1) != '/')){
							allOk = false;		
							//alert("cucu");
						}else{
							//alert("coco");
							allOk = true;		
						}
				}		
		}		   
		if (allOk == true)
			if ((mese < 1) || (mese > 12))
				allOk = false;

		if (allOk == true) 
		{ // Bisestile
			if (mese == 2)				
				if ((anno % 4) == 0)
					mesi = "312931303130313130313031";

			if ( (giorno < 1) || (giorno > mesi.substr((mese-1)*2,2)) )
				allOk = false;
		}
	  if (allOk == false)	{
			field.focus();
	   		alert ("La data specificata è errata. Inserire valori corretti nel formato  \"GG/MM/AAAA\".");
	  }
	}
	return allOk;
}

function checkDataNoAlert(field)
{
	var allOk = true;

	if (field.value.length > 0)
	{
		var mesi = "312831303130313130313031";
		var giorno = field.value.substr(0,2);
		var mese = field.value.substr(3,2);
		var anno = field.value.substr(6,4);

		if (field.value.length != 10)
			allOk = false;
			
		if (allOk == true)
		  if (checkChars(giorno+mese+anno, "0123456789") == false)
				allOk = false;			

		if (allOk == true)
		  if ((field.value.substr(2,1) != '/') || (field.value.substr(5,1) != '/'))
				allOk = false;		

		if (allOk == true)
			if ((mese < 1) || (mese > 12))
				allOk = false;

		if (allOk == true) 
		{ // Bisestile
			if (mese == 2)				
				if ((anno % 4) == 0)
					mesi = "312931303130313130313031";

			if ( (giorno < 1) || (giorno > mesi.substr((mese-1)*2,2)) )
				allOk = false;
		}
	}
	return allOk;
}

function checkZeroField(field)
{
	if (field.value.length > 0)
	{
	  if (field.value.replace(",","") == 0)
	  {
			field.focus();
	    alert ("Il valore 0 non è consentito.\n");
	    return false;
	  }
	}
	return true;
}

function checkMinValue(field, minval)
{
	if (field.value.length > 0)
	{
	  if (field.value < minval)
	  {
			field.focus();
	    alert ("Il valore inserito nella casella corrente non è valido.\nInserire un valore superiore o uguale a " + minval + ".");
	    return false;
	  }
	}
	return true;
}

function checkPassword(field1, field2)
{
	if (field1.value != field2.value)
	{
		field2.focus();
    alert ("La verifica della password è fallita. Reinserire o correggere i dati.");
		return false;
	}
	return true;
}

function checkPasswordSize(field, minsize)
{
	if (field.value.length < minsize)
	{
	//	field.focus();
    alert ("La password deve essere lunga almeno " + minsize + " caratteri.");
		return false;
	}
	return true;
}

function checkNumericSearch(field)
{
	if (field.value.length > 0)	
	{
		var allOk = true;
		var arrValori = field.value.split(";");
		for (var i=0; (i < arrValori.length) && allOk; ++i) {
			var arrGruppi = arrValori[i].split("-");
			if (arrGruppi.length > 2)
				allOk = false;
			for (var j=0; (j<arrGruppi.length) && allOk; ++j) {
				if (arrGruppi[j]!="")
					allOk = checkChars(arrGruppi[j], "0123456789");
				else
					allOk = false;
				if (allOk && (j == 1))
					if ( eval(arrGruppi[0]) >= eval(arrGruppi[1]) )
						allOk = false;
			}
		}
		if (!allOk) {
			field.focus();
	    alert ("Inserire solo cifre numeriche o i separatori ; e -.\nLe sequenze devono essere inserite con valori 'da' - 'a' (inclusi).\nVerificare inoltre che le sequenze siano crescenti ('da' inferiore ad 'a').");
	    return false;
	  }
	}
	return true;
}

function checkDataSearch(field)
{
	var allOk = true;

	if (field.value.length > 0)	
	{
		var allOk = true;
		var arrValori = field.value.split(";");
		for (var i=0; (i<arrValori.length) && allOk; ++i) {
			var arrGruppi = arrValori[i].split("-");
			if (arrGruppi.length > 2)
				allOk = false;
			for (var j=0; (j<arrGruppi.length) && allOk; ++j) {
				if (arrGruppi[j]!="") {
					allOk = checkChars(arrGruppi[j], "0123456789/");
					if (!allOk)
						break;

					var mesi = "312831303130313130313031";
					var giorno = arrGruppi[j].substr(0,2);
					var mese = arrGruppi[j].substr(3,2);
					var anno = arrGruppi[j].substr(6,4);
	
					if (arrGruppi[j].length != 10)
						allOk = false;
					else if (checkChars(giorno+mese+anno, "0123456789") == false)
						allOk = false;
					else if ((arrGruppi[j].substr(2,1) != '/') || (arrGruppi[j].substr(5,1) != '/'))
						allOk = false;
					else if ((mese < 1) || (mese > 12))
						allOk = false;
					else 
					{ // Bisestile
						if (mese == 2)
							if ((anno % 4) == 0)
								mesi = "312931303130313130313031";
						if ( (giorno < 1) || (giorno > mesi.substr((mese-1)*2,2)) )
							allOk = false;
					}
					if (allOk && (j == 1)) {
					 if (arrGruppi[0].substr(6,4) > arrGruppi[1].substr(6,4))
							allOk = false;
					 else if (arrGruppi[0].substr(3,2) > arrGruppi[1].substr(3,2))
							allOk = false;
					 else if (arrGruppi[0].substr(0,2) >= arrGruppi[1].substr(0,2))
							allOk = false;					 
					}
				}
				else
					allOk = false;
			}
		}
	  if (allOk == false)	{
			field.focus();
	    alert ("Inserire solo date nel formato gg/mm/aaaa ed eventualmente i separatori ; e -.\nVerificare che i periodi siano corretti ('da' inferiore ad 'a').");
	  }
	}
	return allOk;
}

function checkStringSearch(field)
{
	if (field.value.length > 0)	
	{
		var allOk = true;
		if (!checkChars(field.value.toLowerCase(), " ;0123456789abcdefghijklmnopqrstuvwxyzòàèéùì-&_$")) {
			field.focus();
	    alert ("Si possono inserire solo numeri, lettere e i simboli '-', '&', '$', e '_'.");
	    return false;
	  }		
		if (allOk) {
			var arrValori = field.value.split(";");
			for (var i=0; (i<arrValori.length) && allOk; ++i) {
				if (arrValori[i]=="")
					allOk = false;
			}
		}
		if (!allOk) {
			field.focus();
	    alert ("Ciascun separatore (punto o virgola) si deve trovare tra due testi da ricercare.");
	    return false;
	  }
	}
	return true;
}

//Max: aggiungo una serie di nuove funzioni
//-----------------------------------------------------------------
/*
function remove_entities(text) {
		 text=text.replace('&agrave;', 'à');
	  text=text.replace('&aacute;', 'á');
	  text=text.replace('&atilde;', 'ã');
	  text=text.replace('&auml;', 'ä');		
	  text=text.replace('&aelig;', 'æ');		
	  text= text.replace('&egrave;', 'è');		
	  text= text.replace('&eacute;', 'é');		
	  text=text.replace('&euml;', 'ë');		
	  text=text.replace('&igrave;', 'ì');		
	  text=text.replace('&iacute;', 'í');		
	  text=text.replace('&iuml;', 'ï');		
	  text=text.replace('&ntilde;', 'ñ');		
	  text=text.replace('&ograve;', 'ò');		
	  text=text.replace('&oacute;', 'ó');		
	  text=text.replace('&otilde;', 'õ');		
	  text=text.replace('&ouml;', 'ö');		
	  text=text.replace('&ugrave;', 'ù');			  	  	  	  	  	  
	  text=text.replace('&uacute;', 'ú');			  	  	  	  	  	  
	  text=text.replace('&uuml;', 'ü');			  	  	  	  	  	  	  
	  text=text.replace('&szlig;', 'ß');			  	  	  	  	  	  	  

	  return text;
}
*/

function reset(form) {
	form.reset();
}

function checkRange(field, minval,maxval)
{
	if (field.value.length > 0)
	{
	  if (field.value < minval || field.value > maxval)
	  {
			alert ("Il valore inserito nella casella corrente non è compreso nell'intervallo "+String(minval)+" - "+String(maxval)+".\n")
			field.focus();
	   	    return false;
	  }
	}
	return true;
}

/* Controllo che un campo abbia i seguenti requisiti:
			- non deve essere nullo
			- deve contenere solo caratteri
			- non deve contenere più di un numero max di car.
*/
function validate_Stringa_SoloAlfabetica_NonNulla_Dimensionata(field,ncar,nomecampo)
{
	var n_caratteri_max=ncar;
	var firstName =field.value;
	
	if (firstName == "")
	{
		alert("Il campo "+nomecampo+" è obbligatorio.");
		return(false);
	}
	for (i = 0; i < firstName.length; ++i)
	{
	if (firstName.charAt(i) >= "0" && firstName.charAt(i) <= "9") 
			{
                   		        alert("Il campo "+nomecampo+" non può contenere numeri.");
	         		return(false);
			}
    	 	}

                   			if (firstName.search(/[\!\"\#\%\&\/\(\)\=\?\@\$\{\[\]\}\\\,\.\;\:\_\+\*\^\~]/) != -1)
	{
		alert("Il campo "+nomecampo+" può contenere solo lettere.");
		return(false);
	}
	
	if (firstName.length > n_caratteri_max)
	{
		alert("Il campo "+nomecampo+" non può essere più lungo di "+n_caratteri_max+" caratteri.");
		return(false);
	}

	return(true);
}

// imposta il campo della form tutto in maiuscolo
function setLowerCase(field)
{
	field.value = field.value.toLowerCase();
	return(true);
}

// imposta il campo della form tutto in minuscolo
function setLowerCase(field)
{
	field.value = field.value.toLowerCase();
	return(true);
}

/* Controllo del campo  username:
			- non deve essere nullo
			- non deve contenere cartteri speciali
			- non deve contenere caratteri maiuscoli
*/
function validateUsername(field)
{

    var id = field.value;

    if (id == null || id == "")
	{
        alert("Il campo nome utente è obbligatorio.");
		return(false);
	}

	if (id.search(/[\!\"\#\%\&\/\(\)\=\?\@\$\{\[\]\}\\\,\.\-\;\:\+\*\^\'\~ ]/) != -1)
	{
		alert("Il nome utente non è valido.");
		return(false);
	}

    var allnum = true;

	for (i = 0; i < id.length; ++i)
	{
		if (id.charAt(i) >= 'A' && id.charAt(i) <= 'Z') 
		{
			alert("Il nome utente deve essere scritto in minuscolo.");
			return(false);
		}
        if (id.charAt(i) < "0" || id.charAt(i) > "9") 
		{
            allnum = false;
         }
   	}
     if (allnum == true) {
           alert("Il nome utente non è valido.");
		   return(false);
      }
	return(true);
}


/* Controllo della password:
			- i due campi password devono coincidere
			- non devono essere nulli
			- siano strettamente alfanumerici
			- devono avere un numero minimo di caratteri
*/
function validatePassword(field1,field2,ncarmin)
{
   	var n_caratteri_min=ncarmin
    var password   = field1.value;
    var password2 = field2.value;

    if (password == null || password == "")
	{
        alert("Il campo Scegli la password è obbligatorio.");
		return(false);
	}
	else
	{
		if (password.search(/^[A-Za-z0-9 ]*$/) == -1 )
		{
			alert("I campi Password e Conferma la password accettano solo caratteri alfanumerici.");
			return(false);
		}
	}

    if (password.length < n_caratteri_min)
	{
		alert("La lunghezza minima di della password deve essere di " + String(n_caratteri_min) +  "caratteri.");
		return(false);
	}

	if (password != password2)
	{
		alert("Le due password non coincidono.");
		return(false);
	}

	return(true);
}

/* Controllo di un elenco a discesa
			- deve essere selezionato un valore diverso da quello di riferimento
*/
function validate_ElencoADiscesa(field,riferimento,nomecampo)
  {
  	//alert(field.value);
	var elenco = field.value;
	if (elenco == riferimento)
	{
			alert("Il campo " +nomecampo+ " è obbligatorio.");
			return(false);
	}					
	return(true);
}
		
/* Controllo di un campo email
	Più sofisticata della precedente
*/

function validateEmailAddress(field)
{
	var email = field.value;
		if (email == "")
		{
			alert("Il campo e-mail è obbligatorio.");
			return(false);
		}
                    			else if (email.search(/^[A-Za-z0-9_\.\-]+\@[A-Za-z0-9_\-]+\.[A-Za-z0-9_\.\-]+$/) == -1)
		{
			alert("La e-mail inserita non è corretta.");
			return(false);
		}
    return(true);
}


// Controllo che il campo email coincida con il campo conferma email
function validateConfirmEmailAddress(field1,field2)
{
var email = field1.value;
if (email == "")
{
		alert("Il campo Conferma e-mail è obbligatorio.");
		return(false);
}
else if (email != field2.value)
{
		alert("I campi 'E-mail' e 'Conferma e-mail' non coincidono.");
		return(false);
}
return(true);
}


/*
Controllo di una data composta in tre campi: dd, mm, yyyy
*/
function checkDate(field_dd,field_mm,field_aa)
{
var year = field_aa.value;
var mon = field_mm.value;
var day = field_dd.value;

year = String(year);
mon = String(mon);
day = String(day);

if (year.length != 4)
{
	alert("L'anno di nascita deve essere indicato con quattro cifre.");
	return(false);
}

var stryear = year;
var day = Number(day);
var year = Number(year);

if ((isNaN(day)) || (isNaN(year)))
{
	alert("Inserisci due cifre per indicare il giorno di nascita e quattro cifre per l'anno di nascita.");
	return(false);
}

if (mon == "")
{
	alert("Inserisci il tuo mese di nascita.");
	return(false);
}

//converte in 4 cifre
if (stryear.length == 2)
{
	if (year < 20)
		year = Number("20" + stryear);
	else
		year = Number("19" + stryear);
}

if (day < 1 || day > 31)
{
	alert("Inserisci il tuo giorno di nascita (2 cifre).");
	return(false);
}

if (year < 1900 || year > 2004)
{
	alert("Inserisci il tuo anno di nascita (4 cifre).");
	return(false);
}

if ((mon == "APR" || mon == "JUN" || mon == "SEP" || mon == "NOV") && day == 31)
{
	alert("Inserisci il tuo giorno di nascita (2 cifre).");
	return(false);
}

// Check for February date validity (including leap years)
if (mon == "FEB")
{
	// figure out if "year" is a leap year; don't forget that
	// century years are only leap years if divisible by 400
	var isleap = (year % 4 == 0 && (year % 100 !=0 || year % 400 == 0));
	if (day > 29 || (day == 29 && !isleap))
	{
		alert("Inserisci il tuo giorno di nascita (2 cifre).");
		return(false);
	}
}
return(true);
}
