// Gestione dei controlli Javascript - Client side
// Versione 1.0 del 16/11/02
// Autore: Fausto Iannuzzi
// E-Mail: f.iannuzzi@libero.it

// funzione per ricerca binaria in array javascript
function binarySearch(array, find, caseInsensitive, getSubstring, arrayCheckThisIndex){
//Validate:
if(!array || typeof(array)!="object" || typeof(find)=="undefined" || !array.length){return null};
find=(!caseInsensitive)?find:find.toLowerCase();
//Initialize:
var low=0;
var high=array.length-1;
var highOnTop=(array[0]>array[array.length-1])?1:0;
//RUN:
while(low<=high){
var aTry=parseInt((low+high)/2);
var checkThis=(typeof(arrayCheckThisIndex)=="undefined")?array[aTry]:array[aTry][arrayCheckThisIndex];
checkThis=(!caseInsensitive)?checkThis:checkThis.toLowerCase();
checkThis=(!getSubstring)?checkThis:checkThis.substring(0, find.length);
	if(!highOnTop){
		if(checkThis<find){low=aTry+1;continue;};
		if(checkThis>find){high=aTry-1;continue;};
	}
	else{
		if(checkThis>find){low=aTry+1;continue;};
		if(checkThis<find){high=aTry-1;continue;};
	};
return aTry;/*success: returns index: Number*/
}
return null; /*no match: returns null*/
}

function is_obbl_multisel(campo, label)
{
    campo = arguments[0]
    label = arguments[1]

    if (campo.disabled==true)
     return true;

    if ((campo.options.length == 0))
      {
       alert('Il campo "'+label+'" deve possedere almeno un elemento!');
       return errore(campo);
      }
   
   return true;
}

function round(number,X) 
   { 
   X = (!X ? 2 : X); 
   return Math.round(number*Math.pow(10,X))/Math.pow(10,X); 
   } 

                            function formatoEuroPP(importo)
                            {
                                  imp=importo;
                                  if(importo.length!=0)
                                  {
                                        if((importo.indexOf("."))==-1) // Caso in cui l importo NON contiene il punto decimale
                                        {
                                            imp=importo+".00";
                                        }
                                        else
                                        {
                                            if((importo.indexOf("."))==(importo.length-2)) imp=importo+"0";
                                            else
                                            {
                                                if((importo.length -1)== importo.indexOf(".")) imp=importo+"00";
                                                else
                                                {
                                                    if (((importo.length-importo.indexOf(".")))>3 ) // Troncamento dell'importo
                                                        imp = importo.substring(0,importo.indexOf(".")+3);
                                                }
                                            }
                                            if((importo.indexOf("."))==0) imp="0" + imp;
                                        }
                                  } //if(importo.length!=0)
                                  else {imp="0.00";}
                                  return imp;
                            }

                            function controllaEuro(obj,nomecampo,valMin,valMax)
                            {
                                    msg="Inserire un valore numerico nel campo " + nomecampo;
                                    msg= msg + "\nil valore puo' contenere al massimo due decimali separati ";
                                    msg= msg + "\ndalla parte intera con un punto: Es. 123.45";

																		if (obj.value == '0')
																		 obj.value = '0.00';
                                    if (!is_blank(obj.value))
                                    {
                                       if (isNaN(obj.value)) {
                                          alert(msg);
                                          obj.select();
                                          obj.focus();
                                          return false;
                                       }
                                       else
                                       {
                                          if (obj.value<valMin || obj.value>valMax)
                                          {
                                                window.alert("Il campo " + nomecampo + " deve essere compreso tra " + valMin + " e " + valMax + ".");
                                                obj.select();
                                                obj.focus();
                                                return false;
                                          }
                                       }
                                    }
                                    if (formatoEuroPP(obj.value)!=0)  obj.value=formatoEuroPP(obj.value);
                                    return true;
                            }



