// $Id: validate.js,v 1.8 2010/10/15 15:04:58 fc Exp $
function OpenWindow (loc,handle,size /*width=440,height=270"*/)
{
	var wnd="xx";
 
   var features="resizable=yes,scrollbars=yes,status=0";
   if (size!="") {
      features+=","+size;
   }
	var myWindow = window.open (loc,wnd,features );
 
	if (navigator.appName=='Netscape') { myWindow.focus(); }
	if (handle==1) { return myWindow; }
}

//
// A differenza della OpenWindow() questa funzione crea una finestra con nome
// 'wnd'; se la finestra è già stata creata si limita a ridare fuoco alla
// finestra in esame, mettendola in primo piano (indipendentemente dal browser).
//
function OpenWindowByName(loc, handle, size, wnd)
{
   var features="resizable=yes,scrollbars=yes,status=0";
   if (size!="") {
      features+=","+size;
   }
	var myWindow = window.open (loc,wnd,features );
   myWindow.focus();
 
	if (handle==1) { return myWindow; }
}

function Is_Number(str) {
  var i;

  for (i = 0; i < str.length; i++) {
    var ch = str.charAt(i);
    if ((ch < '0') || (ch > '9')) {
      return(false);
    }
  }
  return(true);
}


//
// Verifica che il numero inserito sia un numero valido, con
// la possibilità che sia comprensivo di segno
//
function Is_NumberSigned(str) {
   var i;

   for (i = 0; i < str.length; i++) {
      var ch = str.charAt(i);
      if (((ch < '0') || (ch > '9')) && ch != '+' && ch != '-') {
         return(false);
      }
   }
   return(true);
}

function Is_Float(str) {
   var i;
 
//   for (i = 0; i < str.length; i++) {
//      var ch = str.charAt(i);
//      if ((ch != '.') && ((ch < '0') || (ch > '9'))) {
//         return(false);
//      }
//   }

   var n = parseFloat(str);
   return( !isNaN(n) );
}


function Is_Blank(str) {
  var i;

  for (i = 0; i < str.length; i++) {
    if (str.charAt(i) != ' ') {
      return(false);
    }
  }
  return(true);
}


function Check_Month(dd, mm, yyyy) {
  if ((mm == 4) || (mm == 6) || (mm == 9) || (mm == 11)) {
    if (dd > 30) return(false);
  } else if (mm == 2) {
    if ((yyyy % 4) != 0) {
      if (dd > 28) return(false);
    } else {
      if (dd > 29) return(false);
    }
  }
  return(true);
}


function Is_Date(strDate) {
  myDate = strDate.split('/');
  if (myDate.length < 3) return(false);

  if ( Is_Number(myDate[0]) && (myDate[0].length == 2) &&
       Is_Number(myDate[1]) && (myDate[1].length == 2) &&
       Is_Number(myDate[2]) && (myDate[2].length == 4) ) {
    var dd = parseInt(myDate[0], 10);
    if ((dd > 0) && (dd <= 31)) {
      var mm = parseInt(myDate[1], 10);
      if ((mm > 0) && (mm <= 12)) {
        var yyyy = parseInt(myDate[2], 10);
        if ((yyyy >= 1900) && (yyyy <= 2098)) {
          return(Check_Month(dd, mm, yyyy));
        } else if ((yyyy < 1900) || (yyyy > 2098)) {
            alert(txt_intervallo_anno);
            return false;
        }
      }
    }
  }

  return(false);
}


