// ---------------------------------------------------------------------------
// Rimuove un elemento dalla querystring dell'attributo action di una form
// 17/09/2008 - Marco Crozzoli
// ---------------------------------------------------------------------------
function RemoveItemFromQueryString(itemValue)
{
    var pos1 = document.forms[0].action.indexOf("?");
    if( pos1 != -1)
    {
        var splitted = document.forms[0].action.substr(pos1+1).split("&");
        var qs = "";
        for (i in splitted){
            if(splitted[i] != itemValue)
                qs += qs != "" ? "&" + splitted[i] : splitted[i];
        }
        document.forms[0].action = document.forms[0].action.substr(0,pos1+1) + qs;
    }
}

//******************************************
//fCheckFormat(obj, format)
//******************************************
function fCheckFormat( el, form ){
  var rc = true;
	errmsg = new String("");
  var TbcObj;
  if (null != form){
		switch(form){
			case "date":{
				rc = formatDate(0,el);
				if(!rc)
					errmsg += "Data non corretta: "+ el.value;
				break;
			}
			case "time":{
				rc = formatTime(2,el);
				if(!rc)
					errmsg += "Orario non corretto: "+ el.value;
				break;
			}
			case "times":{
				rc = formatTime(0,el);
				if(!rc)
					errmsg += "Orario non corretto: "+ el.value;
				break;
			}
			case "dateold":{
				rc = formatDate(1,el);
				if(!rc)
					errmsg += "Data non corretta: "+ el.value;
				break;
			}
			case "number":{
				rc = formatNumber(el);
				if(rc==false && el.value != ""){
			      errmsg += "Numero non corretto " + el.value;
				}
				break;
			}
			case "numberF":{
				rc = formatNumberFloat(el);
				if(rc==false && el.value != ""){
			      errmsg += "Numero non corretto " + el.value;
				}				
				break;
			}
			case "iban":{
				rc = formatIban(el);
				break;
			}
			case "piva":{
				rc = formatPIVA(el);
				break;
			}
			case "codfisc":{
				rc = VerificaCodFiscale(el);
				break;
			}
			case "ucase":{
				rc = formatUCase(el);
				break;
			}
			case "lcase":{
				rc = formatLCase(el);
				break;
			}
			case "mail":{
				rc = validemail(el);
			      break;		
			}
			case "alphabetical":{
				rc = validateLetter(el);
				if(rc==false && el.value != ""){
			      errmsg += "Sono ammessi solo caratteri non numerici " + el.value;
			      }	
			      break;		
			}

		}	
	}
    if ( errmsg != ""){
		alert("Errore: " + errmsg);
	}
  return rc;
}

function validateLetter(el){
	var reg = /^([^0-9])+$/;
	if (reg.test(el.value) == true ) { //ok
		return true;
	}
	return false;
}

function validateNumber(el){
	var indate = el;
	var outdate = "";
	var rc = true;
	if(indate>=0)
		rc=true;
	else
		rc=false;
	return rc;
}

//***
//  formatUCase()
//**
function formatUCase(el){
  var rc = true;

  el.value = el.value.toUpperCase();
  return ( rc );
}

//***
//  formatLCase()
//
//**
function formatLCase(el){
  var rc = true;

  el.value = el.value.toLowerCase();
  return ( rc );
}