function ControllaPIVA(campo)
{
	pi = campo.value;	
	if( pi == '' )  return true;
	if( pi.length != 11 ) {
		alert("La lunghezza della partita IVA non è\n" +
			"corretta: la partita IVA dovrebbe essere lunga\n" +
			"esattamente 11 caratteri.\n");
		return errore(campo);
		}
	validi = "0123456789";
	for( i = 0; i < 11; i++ ){
		if( validi.indexOf( pi.charAt(i) ) == -1 ) {
		   alert("La partita IVA contiene un carattere non valido `" +
				pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n");
		   return errore(campo);
		}
	}
	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) )
		return "La partita IVA non è valida:\n" +
			"il codice di controllo non corrisponde.\n";
	return true;
}


// Mette il focus nel form
function focusFirst(nomeform) {
 //nomeform.elements[0].focus();

 // Mette il focus sul primo elemento del form che non è hidden
 for (var i=0;i<nomeform.elements.length-1;i++) {
//  alert(nomeform.elements[i].type);
  if (nomeform.elements[i].type!="hidden") {
   nomeform.elements[i].focus();
   break;
  }
 }
}

// Setta il corretto valore dei Radio Buttons per le pagine di modifica
function checkRadio(obj, name) 
 {   
 for (var i = 0; i < obj.length; i++) {      
		 if (obj[i].value==name) {  
			 obj[i].checked=true;  
		 }   
 }
}

// Setta il corretto valore dei CheckBox per le pagine di modifica
function checkBoxSet(obj, value) 
{   
 value = value.toUpperCase();
 if ((value=='1')  || (value=='S') || (value=='V') || (value=='SI') || (value=='OK'))
  obj.checked=true;  
 else
  obj.checked=false;  
}

// Setta il corretto valore dei CheckBox per le pagine di modifica con i checkbox a valore invertito
function checkBoxSet_INV(obj, value) 
{   
 value = value.toUpperCase();
 if ((value=='0')  || (value=='N') || (value=='F') || (value=='NO') || (value=='NOTOK'))
  obj.checked=true;  
 else
  obj.checked=false;  
}

function errore (campo) {
    campo.focus();
    if ((campo.type=="text")||(campo.type=="textarea")) campo.select();
    return false;
}

function is_blank (stringa) {
  return ((stringa == null)||(stringa.length==0))
}

function compress(stringa) {
  s = new String("");
  for (i = 0; (stringa.charAt(i)==" ")&&(i<stringa.length); i++);
   for (j = stringa.length-1; (stringa.charAt(j)==" ")&&(j>=0); j--);
    s = stringa.substr(i,j-i+1);  
  return s;
}

function is_number(c) {
  return ((c >= "0") && (c <= "9"));
}

function is_phone_number (c) {
  return (((c >= "0") && (c <= "9") || (c=='+') || (c=='-') || (c=='(') || (c==')')));
}

function campo_valorizzato(campo)
{
     s = compress(campo.value);
     // tratta il campo disabilitato come corretto
     if (campo.disabled==true) {
     flag=1;
     return flag;
	}

	if (is_blank(s)) 
	{
	 flag=0;
	 return flag;
	}
	else
	{
	 flag=1;
	 return flag;
	}
}

function is_obbl(campo, label)
{
    s = compress(campo.value);
    if (campo.disabled==true)
     return true;

    if (is_blank(s)) 
    {
      alert('Il campo "'+label+'" non può essere lasciato vuoto!');
      return errore(campo);
    }
    return true;
}

function is_selected_sel(campo)
{
 if ((campo.options[campo.options.selectedIndex].value == "-1") || (campo.options[campo.options.selectedIndex].value == "0"))
  return true;
 else
  return false;
} 

function is_selected_mul_sel(campo)
{
 //alert(campo.options[campo.options.selectedIndex].value.substring(3));
 if ((campo.options[campo.options.selectedIndex].value.substring(3)  == "-1") || (campo.options[campo.options.selectedIndex].value.substring(3)  == "0"))
  return true;
 else
  return false;
} 

