//////////////////////////////////////////////////
// check nessun impegno selezionato (funziona controllando se è selezionato il primo della lista)
function checkCombo(field, fieldName)
{
  if (field.selectedIndex == 0)
  {
    alert('È necessario selezionare un valore nel campo '+fieldName+'.');
    return false;
  }

  return true;
}

//////////////////////////////////////////////////
function checkTextArea(field, fieldName, lunghezza)
{
        value = field.value;
        if(value.length > lunghezza)
        {
          alert('Lunghezza stringa inserita nel campo ' + fieldName + ' : ' + value.length + '. Numero massimo di caratteri accettati: ' + lunghezza + '.');
          return false;
        }

        return true;
}
//////////////////////////////////////////////////

function checkEuro(field, fieldName)
{
	value = field.value;
	ris = isEuro(field.value)
	if (!ris)
		alert('Il campo ' + fieldName + ' deve essere una valuta espressa in euro');
	return ris;
}

//////////////////////////////////////////////////
function checkPercentuale(field, fieldName)
{
        value = field.value;
        ris = isPercentuale(field.value)
        if (!ris)
                alert('Il campo ' + fieldName + ' deve essere un valore percentuale');
        return ris;
}


//////////////////////////////////////////////////
function checkRadio(field, fieldName)
{
	for (i=0; i<field.length; i++) {
		if (field[i].checked) {
			return true;
		}
	}
	alert('Il campo ' + fieldName + ' non può essere vuoto');

	return false;
}

//////////////////////////////////////////////////
function isPercentuale(value)
{
        virgola = false;
        for (i = value.length-1; i >=0; i--) {
                if (!isDigit(value.charAt(i))) {
                        if (!(value.charAt(i) == ',' && i<value.length-1 && i!=0 && !virgola)) {
                                return false;
                        } else {
                                virgola = true;
                        }
                }
        }
        return true;
}


//////////////////////////////////////////////////
function isEuro(value)
{
	virgola = false;
	for (i = value.length-1; i >=0; i--) {
		if (!isDigit(value.charAt(i))) {
			if (!(value.charAt(i) == ',' && i>=value.length-3 && i<value.length-1 && i!=0 && !virgola)) {
				return false;
			} else {
				virgola = true;
			}
		}
	}
	return true;
}

////////ISLETTER/////////////////////////
function isLetter (c)
    {
    	/////return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c =<= "Z")) )
		return (!isDigit(c))
    }

////////ISDIGIT/////////////////////////
    // Returns true if character c is a digit
    // (0 .. 9).

function isDigit (c)
   {
   	return ((c >= "0") && (c <= "9"))
   }


////////ISEMPTY/////////////////////////
function isEmpty(s)
{
  return ((s == null) || (s.length == 0))
}


//////// ISALFABETIC /////////
function isAlfaBetic(value)
{
	for( i=0; i < value.length; i++  )
	{
		   if(!isLetter(value.charAt(i)))
		   {
     	     		return false;
		   }

	}//for

	return true;
}

/////// ISNUMERIC ////////
function isNumeric(value)
{
	for( i=0; i < value.length; i++  )
	{
		   if(!isDigit(value.charAt(i)))
		   {
     	     		return false;
		   }

	}//for

	return true;
}

// verifica che data2 sia maggiore di data1
function checkDiffDate(data1,data2,field1Name, field2Name)
{
	d1=new Date(data1);
	d2=new Date(data2);
	var diff = Math.round(d2 - d1);
		if (diff<=0)
		{
			alert( field2Name + ' non è superiore a ' + field1Name);
			return false;
		}
		return true;
}

// verifica che data2 sia maggiore o uguale di data1
function checkIntervalloDate(data1,data2,field1Name, field2Name)
{
	d1=new Date(data1);
	d2=new Date(data2);
	var diff = Math.round(d2 - d1);
		if (diff<0)
		{
			alert( ' Intervallo da ' + field1Name + ' a '+field2Name + 'non valido');
			return false;
		}
		return true;
}