function Number_Validator(fld, fldName, vMin, vMax) {
   if ( Is_Blank(fld.value) ) {
     //alert("Campo " + fldName + " Obbligatorio.");
     alert(txt_campo+" " + fldName + " "+txt_obbligatorio+".");
     fld.focus();
     return(false);
   } else if (Is_Number(fld.value) == false) {
     //alert("Formato " + fldName + " non valido.");
     alert(txt_formato +" "+ fldName + " "+txt_non_valido+".");
     fld.focus();
     return(false);
   } else {
     var n = parseInt(fld.value, 10);
     if ( ((vMin == -1) || (n >= vMin)) && 
          ((vMax == -1) || (n <= vMax)) ) {
        return(true);
     } else {
        if ((vMin != -1) && (vMax != -1)) {
           //alert("Inserire un numero compreso tra " + vMin + " e " + vMax);
           alert(txt_inserire_tra+" "+ vMin + " "+txt_e+" " + vMax);
        } else if (vMin != -1) {
           //alert("Inserire un numero maggiore o uguale a " + vMin);
           alert(txt_inserire_maggiore_ug+" "+ vMin);
        } else if (vMax != -1) {
           //alert("Inserire un numero minore o uguale a " + vMax);
           alert(txt_inserire_minore_ug+" "+ vMin);
        }
        fld.focus();
        return(false);
     }
   }
   return(true);
}

function Float_Validator(fld, fldName, vMin, vMax) {
   if ( Is_Blank(fld.value) ) {
     //alert("Campo " + fldName + " Obbligatorio.");
     alert(txt_campo+" " + fldName + " "+txt_obbligatorio+".");
     fld.focus();
     return(false);
   } else if (Is_Float(fld.value) == false) {
     //alert("Formato " + fldName + " non valido.");
     alert(txt_formato +" "+ fldName + " "+txt_non_valido+".");
     fld.focus();
     return(false);
   } else {
     var n = parseFloat(fld.value, 10);
     if ( ((vMin == -1) || (n >= vMin)) && 
          ((vMax == -1) || (n <= vMax)) ) {
        return(true);
     } else {
        if ((vMin != -1) && (vMax != -1)) {
           //alert("Inserire un numero compreso tra " + vMin + " e " + vMax);
           alert(txt_inserire_tra+" "+ vMin + " "+txt_e+" " + vMax);
        } else if (vMin != -1) {
           //alert("Inserire un numero maggiore di " + vMin);
           alert(txt_inserire_maggiore_ug+" "+ vMin);
        } else if (vMax != -1) {
           //alert("Inserire un numero minore di " + vMax);
           alert(txt_inserire_minore_ug+" "+ vMin);
        }
        fld.focus();
        return(false);
     }
   }
   return(true);
}

function Float_Validator_European(fld, fldName, vMin, vMax) {
   if ( Is_Blank(fld.value) ) {
     //alert("Campo " + fldName + " Obbligatorio.");
     alert(txt_campo+" " + fldName + " "+txt_obbligatorio+".");
     fld.focus();
     return(false);
   } else if (Is_Float(toAmerican(fld.value)) == false) {
     //alert("Formato " + fldName + " non valido.");
     alert(txt_formato +" "+ fldName + " "+txt_non_valido+".");
     fld.focus();
     return(false);
   } else {
     var n = parseFloat(toAmerican(fld.value), 10);
     if ( ((vMin == -1) || (n >= vMin)) && 
          ((vMax == -1) || (n <= vMax)) ) {
        return(true);
     } else {
        if ((vMin != -1) && (vMax != -1)) {
           //alert("Inserire un numero compreso tra " + toEuropean(vMin) + " e " + toEuropean(vMax));
           alert(txt_inserire_tra+" "+ toEuropean(vMin) + " "+txt_e+" " + toEuropean(vMax));
        } else if (vMin != -1) {
           //alert("Inserire un numero maggiore di " + toEuropean(vMin));
           alert(txt_inserire_maggiore_ug+" "+ toEuropean(vMin));
        } else if (vMax != -1) {
           //alert("Inserire un numero minore di " + toEuropean(vMax));
           alert(txt_inserire_minore_ug+" "+ toEuropean(vMax));
        }
        fld.focus();
        return(false);
     }
   }
   return(true);
}



function Null_Number_Validator(fld, fldName, vMin, vMax) {
   if ( !Is_Blank(fld.value) ) {
      return( Number_Validator(fld, fldName, vMin, vMax) );
   }
   return(true);
}