function is_obbl_sel(campo, label)
{
    campo = arguments[0]
    label = arguments[1]

	if (campo.disabled==true)
     return true;

    if (arguments.length == 3) {
     var blank_ok = arguments[2]
     if (blank_ok) {
      if ((campo.options[campo.options.selectedIndex].value == "-1"))
      {
       alert('Il campo "'+label+'" deve essere selezionato o impostato su "Nessuno/a"!');
       return errore(campo);
      }
	 } else {
      if ((campo.options[campo.options.selectedIndex].value == "-1") || (campo.options[campo.options.selectedIndex].value == "0"))
      {
       alert('Il campo "'+label+'" non può essere lasciato vuoto!');
       return errore(campo);
      }
	 }
	} 
   else {
    if ((campo.options[campo.options.selectedIndex].value == "-1") || (campo.options[campo.options.selectedIndex].value == "0"))
     {
      alert('Il campo "'+label+'" non può essere lasciato vuoto!');
      return errore(campo);
     }
   }
   return true;
}

function is_obbl_sel_multi(campo, label)
{
    campo = arguments[0]
    label = arguments[1]

    var value_array=campo.options[campo.options.selectedIndex].value.split("-");
	var value_to_check = value_array[1];

	if (campo.disabled==true)
     return true;

    if (arguments.length == 3) {
     var blank_ok = arguments[2]
     if (blank_ok) {
      if ((value_to_check == "-1"))
      {
       alert('Il campo "'+label+'" deve essere selezionato o impostato su "Nessuno/a"!');
       return errore(campo);
      }
	 } else {
      if ((value_to_check == "-1") || (value_to_check == "0"))
      {
       alert('Il campo "'+label+'" non può essere lasciato vuoto!');
       return errore(campo);
      }
	 }
	} 
   else {
    if ((value_to_check == "-1") || (value_to_check == "0"))
     {
      alert('Il campo "'+label+'" non può essere lasciato vuoto!');
      return errore(campo);
     }
   }
   return true;
}

function is_int (campo,zeroflag) {   
    s=campo.value;
    if (!is_blank(s)) {
      num = parseInt(campo.value,10);
    if (isNaN(num)) {
      alert('Il valore inserito non è un numero');
      return errore(campo);
    }    
    if (zeroflag)
     if (num==0) {
       alert('Il valore zero non è ammesso per questo campo!');
       return errore(campo);
     }    
    }
  return true;
}

function is_int_min (campo,maxval) {   
    s=campo.value;
    if (!is_blank(s)) {
      num = parseInt(campo.value,10);
    if (isNaN(num)) {
      alert('Il valore inserito non è un numero');
      return errore(campo);
    }    
    if (num==0) {
       alert('Il valore zero non è ammesso per questo campo!');
       return errore(campo);
     }    
    if (num>maxval) {
       alert('Il valore '+num+' è superiore al valore massimo!');
       return errore(campo);
     }    
	}
  return true;
}


function is_int_pos (campo,zeroflag) {   
    s=campo.value;
    if (!is_blank(s)) {
      num = parseInt(campo.value,10);
      if (isNaN(num)) {
        alert('Il valore inserito non è un numero!');
        return errore(campo);
      }    
      if (num<0) {
        alert('Il valore inserito non è positivo!');
        return errore(campo);
      }    
      if (zeroflag)
       if (num==0) {
        alert('Il valore zero non è ammesso per questo campo!');
        return errore(campo);
       }    
    }
  return true;
}

function is_phone(campo) { 
    s = compress(campo.value);
    campo.value = s;
    if (!is_blank(s)) {
      for (i = j; i < s.length; i++)
      {   
        c = s.charAt(i);
        if (!is_phone_number(c)) {
            alert('Il valore inserito non è un numero di telefono!');
            return errore(campo);
        }
      }
      if (s.length < 5) {
            alert('Il numero di telefono deve essere composto almeno da 5 cifre!');
            return errore(campo);
        }
     }
  return true;
}

function is_cap (campo) { 
    s = compress(campo.value);
    campo.value = s;
    if (!is_blank(s)) {
     for (i = j; i < s.length; i++)
      {   
        c = s.charAt(i);
        if (!is_number(c)) {
            alert('Il valore inserito non è un numero di CAP!');
            return errore(campo);
        }
        if (s.length < 5) {
            alert('Il numero di CAP deve essere composto da 5 cifre!');
            return errore(campo);
        }
      }
    }
  return true;
}

function is_provincia (campo) { 
    s = compress(campo.value);
    if (!is_blank(s)) {
     if (s.length < 2) {
            alert('Il codice di provincia deve essere composto da 2 lettere!');
            return errore(campo);
     }
    }
 return true;
}