//***
//  formatTime()
//  Parameters
//  - tipaa : 0 per 12H
//            1 per 24H
//            2 24H senza secondi
//**  el:
function formatTime(tipaa,el) {
  var rc = true;
  var indate = el.value;
  var outtime = "";
  

  if( indate == "" )
		return rc;
  i = 0;

  hh = getTimeItem( indate, "hh");
  rc = validateNumber(parseInt(hh, "10"));
  if (rc==false)
      return rc;
  if (hh.charAt(1) == ""){
		hh="0" + hh;
  }
  locnum = parseInt(hh, "10");
  if( locnum < 0 || locnum > 24 ) {
	rc = false;
	return rc;
  }
  outtime += hh + ":";

  mm = getTimeItem( indate, "mm");
  rc = validateNumber(parseInt(mm, "10"));
  if (rc==false)
      return rc;
  if (mm == "")
	  mm = "00";
  if (mm.charAt(1) == "")
    mm="0" + mm;
  locnum = parseInt(mm, "10");
  if( locnum < 0 || locnum > 60 ){
    rc = false;
	return rc;
  }
  outtime += mm;

  if(tipaa != 2){
	  outtime += ":";
		ss = getTimeItem( indate, "ss");
		rc = validateNumber(parseInt(ss, "10"));
		if (rc==false)
		    return rc;
		if (ss == "")
			ss = "00";
		locnum = parseInt(ss, "10");
		if( locnum < 0 || locnum >= 60 ){
			rc = false;
			return rc;
		}
		outtime += ss;
	}
  el.value = outtime;
  return rc;
}

//***
//  getTimeItem()
//
//  Legge ora minuti secondi da una stringa di tipo orario e ritorna
//  l'item formattato
//
//  Parameters
//  - strTime : time
//  - tipdate : "hh", "mm", "ss"
//
//**
function getTimeItem( strTime, tipdate ) {
  var dtchar = "";
  var tmpchar = "";
  var maxlen;
  var start = 0;
  var slash = 0;
  var nums = 0;
  var numc = 0;
  var i;
  switch( tipdate ){
		case "hh":
			maxlen = 2;
      break
    case "mm":
      maxlen = 2;
      start = 2;
      slash = 1;
      break
   case "ss":
      maxlen = 2;
      start = 4;
      slash = 2;
      break
	}

  i = 0;
  nums = 0;
  numc = 0;
	while( numc < start && nums < slash ){
		tmpchar = strTime.charAt(i);
    if( tmpchar == ":" )
			nums++;
    else
			numc++;
    i++;
  }
  if( strTime.charAt(i) == ":" )
		i++;
		start = i;
  while( i < (maxlen + start) && strTime.charAt(i) != ":" ) {
		dtchar += strTime.charAt(i);
    i++;
  }
  return dtchar;
}

//***
//  formatDate()
//  Parameters
//  - tipaa : 0 per date attuali
//            1 per date di nascita
//**  el:
function formatDate(tipaa,el) {
  var indate = el.value;
  var outdate = "";
  var dd, mm, yy;
  var locnum;
  var rc = true;

  if( indate == "" )
	  return rc;
	
	//ctrl che sia data valida
	if( !isNumber( indate))
		return false;
	
	i = 0;
  dd = getDateItem( indate, "dd");
  rc = validateNumber(parseInt(dd, "10"));
  if (rc==false)
      return rc;
  if (dd.charAt(1) == ""){
		dd="0" + dd;
  }

  locnum = parseInt(dd, "10");
  if( locnum < 1 || locnum > 31 ) {
	  rc = false;
	  return rc;
  }
  outdate += dd + "/";

  mm = getDateItem( indate, "mm");
  rc = validateNumber(parseInt(mm, "10"));
  if (rc==false)
      return rc;
  if (mm.charAt(1) == "")
    mm="0" + mm;
  locnum = parseInt(mm, "10");
  if( locnum < 1 || locnum > 12 ){
		rc = false;
		return rc;
  }
  outdate += mm + "/";
  if (tipaa == 0){
		yy = getDateItem( indate, "yy");
  }
  else{
	  yy = getDateItem( indate, "yn");
  }
  rc = validateNumber(parseInt(yy, "10"));
  if (rc==false)
      return rc;
  if (yy == "")
	  yy = "0000";
  locnum = parseInt(yy, "10");
  if( locnum == 0 ){
		rc = false;
		return rc;
  }
  outdate += yy;
  el.value = outdate;
  return rc;
}