function Date_Validator(fld, fldName) {
  if ( Is_Blank(fld.value) ) {
    //alert("Campo " + fldName + " Obbligatorio.");
    alert(txt_campo+" " + fldName + " "+txt_obbligatorio+".");
    fld.focus();
    return(false);
  } else if (fld.value=='.') {
    fld.value=getTodayDate();
  } 
  if (Is_Date(fld.value) == false) {
    //alert("Formato " + fldName + " non valido.");
    alert(txt_formato +" "+ fldName + " "+txt_non_valido+".");
    fld.focus();
    return(false);
  } else {
    return(true);
  }
}

function getTodayDate() {
    var d = new Date();
    var res = twoDigit(d.getDate())+'/'+twoDigit(d.getMonth()+1)+'/'+d.getFullYear();
    return res;
}

function Null_Date_Validator(fld, fldName) {
  if ( !Is_Blank(fld.value) ) {
    if (fld.value=='.') {
        fld.value=getTodayDate();
    }
    if (Is_Date(fld.value) == false) {
      //alert("Formato " + fldName + " non valido.");
      alert(txt_formato +" "+ fldName + " "+txt_non_valido+".");
      fld.focus();
      return(false);
    }
  }
  return(true);
}


function Mandatory_Field(fld, fldName) {
  if ( Is_Blank(fld.value) ) {
    //alert("Campo " + fldName + " Obbligatorio.");
    alert(txt_campo+" " + fldName + " "+txt_obbligatorio+".");
    fld.focus();
    return(false);
  } else {
    return(true);
  }
}


function Date_Compare(strDate_a, strDate_b) {
  myDate_a = strDate_a.split('/');
  myDate_b = strDate_b.split('/');
  var tmpDat_a = myDate_a[2] + myDate_a[1] + myDate_a[0];
  var tmpDat_b = myDate_b[2] + myDate_b[1] + myDate_b[0];
  return(parseInt(tmpDat_a, 10) <= parseInt(tmpDat_b, 10));
}


function Range_Validator(Date_a, Date_b) {
  if ( Is_Blank(Date_a.value) ) Date_a.value = new String("01/01/1900");
  if ( Is_Blank(Date_b.value) ) Date_b.value = new String("31/12/2999");
  if ( !Date_Validator(Date_a, 'Data Iniziale') ||
       !Date_Validator(Date_b, 'Data Finale') ) {
    return(false);
  } else if ( !Date_Compare(Date_a.value, Date_b.value) ) {
    alert("L'intervallo di date specificato non e' corretto!");
    Date_a.focus();
    return(false);
  }
  return(true);
}


function Anno_Validator(fld, fldnam) {
  if ( Is_Blank(fld.value) ) {
    //alert("Campo " + fldnam + " Obbligatorio.");
    alert(txt_campo+" " + fldnam + " "+txt_obbligatorio+".");
  } else if (Is_Number(fld.value)) {
    var y = parseInt(fld.value, 10);
    if ((y >= 1900) && (y <= 2999)) {
      return(true);
    }
    //alert("Formato " + fldnam + " non valido.");
    alert(txt_formato +" "+ fldnam + " "+txt_non_valido+".");
  } else {
    //alert("Formato " + fldnam + " non valido.");
    alert(txt_formato +" "+ fldnam + " "+txt_non_valido+".");
  }
  fld.focus();
  return(false);
}


function Sconto_Validator(fld, fldnam) {
  if ( Is_Blank(fld.value) ) {
    fld.value = "0.00";
    return(true);
  } else if (Is_Float(fld.value)) {
    var n = parseFloat(fld.value);
    if ((n >= 0) && (n < 100)) {
      return(true);
    }
    //alert("Campo " + fldnam + " non valido.");
    alert(txt_campo +" "+ fldnam + " "+txt_non_valido+".");
  } else {
    //alert("Campo " + fldnam + " non numerico.");
    alert(txt_campo +" "+ fldnam + " "+txt_non_numerico+".");
  }
  fld.focus();
  return(false);
}