function is_email(campo){

badEmail = ((is_blank(campo.value)) || (campo.value.indexOf("@") == -1 ) || (campo.value.indexOf(".") == -1 ) || (campo.value.length <= 3));
//alert(badEmail);
if (!badEmail){
   return true;
} else {
  alert("Il valore inserito non è un' e-mail valida!"); 
  return errore(campo);
   }
}

function is_domain(campo){
 var filter=/^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$/i;
 if (filter.test(campo.value)) return true
 else{alert("Il valore inserito non è un dominio valido!"); return errore(campo);}
}

function is_domainfull(campo){
 var filter=/^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]\.[a-zA-Z]{2,4}$/i;
 if (filter.test(campo.value)) return true
 else{alert("Il valore inserito non è un dominio completo valido!"); return errore(campo);}
}

function is_date(campo)
{
    var separatore_data = '-';

    // numero di giorni di ciascun mese
    var giorni_per_mese = new Array(13);
    giorni_per_mese[1] = 31;
    giorni_per_mese[2] = 29;   
    giorni_per_mese[3] = 31;
    giorni_per_mese[4] = 30;
    giorni_per_mese[5] = 31;
    giorni_per_mese[6] = 30;
    giorni_per_mese[7] = 31;
    giorni_per_mese[8] = 31;
    giorni_per_mese[9] = 30;
    giorni_per_mese[10] = 31;
    giorni_per_mese[11] = 30;
    giorni_per_mese[12] = 31;

    s = compress(campo.value);
    if (!is_blank(s)) 
    {
      s = s.replace(/\.|\\|\/|-/gi,separatore_data);

      // estrae giorno, mese e anno
      h = s.indexOf(separatore_data);
      s_giorno = s.substr(0,h);
      s = s.substr(h+1,s.length-h-1);
      h = s.indexOf(separatore_data);
      s_mese = s.substr(0,h);
      s_anno = s.substr(h+1,s.length-h-1);
   
      // controlla la validità dell'anno
      if (s_anno.length!=4) {
        alert('Errore nella data: anno non valido');
        return errore(campo);
      }
      for (i = 0; i < s_anno.length; i++) {   
        c = s_anno.charAt(i);
        if (!is_number(c)) {
          alert('Errore nella data: anno non valido');
          return errore(campo);
        }
      }
      if (s_anno.length==2) {
        if (s_anno>='80') 
          s_anno = '19'+s_anno;
        else 
          s_anno = '20'+s_anno;
      }
      anno = parseInt(s_anno,10);
    
      // controlla la validità del mese
      if ((s_mese.length==0)||(s_mese.length>2)) {
        alert('Errore nella data: mese non valido');
        return errore(campo);
      }
      for (i = 0; i < s_mese.length; i++) {   
        c = s_mese.charAt(i);
        if (!is_number(c)) {
          alert('Errore nella data: mese non valido');
          return errore(campo);
        }
      }
      if (s_mese.length==1) s_mese="0" + s_mese;
      mese = parseInt(s_mese,10);
      if ((mese<1)||(mese>12)) {
        alert('Mese non valido');
        return errore(campo);
      }
      if ((anno%4==0)&&((!(anno%100==0))||(anno%400==0)))
        giorni_per_mese[2]=29;
      else
        giorni_per_mese[2]=28;
  
      // controlla la validità del giorno
      if ((s_giorno.length==0)||(s_giorno.length>2)) {
        alert('Errore nella data: giorno non valido!');
        return errore(campo);
      }
      for (i = 0; i < s_giorno.length; i++) {   
        c = s_giorno.charAt(i);
        if (!is_number(c)) {
          alert('Errore nella data: giorno non valido!');
          return errore(campo);
        }
      }
      if (s_giorno.length==1) s_giorno="0" + s_giorno;
      giorno = parseInt(s_giorno,10);
      if ((giorno<1)||(giorno>giorni_per_mese[mese])) {
        alert('Giorno non valido');
        return errore(campo);
      }

      if ((giorno==31) && (mese==12) && (anno==9999)) {
        alert('La data 31-12-9999 non è valida!');
        return errore(campo);
      }
      
      campo.value = s_giorno+separatore_data+s_mese+separatore_data+s_anno;
    }
  return true;
}