//***
//  getDateItem()
//
//  Legge giorno mese anno da una stringa di tipo data e ritorna
//  l'item formattato
//
//  Parameters
//  - strDate : data
//  - tipdate : "dd", "mm", "yy", "yn"
//    anche "yn" per individuare date di nascita
//
//**
function getDateItem( strDate, tipdate ) {
   var dtchar = "";
   var tmpchar = "";
   var maxlen;
   var start = 0;
   var slash = 0;
   var nums = 0;
   var numc = 0;
   var i;
   switch( tipdate ){
      case "dd":
         maxlen = 2;
         break

      case "mm":
         maxlen = 2;
         start = 2;
         slash = 1;
         break

      case "yy":
      case "yn":
         maxlen = 4;
         start = 4;
         slash = 2;
         break
   }

   i = 0;
   nums = 0;
   numc = 0;
   while( numc < start && nums < slash ){
      tmpchar = strDate.charAt(i);
      if( tmpchar == "/" )
         nums++;
      else
         numc++;

      i++;
   }
   if( strDate.charAt(i) == "/" )
      i++;
   start = i;
   while( i < (maxlen + start) && strDate.charAt(i) != "/" ) {
      dtchar += strDate.charAt(i);
      i++;
   }

   // per datensc si porta a formato aaaa in caso di digitazione incompleta
   // inserendo 190 o 19 o 1 per datensc se 1 o 2 o 3 caratteri
   if (( dtchar.length < maxlen ) && (tipdate == "yn" )){
      tmpchar = "";
      for( i = 0; i<  maxlen - dtchar.length; i ++ ){
         if(i == 0)
             tmpchar += "1";
         else if( i == 1)
             tmpchar += "9";
         else
             tmpchar += "0";
      }
      dtchar = tmpchar + dtchar;
    }

    // per date si porta a formato aaaa in caso di digitazione incompleta
    // inserendo 200 o (20 o 19) o (2 o 1) per datensc se 1 o 2 (90) o 3 (100) caratteri
    if( tipdate == "yy" && dtchar.length < 4 && dtchar!=""){
    	switch( dtchar.length ){
      		case 1:
			      tmpchar = "200";
         	  break
      		case 2:
  			    if (dtchar < "50")
		            tmpchar = "20";
			    else
					tmpchar = "19";
      		break
      		case 3:
  			    //if (dtchar < "100")
				//	tmpchar = "2";
			    //else
					tmpchar = "1";
       		break
   		}
		  dtchar = tmpchar + dtchar;
    }
    return dtchar;
}

//***
//  formatNumber()
//  Filler con zeri in testa i campi numerici.
//**
function formatNumber(el){
	var indate =el.value;
	var outdate = "";
	var rc = true;

	if(indate>=0)
		rc=true;
	else
		rc=false;
	return rc;
}
//***
//  formatNumberFloat()
//  Per valori float
//**
function formatNumberFloat(el){

	var rc = true;
	el.value = el.value.replace(',','.');
	if(el.value>=0 || el.value<0){
		rc=true;}
	else
		rc=false;
	el.value = el.value.replace('.',',');
	return rc;
}

//***
//  isNumber()
//  Controllo che la data contenga cifre o /
//**
function isNumber(el){
	//se contiene almeno una lettera o car speciale -> non valido
	var reg1 = /([a-zA-Z]{1,}|(\-)|(\+)|(\*))/;
	if (!reg1.test(el) ) { //ok
		return true;
	}
	return false;
}