function Select_Validator(fld, fldnam) {
   if (fld.selectedIndex > 0) {
      return(true);
   }
   //alert("Campo " + fldnam + " Obbligatorio.");
   alert(txt_campo+" " + fldnam + " "+txt_obbligatorio+".");
   fld.focus();
   return(false);
}

function Select_Validator_Multiplo(theform,strfldname, fldnam, nfields) {
   var tot=0;
   var plursing=txt_campi1;
   if (nfields < 2) {
      plursing=txt_campo1;
   }
   var fld=theform.elements[strfldname];

   for (i=0;i < fld.options.length;i++) {
      if (fld.options[i].selected) {
         tot++;
      }
   }
   if (tot >= nfields) {
      return(true);
   }
   //alert("Selezionare almeno "+ nfields +" "+ plursing + " da "+ fldnam);
   alert(txt_selezionare_almeno+" "+ nfields +" "+ plursing + " "+txt_da+" "+ fldnam);
   fld.focus();
   return(false);
}

function SelezionaTutto(theform,nomecampo) {
    var selc = theform.elements[nomecampo];
    if (selc) {
        if (selc.selectedIndex < 0) {
            for (var i=selc.options.length-1; i >=0 ; i--) {
                selc.options[i].selected = true;
            }
        }
    } else {
        alert('Errore: non trovato '+nomecampo);
    }
}

function Scelta_Obbligatoria(campo,nome) {
   for (i=0; i < campo.options.length; i++) {
      if (campo.options[i].selected) {
         return true;
      }
   }
   alert(txt_scegliere_almeno+" "+nome);
   return false;
}

function Confirm_Delete() {
   //return confirm("Confermare la richiesta di eliminazione del record corrente");
   return confirm(txt_conferma_elimina);
}
function Confirm_Operation() {
   //return confirm("Confermare la richiesta per questa operazione");
   return txt_conferma_op;
}

function twoDigit(val) {
   if (val < 10 && val >= 0) {
      return "0"+val;
   } else return val;
}

function roundEuro(number) {
   return Math.round(number*100)/100;
}

function roundNumber(number,decimals) {
   var d=Math.pow(10,decimals);
   return Math.round(number*d)/d;
}

function toAmerican(number) {
   var p=""+number;
   var x=p.replace(/\./,'');
   p=x.replace(',','.');
   return p;
}
function toEuropean(number) {
   //alert("toEuropean (secco): number="+number);
   var p=""+number;
   //alert("toEuropean (come prima): p="+p);
   var x=p.replace(',','');
   //alert("toEuropean (senza ,): x="+x);
   p=x.replace(/\./,',');
   //alert("toEuropean (con la , al posto del .): p="+p);
   return p;
}
// Da una data tipo 22/11/1999 calcola howMany giorni dopo
function CalcolaSommaData(strDate,howMany) {
   myDate = strDate.split('/');
   if (myDate.length < 3) return("");

   if ( Is_Number(myDate[0]) && (myDate[0].length == 2) &&
        Is_Number(myDate[1]) && (myDate[1].length == 2) &&
        Is_Number(myDate[2]) && (myDate[2].length == 4) ) {

      var data=new Date(parseInt(myDate[2],10),parseInt(myDate[1],10)-1,parseInt(myDate[0],10));
      var ora=data.getTime()+howMany*1000*60*60*24;
      var nuovaData= new Date(ora);
      return ""+twoDigit(nuovaData.getDate())+"/"+twoDigit(nuovaData.getMonth()+1)+"/"+nuovaData.getFullYear();
   }
   return ("");
}

