// ---------------------------------------------------------------------------
// 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;
    }
}

//Limita la lunghezza massima del testo in un controllo textbox
function MaxLength(ctr, max)
{ 
    var textBox = document.getElementById(ctr.id);
  
    if (textBox.value.length >  max)  
        textBox.value = textBox.value.substring(0,max); 
} 

function dateValidator(args)
{
    with (args)
    {
        match = Value.match(/^(\d\d)\D(\d\d)\D(\d{4})$/)
        if (!match) 
        { 
            IsValid = false;
            return;
        }
        Value = Value.replace(/\/|\-|/g,"");
        var y = parseInt(Value.substr(4, 4));
        var m = parseInt( Value.substr(2, 2).replace(/^0/g, ""));
        var d = parseInt(Value.substr(0, 2).replace(/^0/g, ""));
        var dt = new Date(y, m - 1, d);
        with (dt)
        {
            IsValid = ((getFullYear() == y) && (getMonth() == m - 1) && (getDate() == d)); 
        }
    }
}

function formatNumbers(ctr, numDecimali)
{
    var strNum = ctr.value.toString();
        
    var indicePunto = strNum.indexOf(".", 0);
    var indiceVirgola = strNum.indexOf(",", 0);
       
    if ( indiceVirgola != -1)
        strNum = strNum.replace(".","");
    else
        strNum = strNum.replace(".",",");
    
    if(numDecimali != null)
    {
        var str ="";
        var i = 0;
        while (i < numDecimali)
        {
            str = str + "0";
            i++;
        }
        if (strNum.indexOf(",",0) != -1)
            strNum = (strNum + str).substring(0, strNum.indexOf(",",0) + numDecimali + 1);
        else
            strNum = (strNum + "," + str).substring(0, (strNum + ",").indexOf(",",0) + numDecimali + 1);
        
    }
   
   ctr.value = strNum;
   
   if (strNum.indexOf(".", 0) != -1 ) // completare con i controlli
   {
       ctr.value = "";
       alert("NO");
   }
    
}
 
 
 
 
function fCheckDate(dddd){
	if(!(fCheckFormat(dddd,"dateold")))
	alert("Data errata "+ dddd.value);
}


//******************************************
//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;
}

//***
//  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");
  if (hh.charAt(1) == ""){
		hh="0" + hh;
  }
  locnum = parseInt(hh, "10");
  if( locnum < 0 || locnum > 24 ) {
		rc = false;
  }
  outtime += hh + ":";

  mm = getTimeItem( indate, "mm");
  if (mm == "")
	  mm = "00";
  if (mm.charAt(1) == "")
    mm="0" + mm;
  locnum = parseInt(mm, "10");
  if( locnum < 0 || locnum > 60 ){
    rc = false;
  }
  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");
  if (dd.charAt(1) == ""){
		dd="0" + dd;
  }

  locnum = parseInt(dd, "10");
  if( locnum < 1 || locnum > 31 ) {
	  rc = false;
  }
  outdate += dd + "/";

  mm = getDateItem( indate, "mm");
  if (mm == "")
		mm = "00";
  if (mm.charAt(1) == "")
    mm="0" + mm;
  locnum = parseInt(mm, "10");
  if( locnum < 1 || locnum > 12 ){
		rc = false;
  }
  outdate += mm + "/";
  if (tipaa == 0){
		yy = getDateItem( indate, "yy");
  }
  else{
	  yy = getDateItem( indate, "yn");
  }

  if (yy == "")
	  yy = "0000";
  locnum = parseInt(yy, "10");
  if( locnum == 0 ){
		rc = false;
  }
  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 < "90")
		            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 inVal =el.value;
	var rc = true;
	inVal = inVal.replace(',','.');
	if(inVal>=0){
		rc=true;}
	else
		rc=false;
	
	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
  if( str == "" )
	  return true;
  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
  var reg2 = /^[^&]+\@(\[?)[a-zA-Z0-9\-\_\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; // valid
  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;
}

function formatPIVA(el){
    if( el.value == "" )
	    return true;

    var somma = 0;
    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();
}

//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;
}

//***
//  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;}
		   }
}