function validemail(el) {
  var str = el.value; // email string
  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
  var reg2 = /^[^&]+\@(\[?)[a-zA-Z0-9\-\_\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; // valid
  if (el.value.length == 0)
    return true;
  if (!reg1.test(str) && reg2.test(str)) { // if syntax is valid
    return true;
  }
  alert("\"" + str + "\" non e' un indirizzo e-mail valido!"); // this is also optional
  el.value = "";
  return false;
}

function formatIban(el){
if(el.value.length != 27) {
	alert("Il codice Iban deve essere di 27 caratteri.");
	return false;
}
	//i primi quattro caratteri alla fine 
	el.value = el.value.toUpperCase();

	s = el.value.substring(4)+ el.value.substring(0,4);	
for(i = 0, r= 0; i< s.length; i++) {
		//converto				
				c = s.charCodeAt(i);
				if (c >= 65 && c <=90) //lettere A-Z
				{
					if (i == s.length -2 || i == s.length -1)
					{
						alert("Posizioni 3 e 4 non possono contenere lettere.");
						return false;
					}
					k = c -55;
				}
				else if(c >=48 && c <= 57)// cifre 0-9
				{
					if(i == s.length -4 || i == s.length -3 )
					{
						alert("Posizioni 1 e 2 non possono contenere cifre.");
						return false;
					}
						k = c - 48;
				}
				//cumulo il resto della divisione
				if (k > 9) 
					r	 =(100*r+k)% 97;
				else
					r = (10 *r+k)% 97;
			}		
			if (r != 1){
				alert("Il codice di controllo IBAN risulta errato.");
				return false;
			}
else

	return true;
}

//15.10.2008 - Massimo F. - Modificato: se la lunghezza è 0 ritorna true
function formatPIVA(el){
    var somma = 0;
	if(el.value.length == 0) 
		return true;
    if (el.value == "00000000000")
    {
      alert("Partita iva non valida");
      return false;
    }    
    if(el.value.length != 11) {
        alert("La partita iva deve essere di 11 caratteri.");
        return false;
    }
    for(i = 0; i< el.value.length; i++) {
        var c = el.value.charCodeAt(i);  
        if(c <48 || c > 57)//se non sono cifre 0-9
        {
        	alert("la partita IVA deve contenere solo cifre.");
            return false;
        }
    }
    for(j = 0; j <= 9; j += 2) 
    {
        somma += parseInt(el.value.charAt(j));     
    }
    for(z = 1; z <= 9; z += 2) 
    {
         iTmp =  parseInt(el.value.charAt(z)) * 2;
        if(iTmp>9)
            iTmp -= 9;
        somma += iTmp;
    }
    if ((10 - somma % 10) % 10 !=  parseInt(el.value.charAt(10)))
    {
      alert("Partita iva non valida");
      return false;
    }
    errMsg = "";
    return true;
}


function CheckLen(oggetto,len,nome){
  var text=oggetto.value;
  if(text.length>len){
    alert('Il campo '+nome+' deve essere al massimo di '+len+' caratteri!');
    oggetto.value=text.substring(0,len-1);
  }
}
  
function ToUpper(oggetto)
{
    oggetto.value = oggetto.value.toUpperCase();
}
//Esegue il lower case di un controllo
function ToLower(Control) {
    Control.value = Control.value.toLowerCase();
}	

//***
//  VerificaCodFiscale()
//  Controlla la corettezza dell'codice fiscale passato in input
//**

function VerificaCodFiscale(el)
    {
        var somma = 0;
        var resto = 0;
        var CarContr=0;
        el.value = el.value.toUpperCase();
        if(el.value.length == 0) 
            return true;
        if(el.value.length != 16) {
	        alert("Il codice fiscale deve essere di 16 caratteri.");
	        return false;
        }
        for(j = 0; j <= 14; j += 2) 
        {            
            somma += RitornaCodiceDispari(el.value.charAt(j));
        }
        for(z = 1; z <= 14; z += 2) 
        {            
            somma += RitornaCodicePari(el.value.charAt(z));
        }
        resto = somma % 26;
        CarContr = RitornaCodicePari(el.value.charAt(15))
        if(CarContr == resto)
        {
            return true;
        }
        else
        {
            alert("Codice fiscale inesatto.");
            return false;
        }
    }
   function RitornaCodicePari(Car)
   {
            var c = Car.charCodeAt(0);
              
            if(c <48 || c > 57)//se non sono cifre 0-9
            {
               switch(Car){
			        case "A":{return 0;break;}
				    case "B":{return 1;break;}
				    case "C":{return 2;break;}
				    case "D":{return 3;break;}
				    case "E":{return 4;break;}
				    case "F":{return 5;break;}
				    case "G":{return 6;break;}
				    case "H":{return 7;break;}
				    case "I":{return 8;break;}
				    case "J":{return 9;break;}
				    case "K":{return 10;break;}
				    case "L":{return 11;break;}
				    case "M":{return 12;break;}
				    case "N":{return 13;break;}
				    case "O":{return 14;break;}
				    case "P":{return 15;break;}
				    case "Q":{return 16;break;}
				    case "R":{return 17;break;}
				    case "S":{return 18;break;}
				    case "T":{return 19;break;}
				    case "U":{return 20;break;}
				    case "V":{return 21;break;}
				    case "W":{return 22;break;}
				    case "X":{return 23;break;}
				    case "Y":{return 24;break;}
				    case "Z":{return 25;break;}
				    default:{return 0;break;}
			   }
            }
            else
            {//Se è una cifra ritorno questo valore
                return parseInt(Car);
            }
   }
   function RitornaCodiceDispari(Car)
   {
            var c = Car.charCodeAt(0);  
            if(c <48 || c > 57)//se non sono cifre 0-9
            {
               return CodiceContributo(RitornaCodicePari(Car));
            }
            else
            {
               return CodiceContributo(Car);
            }
            
   }
   function CodiceContributo(Val)
   {
         switch(Val.toString()){
			        case "0":{return 1;break;}
				    case "1":{return 0;break;}
				    case "2":{return 5;break;}
				    case "3":{return 7;break;}
				    case "4":{return 9;break;}
				    case "5":{return 13;break;}
				    case "6":{return 15;break;}
				    case "7":{return 17;break;}
				    case "8":{return 19;break;}
				    case "9":{return 21;break;}
				    case "10":{return 2;break;}
				    case "11":{return 4;break;}
				    case "12":{return 18;break;}
				    case "13":{return 20;break;}
				    case "14":{return 11;break;}
				    case "15":{return 3;break;}
				    case "16":{return 6;break;}
				    case "17":{return 8;break;}
				    case "18":{return 12;break;}
				    case "19":{return 14;break;}
				    case "20":{return 16;break;}
				    case "21":{return 10;break;}
				    case "22":{return 22;break;}
				    case "23":{return 25;break;}
				    case "24":{return 24;break;}
				    case "25":{return 23;break;}
				    default:{return 0;break;}
			   }
   }


//***
//  VerificaIBAN()
//  Controlla la corettezza dell'IBAN passato in input
//**

function VerificaIBAN(b) 
{ 
        if (b.length < 5) 
        { 
            alert("Errore: lunghezza minore di 5 caratteri."); 
            return false; 
        } 
        s = b.substring(4) + b.substring(0, 4); 
        for (i = 0, r = 0; i < s.length; i++ ) 
        { 
                c = s.charCodeAt(i); 
                if (48 <= c && c <= 57) 
                { 
                        if (i == s.length-4 || i == s.length-3) 
                        { 
                            alert("Errore: le posizioni 1 e 2 non possono contenere cifre."); 
                            return false; 
                        } 
                        k = c - 48; 
                } 
                else if (65 <= c && c <= 90) 
                { 
                        if (i == s.length-2 || i == s.length-1) 
                        { 
                            alert("Errore: le posizioni 3 e 4 non possono contenere lettere."); 
                            return false; 
                        } 
                        k = c - 55; 
                } 
                else 
                { 
                    alert("Errore: sono ammesse solo cifre e lettere maiuscole."); 
                    return false; 
                } 
                if (k > 9) 
                        r = (100 * r + k) % 97; 
                else 
                        r = (10 * r + k) % 97; 
        } 
        if (r != 1) 
        { 
            alert("Errore: codice di controllo errato."); 
            return false; 
        } 
        return true; 
}
  

//Limita la lunghezza massima del testo in un controllo textbox
function formatMaxLength(ctr, max){ 
    var textBox = document.getElementById(ctr.id);
  
    if (textBox.value.length >  max)  
        textBox.value = textBox.value.substring(0,max); 
}
//Verifica se è un numero
function IsNumeric(sText) {
    var ValidChars = "0123456789";
    var IsNumber = true;
    var Char;
    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}