// Da una data tipo 22/11/1999 calcola howMany mezzi mesi dopo
function CalcolaSommaMesiData(strDate,howMany) {
   myDate = strDate.split('/');
   if (myDate.length < 3) return("");

   if ( Is_Number(myDate[0]) && (myDate[0].length == 2) &&
        Is_Number(myDate[1]) && (myDate[1].length == 2) &&
        Is_Number(myDate[2]) && (myDate[2].length == 4) ) {

      var mese=parseInt(myDate[1],10);
      var data=new Date(parseInt(myDate[2],10),mese-1,parseInt(myDate[0],10));
      var ora=data.getTime();
      for (var i=0; i < howMany/2;i++) {
         //alert("aggiungo "+ggMese(mese+i));
         ora += ggMese(mese+i)*1000*60*60*24;
         //var nuovaDataX= new Date(ora);
         //alert(""+twoDigit(nuovaDataX.getDate())+"/"+twoDigit(nuovaDataX.getMonth()+1)+"/"+nuovaDataX.getFullYear());
      }
      ora+=1000*60*60*1; // L'ora legale ci fotte!
      if ((howMany % 2)!=0) { // aggiungo i 15 gg rimanenti
         ora += 15*1000*60*60*24;
      }
      var nuovaData= new Date(ora);
      var ret=""+twoDigit(nuovaData.getDate())+"/"+twoDigit(nuovaData.getMonth()+1)+"/"+nuovaData.getFullYear();
      //alert("ret="+ret);
      return ret;
   }
   return ("");
}

function ggMese(mese) {
   giorni= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
   while (mese > 12) {
      mese-=12;
   }
   if (mese < 13 && mese > 0) {
      return giorni[mese];
   }
   return 0;
}

var euroVeri=0;
function inEuro(fld) {
  euroVeri= (toAmerican(fld.value))/(1936.27);
  var euro=roundEuro(euroVeri);
  if (isNaN(euro)) euro=0;
  fld.value=toEuropean(euro);
}
function inLire(fld) {
  if (euroVeri==0) {
     return;
  } else {
     var lire=Math.round(euroVeri*(1936.27));
     if (isNaN(lire)) lire=0;
     fld.value=toEuropean(lire);
  }
}

function AggiungiSelect(campo,msg) {
   var altrodato=prompt(msg,"");
   if (altrodato!=null) {
      if (campo!=null && campo.options!=null) {
         var len=campo.options.length;
         for (i=0;i < len;i++) {
            campo.options[i].selected=false;
            if (campo.options[i].value.toUpperCase()==altrodato.toUpperCase()) {
               campo.options[i].selected=true;
               return;
            }
         }
         campo.options[len]=new Option(altrodato,altrodato);
         campo.options[len].selected=true;
      } else {
         //alert("Non posso aggiornare.");
         alert(txt_non_posso_aggiornare);
      }
   }
}

function hide(obj) {
   obj.style.display='none';
}

function show(obj) {
   obj.style.display='inline';
}

function toggle(obj) {
   //alert('obj= '+obj);
   if (obj.style.display=='none') {
      show(obj);
   } else {
      hide(obj);
   }
}

function toggleWithName(obj,id,name_show,name_hide) {
   //alert('obj= '+obj);
   var n = 0;
   if (obj.style.display=='none') {
      show(obj);
      n=1;
   } else {
      hide(obj);
      n=2;
   }
   try {
       var x = document.getElementById(id);
       if (x) {
           x.innerHTML=(n==1? name_show:name_hide);
       }
   } catch ( e ) {
       alert('Error: '+e.message);
   }
}

function hide_div(obj) {
   obj.style.display='none';
   obj.style.visibility='hidden';
}

function show_div(obj) {
   obj.style.display='inline';
   obj.style.visibility='visible';
}

function toggle_div(obj) {
   if (obj.style.visibility=='hidden') {
      show_div(obj);
   } else {
      hide_div(obj);
   }
}
function ValidateEmail(name) {
    if (name != null) {
        var i1,i2;
        if (((i1=name.indexOf('@')) > 0) && ((i2=name.indexOf('.',i1)) > (i1+1)) && (i2 < (name.length-1))) {
            return true;
        }
    }
    return false;
}


