/**
 * Determina se la stringa passata e' composta da sole cifre
 */
function isDigit(str)
{
    for (i = 0; i < str.length; i++)
    {
        if (str.charAt(i) < "0" || str.charAt(i) > "9")
        {
            return false;
        }
    }
    return true;
}

/*
* Verifica la validità di una data
*/
function verificaInputData(valore) {
    if ( valore.length==0 ) return 0;
    if ( !( valore.length==10 && valore.indexOf( '/' )==2 && valore.indexOf( '/', 3 )==5 ) ) return 2;

    var ddStr = valore.substring( 0, 2 );
    var mmStr = valore.substring( 3, 5 );
    var yyyyStr = valore.substring( 6, 10 );

    var dd = parseInt( ddStr, 10 );
    var mm = parseInt( mmStr, 10 );
    var yyyy = parseInt( yyyyStr, 10 );

    if ( !isDigit(ddStr) || !isDigit(mmStr) || !isDigit(yyyyStr)
         || mm==0 || dd==0 || yyyy==0 ) return 3;
    if ( ( mm < 1 || mm > 12 || dd < 1 || dd > 31 ) ) return 4;
    //controllo sui giorni del mese
    if( (mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30) return 4;
    if ( ( mm == 2 ) && ( dd > 29  ) ) return 4;
    if ( !(((yyyy%400)==0) || (((yyyy%100)!=0) && ((yyyy%4)==0))) && (mm == 2) && (dd == 29) ) return 5;
    
    return 0;
    }

/*
 * TRIM che toglie gli spazi a value e se stringa vuota la sostituisce con lo zero
 * (prima di fare la submit)
 */
function TRIM(value) {
    re=/\s+$|^\s+/g;
    value = value.replace(re,"");
    return value;
}


function TRIM_NUM(value){
    var valore = "";
    valore = TRIM(value);
    if(valore == ""){
        valore = "0";
    }
    return valore;
}

function findSX(value){
   var app = value;
   var inizio = 0;
   if(app.length > 3){
     for (var i=0; i<app.length; i+3){
       if(app.substring(i,i+1) != "%" || app.substring(i+1,i+3) != "20"){
            inizio = i;
            return inizio;
       }
       i=i+3;
     }
   }
   else {
     return inizio;
   }
}

function findDX(value){
   var app = value;
   var fine = app.length;
   if(fine > 3){
     for (var j=fine-3; j>0; j-3){
         if(app.substring(j,j+1) != "%" || app.substring(j+1,j+3) != "20"){
               fine = j + 3;
            return fine;
         }
         if((fine-3)-j<=0){
            fine = j;
            return fine;
         } else {
            j = j-3;
         }
     }

   }
   else {
     return fine;
   }
}

/*
 * Trim che permette di togliere gli spazi iniziali e finali di un concatenamento di stringhe
 * senza eliminare quelli interni.Inoltre controlla che il valore non sia costituito da soli spazi
 */

function ControlSpazi(value){
   var app = value;
   var trovato = false;
   trovato = allSpace(app);
   var inizio = 0;
   var fine = value.length;
   if(trovato){
            inizio = findSX(value);
      fine = findDX(value);
      //var nuovo_value = app.substring(inizio,fine);
      var nuovo_value = value;
   } else {
             var nuovo_value = "";
   }
   return nuovo_value;
}

function allSpace(value){
   var trovato = false;
   for (var i=0; i<value.length; i+3){
       if(value.substring(i,i+1) != "%" || value.substring(i+1,i+3) != "20"){
	   		trovato = true;
			return trovato;
	   }
	   i=i+3;
   }
}


/*
* Controlli sulla password inserita
*/
function controllaPwd(value, lingua) {
    var result = "";
    if(isNaN(value)) { //c'e' almeno un carattere
        var allValid = true;
        var checkOK = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
        for(var i=0; i<value.length;i++) {
           ch = value.charAt(i);
               for(var j=0; j<checkOK.length;j++) {
                    if(ch == checkOK.charAt(j))
                  break;
                  if(j == checkOK.length) {
                       allValid = false;
                       break;
                  }
             }
          }
    }
    else {
        result = getErrorMessage(20,lingua);
        return result;
    }
      if(!allValid) {
        result = getErrorMessage(20,lingua);
        return result;
    }
    return result;
}

/*  
  Ritorna la parte intera di un numero
*/
function getIntPart(value) {
    var strValue = new String(value);
    var ind = strValue.indexOf(".");

    if(ind != -1) { //c'è il "."
        return strValue.substring(0,ind);
    }
    return strValue;
}

/*  
  Ritorna la percentuale di tot * perc / 100
  I decimali sono al massimo 2
*/
function calcPerc(tot, perc) {
    var nImpo = parseFloat(tot) * parseFloat(perc);
    return getIntPart(nImpo) / 100;       
}

/*  
  Ritorna la percentuale 
  I decimali sono al massimo 2
*/
 function calcImp(tot, impo) {
    var nImpo;

    if (parseFloat(impo) == 0)
      nImpo = 0;
    else
      nImpo = (parseFloat(tot) / parseFloat(impo)) * 100;
    return (nImpo);
}


/*  limitare il numero di caratteri che si puo' inserire in un campo <TEXTAREA> 
@param obj e' un oggetto contenuto in un form
@param maxchars e' un numero intero, indica il numero max di caratteri inseribile

    usare con  onKeyUp="CheckLength(this, number)"
*/
function CheckLength(obj, maxchars){
    chars = obj.value;

    if (chars.length > maxchars){
        obj.value = chars.substr(0,maxchars);
    }
}

/**
 * Ritorna la dimensione dell'array obj
 * Se obj non esiste ritorna -1
 * Se obj non e' un array ma esiste ritorna 1
 */
function getLength(obj) {
    if (obj) { 
        if (obj.length) { 
            return obj.length;
        }
        return 1;
    }
    return -1;
}

/**
 * Ritorna l'elemento dell'array alla posizione idx
 * Se obj non esiste ritorna null
 * Se obj non e' un array ma esiste ritorna l'oggetto stesso
 */
function getAt(obj, idx) {
    if (obj) { 
        if (obj.length) { 
            return obj[idx];
        }
        return obj;
    }
    return null;
}


//**********************************************************//
//    LOTTO 2                                                        //
//    controllaCodiceFiscale(field)- return true o false    //
//                                                            //
//    Funzione che controlla che il valore del campo del form //
//    HTML <field> sia un codice fiscale valido                //
//                                                            //
//**********************************************************//

function controllaCodiceFiscale(value)
{
    var nTempNum;
    var nAppoNum;
    var i;
    var szTempCodFisc;
    var szLastChar;
    var szValued;
    var szInValued;

    szCodFisc = value;

    if (szCodFisc.length<16) return false
    
    if (szCodFisc == "") 
        return false;
    else {
        szCodFisc =szCodFisc.toUpperCase();
        szLastChar = szCodFisc.substr(szCodFisc.length - 1,1);
        szTempCodFisc =szCodFisc.substr(0,szCodFisc.length - 1);
        nTempNum = 0;
        i = 0;

        while (true) {
            szValued="B1A0KKPPLLC2QQD3RRE4VVOOSSF5TTG6UUH7MMI8NNJ9WWZZYYXX";
            // I DISPARI
            szInValued=szTempCodFisc.substr(i,1);
            nAppoNum = szValued.search(szInValued);
            nTempNum = nTempNum + (nAppoNum &  0x7FFE) / 2;
            i = i + 1;
            if (i>15)
                break;
            szValued="A0B1C2D3E4F5G6H7I8J9KKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ";
            // I PARI
            szInValued=szTempCodFisc.substr(i,1);
            nAppoNum = szValued.search(szInValued);
            nTempNum =  nTempNum + (nAppoNum &  0x7FFE) / 2;
            i = i + 1;
        }
        nTempNum = nTempNum % 26; //mod
        szValued="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        szValued= szValued.substr(nTempNum, 1);
        if (szValued==szLastChar) return true;
        else return false;
    }
}