function is_data_nascita (campo)
{
    var separatore_data = '-';

    // numero di giorni di ciascun mese
    var giorni_per_mese = new Array(13);
    giorni_per_mese[1] = 31;
    giorni_per_mese[2] = 29;   
    giorni_per_mese[3] = 31;
    giorni_per_mese[4] = 30;
    giorni_per_mese[5] = 31;
    giorni_per_mese[6] = 30;
    giorni_per_mese[7] = 31;
    giorni_per_mese[8] = 31;
    giorni_per_mese[9] = 30;
    giorni_per_mese[10] = 31;
    giorni_per_mese[11] = 30;
    giorni_per_mese[12] = 31;

    s = compress(campo.value);
    if (!is_blank(s)) 
    {
      s = s.replace(/\.|\\|\/|-/gi,separatore_data);

      // estrae giorno, mese e anno
      h = s.indexOf(separatore_data);
      s_giorno = s.substr(0,h);
      s = s.substr(h+1,s.length-h-1);
      h = s.indexOf(separatore_data);
      s_mese = s.substr(0,h);
      s_anno = s.substr(h+1,s.length-h-1);
   
      // controlla la validità dell'anno
      if ((s_anno.length!=2)&&(s_anno.length!=4)) {
        alert('Errore nella data: anno non valido');
        return errore(campo);
      }
      for (i = 0; i < s_anno.length; i++) {   
        c = s_anno.charAt(i);
        if (!is_number(c)) {
          alert('Errore nella data: anno non valido');
          return errore(campo);
        }
      }
      if (s_anno.length==2) {
        if (s_anno>='80') 
          s_anno = '19'+s_anno;
        else 
          s_anno = '20'+s_anno;
      }
      anno = parseInt(s_anno,10);
    
      // controlla la validità del mese
      if ((s_mese.length==0)||(s_mese.length>2)) {
        alert('Errore nella data: mese non valido');
        return errore(campo);
      }
      for (i = 0; i < s_mese.length; i++) {   
        c = s_mese.charAt(i);
        if (!is_number(c)) {
          alert('Errore nella data: mese non valido');
          return errore(campo);
        }
      }
      if (s_mese.length==1) s_mese="0" + s_mese;
      mese = parseInt(s_mese,10);
      if ((mese<1)||(mese>12)) {
        alert('Mese non valido');
        return errore(campo);
      }
      if ((anno%4==0)&&((!(anno%100==0))||(anno%400==0)))
        giorni_per_mese[2]=29;
      else
        giorni_per_mese[2]=28;
  
      // controlla la validità del giorno
      if ((s_giorno.length==0)||(s_giorno.length>2)) {
        alert('Errore nella data: giorno non valido!');
        return errore(campo);
      }
      for (i = 0; i < s_giorno.length; i++) {   
        c = s_giorno.charAt(i);
        if (!is_number(c)) {
          alert('Errore nella data: giorno non valido!');
          return errore(campo);
        }
      }
      if (s_giorno.length==1) s_giorno="0" + s_giorno;
      giorno = parseInt(s_giorno,10);
      if ((giorno<1)||(giorno>giorni_per_mese[mese])) {
        alert('Giorno non valido');
        return errore(campo);
      }

      if ((giorno==31) && (mese==12) && (anno==9999)) {
        alert('La data 31-12-9999 non è valida!');
        return errore(campo);
      }
      
      today 	= new Date();
      userdate	= new Date(anno,mese,giorno);
      if (userdate > today) {
        alert('Data di nascita non valida! (Non inserire data di oggi o del futuro)');
        return errore(campo);
      }
      
      campo.value = s_giorno+separatore_data+s_mese+separatore_data+s_anno;
    }
  return true;
}

function is_obbl_iview(campo, iview, label)
{
    //alert(campo.value);
    s = compress(campo.value);
    if (campo.disabled==true)
     return true;

    if (is_blank(s)) 
    {
      alert('Il campo "'+label+'" non può essere lasciato vuoto!');
      iview.focus();
      return false;
    }
    return true;
}