// verifica campo vuoto
function checkEmpty(value,fieldName)
{
		if (isEmpty(value))
		{
			alert( 'Il campo ' + fieldName + ' non può essere vuoto');
			return true;
		}
		return false;
}

// verifica campo alfabetico
function checkAlfaBetic(value,fieldName)
{
		if (!isAlfaBetic(value))
		{
			alert( 'Il campo ' + fieldName + ' deve essere alfabetico');
			return false;
		}
		return true;
}

// verifica campo numerico
function checkNumeric(value,fieldName)
{
		if (!isNumeric(value))
		{
			alert( 'Il campo ' + fieldName + ' deve essere numerico');
			return false;
		}
		return true;
}

// verifica campo data
function checkDate(value,fieldName)
{
		if (!isData(value))
		{
			alert( 'Il campo ' + fieldName + ' deve avere formato gg/mm/aaaa');
			return false;
		}
		return true;
}

// verifica campo codice fiscale
function checkCodiceFiscale(value,fieldName)
{
		if (!isCodiceFiscale(value))
		{
			alert( 'Il campo ' + fieldName + ' deve essere un codice fiscale');
			return false;
		}
		return true;
}

// verifica campo  partita iva
function checkPIva(value, fieldName)
{
	if (!isNumeric(value))
		{
			alert( 'Il campo ' + fieldName + ' deve essere numerico');
			return false;
		}
	else
		{
			if (!isPIVA(value))
				{
					alert( 'Il campo ' + fieldName + ' deve essere una partita iva corretta');
					return false;
				}
				return true;
		}
}

// verifica campo P.IVA o codice fiscale
function checkPIvaCodiceFiscale(value, fieldName)
{
	risultato = true;
	if (value.length != 11) // deve essere un codice fiscale
	{
		risultato = checkCodiceFiscale(value, fieldName);
	} else {	// deve essere una partita iva, quindi numerico e corretto
		risultato = checkPIva(value, fieldName);
	}
	return risultato;
}

// sostituisce uno carattere con un altro nella stringa data
function sostituisciCarattere(stringa, charToFind, charReplace)
{
   ritorno = ''
        for (i = 0; i < stringa.length; i++) {
                if (stringa.charAt(i) == charToFind) {
                        ritorno = ritorno + charReplace
                } else {
                        ritorno = ritorno + stringa.charAt(i)
                }
        }
    return ritorno
}

//////////// TRIM DI UNA STRINGA ////////////
function trim(str)
{
   var regExp = /^\s*(.*)\b\s*$/gi;
   var value = str.replace(regExp,'$1');
   if (value.match(/^\s+$/)) value = "";
   return value;
}



// verifica campo numerico strettamente positivo
function checkPositivo(value,fieldName)
{
		if (!isNumeric(value))
		{
			alert( 'Il campo ' + fieldName + ' deve essere numerico');
			return false;
		} else if (value <= 0) {
			alert( 'Il campo ' + fieldName + ' deve essere positivo');
			return false;
		}
		return true;
}

	//CONTROLLO CAP: check sulla lunghezza
	function checkCAP(CAP)
	{
	   risultato = true;

	   if( CAP.length != 5	)
	   {
	     //alert( 'Il CAP deve essere di 5 caratteri ');
	     return false;
	   }


	   return risultato;
	}


	//CONTROLLO DATA: check sul formato gg/mm/aaaa
	function isData(data)
	{
	   risultato = true;

	   if (isEmpty(data))
	   {
	   		return true;
	   }

	   if( data.length != 10 )
	   {
	        return false;
	   }

	   for( i=0; i < 2; i++  )
	   {
		   if( !isDigit(data.charAt(i)) )
		   {
     	     		return false;
		   }//if

	   }//for


	   if( data.charAt(2) != "/" )
	   {
	       return false;
	   }

	   for( i=3; i < 5; i++  )
	   {
		   if( !isDigit(data.charAt(i)) )
		   {
     	     return false;
		   }//if

	   }//for


	   if( data.charAt(5) != "/" )
	   {
	       return false;
	   }


	   for( i=6; i < 10; i++  )
	   {
		   if( !isDigit(data.charAt(i)) )
		   {
     	     return false;
		   }//if

	   }//for

	   // controllo dei giorni e dei mesi
	   giorni = data.charAt(0) + data.charAt(1);
	   mesi = data.charAt(3) + data.charAt(4);
	   anni = data.charAt(6) + data.charAt(7) + data.charAt(8) + data.charAt(9);

	   if ((anni < 1900) || (anni > 2100))
	   {
	   		return false;
	   }

	   if ((mesi < 1) || (mesi > 12))
	   {
	   		return false;
	   }

	   if ((giorni < 1) || (giorni > 31))
	   {
	   		return false;
	   }

	   // aprile, giugno, settembre e novembre sono di 30 giorni
	   if (((mesi == 4) || (mesi == 6) || (mesi == 9) || (mesi == 11)) && (giorni == 31))
	   {
		   	return false;
	   }

	   // febbraio
	   if ((mesi == 2) && (giorni > 29))
	   {
	   		return false;
	   }

	   return risultato;
	}

	//CONTROLLO CODICE FISCALE
	function isCodiceFiscale(codice)
	{
	   //alert(codice);//DEBUG

	   risultato = true;

	   if (isEmpty(codice))
	   {
	   		return true;
	   }

	   if( codice.length != 16	)
	   {
	     //alert( 'Il codice fiscale deve essere di 16 caratteri ');
	     return false;
	   }


	   for( i=0; i < 6; i++  )
	   {
	   	  if( !isLetter(codice.charAt(i)) )
		    {
     	       return false;
		    }//if

	   }//for


	   for( i=6; i < 8; i++  )
	   {
		   if( !isDigit(codice.charAt(i)) )
		   {
     	     return false;
		   }//if

	   }//for



	   if( !isLetter(codice.charAt(8)) )
	   {
	       	     return false;
	   }//if



	  for( i=9; i < 11; i++  )
	   {
		   if( !isDigit(codice.charAt(i)) )
		   {
     	     return false;
		   }//if

	   }//for


	  if( !isLetter(codice.charAt(11)) )
	   {
	       	     return false;
	   }//if


	  for( i=12; i < 15; i++  )
	   {
		   if( !isDigit(codice.charAt(i)) )
		   {
     	     return false;
		   }//if

	   }//for


	  if( !isLetter(codice.charAt(15)) )
	   {
	       	     return false;
	   }//if


	   return risultato;
	}

	//CONTROLLO PARTITA IVA
	function isPIVA(PIVA)
	{
	  SommaDispari=0;
	  SommaPari=0;
	  SommaTotale=0;
	  Raddoppio=0;

	  for (i=0;i<=9;i=i+2)
	  {
	    car=PIVA.charAt(i);
	    SommaDispari=SommaDispari+parseInt(car,10);
	  }
	  //alert("Somma dispari:"+SommaDispari);

	  for (i=1;i<=9;i=i+2)
	  {
	    car=PIVA.charAt(i);
	    Raddoppio=2*parseInt(car,10);
	    if (Raddoppio>9)
	    {
	      unita=(Raddoppio % 10);
	      decine=Math.floor((Raddoppio/10));
	      //alert("Decine:"+decine+" Unita"+unita);
	      Raddoppio=unita+decine;
	    }
	    SommaPari=SommaPari+Raddoppio;
	  }
	      //alert("somma pari:"+SommaPari);

	  SommaTotale=SommaPari+SommaDispari;
	  SommaTotale=(SommaTotale % 10);
	  check=((10-SommaTotale) % 10);
	  undicesimo=parseInt(PIVA.charAt(10),10);
	  //alert("check"+check+" undicesimo :"+undicesimo);
	  if (check!=undicesimo)
	    return false;
	  else
	    return true;
	}
