//Elimina o sostituisce caratteri speciali in INPUT - utilizzabile su onKeyPress
function IsOKChar() {

  switch (event.keyCode) {            // Carattere premuto
  case 34:           // Sostituisce Doppi Apici con `
    window.event.keyCode = 96;
    break;
  case 39:           // Sostituisce Apice singolo con `
    window.event.keyCode = 96;
    break;
  case 10:           // Sostituisce LF con Spazio
    window.event.keyCode = 32;
    break;
  case 13:           // Sostituisce CR con Spazio
    window.event.keyCode = 32;
    break;
  }
}

//Sostituisce in una stringa una sottostringa con un'altra
function replaceChars(entry, out_char, in_char) {

  temp = "" + entry; // Temporanea

  while (temp.indexOf(out_char) > -1) {
    pos = temp.indexOf(out_char);
    temp = "" + (temp.substring(0, pos) + in_char + temp.substring((pos + out_char.length), temp.length));
  }

  return temp;
}


function Scrivi(Testo) {
	document.write(URLDecode(Testo));
}

function IsDigit() {
	//Valori Ammessi 0123456789.,-
	return (((event.keyCode >= 48) && (event.keyCode <= 57)) || ((event.keyCode >= 44) && (event.keyCode <= 46)))
}

function IsAlfaNum() {
	//Valori Ammessi 0123456789[A-Z][a-z]
	return (((event.keyCode >= 48) && (event.keyCode <= 57)) || ((event.keyCode >= 65) && (event.keyCode <= 90)) || ((event.keyCode >= 97) && (event.keyCode <= 122)))
}

//equivalente funz. trim vb
function trim(value){
	var tmp=value;
	while (tmp.indexOf(" ",0) != -1) {
		if (tmp.indexOf(" ",0) != 0) break;
		if (tmp.indexOf(" ",0) == 0) {
			tmp = tmp.substr(1);
		}
	}
	while (tmp.indexOf(" ",tmp.length-1) != -1) {
		if (tmp.indexOf(" ",tmp.length-1) == tmp.length-1){
				tmp = tmp.substr(0,tmp.length-1);
		}
	}
	return tmp;
}

function campoAlfanumerico(item){
	var strRicerca = new RegExp("[^0-9a-zA-Z\+-_àèéìòù ]","g");
	var strRicerca2 = new RegExp("['<>=.;:?/^\]","g");
	var strRicerca3;
	strRicerca3= "\\";
	if ((item.search(strRicerca) != -1)||(item.search(strRicerca2)!= -1)||(item.indexOf(strRicerca3,1)!= -1))	return false;
	return true;
}

function campoAlfabetico(item){
	var strRicerca = new RegExp("[^a-zA-Z'àèéìòù ]","g");
	var strRicerca2 = new RegExp("[<>=.;:?/^\]","g");
	var strRicerca3;
	strRicerca3= "\\";
	if ((item.search(strRicerca) != -1)||(item.search(strRicerca2)!= -1)||(item.indexOf(strRicerca3,1)!= -1))	return false;
	return true;
}

//restituisce true se il value è numerico
function isValidNumber(item) {
	if (isNaN(item) == true) return false; 
	return true;
}

//restituisce true se il value è un ind. e-mail valido,
function isValidEmail(item) {
	var pos; var pos1
	var strTmp;

	if (item.length < 6) return false;
	if (item.indexOf ('@', 0) == -1) return false;
	pos = item.indexOf('@');
	if (item.indexOf ('.', 0) < 1) return false;
	if (item.indexOf ('@', pos + 1) >= 0) return false;
	strTmp =  new RegExp("[^0-9a-zA-Z\+-_]","g");//caratteri possibili
	if(strTmp.test(item) == true)   return false;
	pos1 = item.indexOf('.');
	strTmp = item.substring(0,pos);//nome
	if (strTmp.length < 2) return false;
	if (item.substring(pos + 1).length > 63) return false;//max cons. x dominio.est
	strTmp = item.substring(pos + 1, pos1);//provider
	if (strTmp.length < 2) return false;
	strTmp = item.substring(pos1+1);//estensione
	if (strTmp.length < 2) return false;
	return true;
}

//restituisce true se il value è una data valida
function isValidDate(gg, mm, aaaa){
	var inizioSecolo;
	var DayCompare;
	var month = new Array();
	//day x month
	month[1] = 31;//gen
	month[2] = 28;//feb
	month[3] = 31;//mar
	month[4] = 30;//apr
	month[5] = 31;//mag
	month[6] = 30;//giu
	month[7] = 31;//lug
	month[8] = 31;//ago
	month[9] = 30;//sett
	month[10] = 31;//ott
	month[11] = 30;//nov
	month[12] = 31;//dic
	
	//formattazione nel caso il num di cifre è min.
	if ((isNaN(gg))||(isNaN(mm))||(isNaN(aaaa))) return false;
	if (gg.length == 1) gg = "0" + gg;
	if (mm.length == 1) mm = "0" + mm;
	switch (aaaa.length) {//cifre anno
		case 1:
			aaaa = "200" + aaaa;
			break;
		case 2:
			if (parseInt(aaaa) < 50)
				aaaa = "20" + aaaa;
			else
				aaaa = "19" + aaaa;
			break;
		case 3:
			if (parseInt(aaaa) < 50)
				aaaa = "2" + aaaa;
			else
				aaaa = "1" + aaaa;
			break;
	}
	//fine formattazione
	
	inizioSecolo=aaaa.substr(aaaa.length-2,2);
	if (inizioSecolo=="00")
		inizioSecolo=true;
	else
		inizioSecolo=false;
		
	if ((gg.length != 2)||(mm.length != 2)||(aaaa.length != 4)) return false;
	
	//controlli num. :
	
	if ((gg.length==2) && (gg.substr(0,1)=="0"))
		{
			gg=gg.substr(1,1);
		}
	if ((mm.length==2) && (mm.substr(0,1)=="0"))
		{
			mm=mm.substr(1,1);
		}
	gg = parseInt(gg);		
	mm = parseInt(mm); 
	aaaa = parseInt(aaaa);
	if ((mm > 12)||(mm <= 0)) return false;

	DayCompare = month[mm];
	//contr. bisestile
	if (mm == 2) { //se il mese è febbraio
		if (inizioSecolo) { //se è l'anno di inizio secolo
			if (((aaaa % 400) == 0) && (mm == 2))	DayCompare = 29;
		}else{
			if ((aaaa % 4) == 0)	DayCompare = 29; //anno bisestile
		}
	}//fine bisestile
	if ((gg > DayCompare)||(gg <= 0)) return false;//se il giorno supera il max consent. x mese
	if (aaaa <= 0) return false;
	if ((aaaa < 1900) || (aaaa > 2070)) return false;//intervallo consentito x l'anno
	return true;
}


function Mid(str, start, len)
/***
		IN: str - the string we are LEFTing
			start - our string's starting position (0 based!!)
			len - how many characters from start we want to get

		RETVAL: The substring from start to start+len
***/
{
	// Make sure start and len are within proper bounds
	if (start < 0 || len < 0) return "";

	var iEnd, iLen = String(str).length;
	if (start + len > iLen)
			iEnd = iLen;
	else
			iEnd = start + len;

	return String(str).substring(start,iEnd);
}

// Verifica che un Periodo da dataInizio a dataFine sia valido
// ovvero che la data di Inizio sia <= della data di Fine
// Le date devono essere nel formato gg/mm/aaaa.
function isValidPeriod(dataInizio, dataFine) {

if ((dataInizio != "") && (dataFine != "")) {
  var aI = Mid(dataInizio,6,4);
  var mI = Mid(dataInizio,3,2);
  var gI = Mid(dataInizio,0,2);
  var aF = Mid(dataFine,6,4);
  var mF = Mid(dataFine,3,2);
  var gF = Mid(dataFine,0,2);

  var dI = aI + mI + gI;
  var dF = aF + mF + gF;

  if (dI <= dF) 
    {return true;} 
  else
    {return false;}
} else
  {return true;} 
}

//restituisce l'estensione di NomeFile
function Estensione(NomeFile){

var vett = new Array();
var indice;
var ris = "";

if (NomeFile.length==0){return ris;}

vett = NomeFile.split(".");
indice = vett.length;
ris = vett[indice -1].toUpperCase( );

return ris;

}

//restituisce l'opposto della UrlEncode
function URLDecode(Stringa)
{
  // Replace + with ' '
  // Replace %xx with equivalent character
  var encoded = Stringa;
  var plaintext = "";
  var i = 0;
  while (i < (encoded.length-2)) {
      var ch = encoded.charAt(i);
       if (ch == "+") {
           plaintext += " ";
            i++;
       } else if (ch == "%" && encoded.charAt(i+1) != "%") {
           plaintext += unescape( encoded.substr(i,3) );
            i += 3;
         } else {
            plaintext += ch;
            i++;
         }
    } // while
    if (i < encoded.length) {
        plaintext += encoded.substr(i,encoded.length-i);
    }
  return unescape(plaintext);
}

// Aggiunge un nuovo valore ad un controllo e lo imposta come SELEZIONATO
function newOption(controllo, $maxLen) {

  var temp = new Option();
  var msg = "Inserisci il nuovo valore: ";
  var lng = 0;

  if (($maxLen != null) && (isValidNumber($maxLen))) {
    lng = $maxLen;
    msg = msg + "(Massimo " + $maxLen + " caratteri)";
  }

  var nuova = window.prompt(msg, "");

  if ((nuova!="") && (nuova!=null)) {

    if (lng > 0) nuova = Mid(nuova, 0, lng);

    var regexp = /\"|\'/g;   // Espressione reg. per cercare " e ' in modo globale
    nuova = nuova.replace(regexp, "`");

    temp.value=nuova;
    temp.text=nuova;
    temp.selected=true;

    controllo[controllo.length]=temp;
  }
}


// Formatta i campi in base al tipo
function formatta(Controllo, Tipo, Decimali, Operazione) {
/*
Controllo  --> Campo da Formattare
Tipo       --> Tipo di Formattazione
Decimali   --> Numero di Caratteri Decimali Ammessi
Operazione --> true  = Visualizza Formattazione
               false = Non Visualizzare Formattazione  
*/

var valRet;

	switch(Tipo) 
	{
		case("General Number"):
		  if (Operazione == true) 
        {valRet = formatCurrency(Controllo, false, Decimali,'','');
        if (valRet == '-') 
          {return (false);}
        else 
          {Controllo.value = valRet;
          return (true);}}
      else 
        {Controllo.value = noFormatCurrency(Controllo)}
		  break

		case("Valuta"): 
		  if (Operazione == true)
        {valRet = formatCurrency(Controllo, true, Decimali,'\u20AC'+' ','');
        if (valRet == '-') 
          {return (false);}
        else 
          {Controllo.value = valRet;
          return (true);}}
       else 
        {Controllo.value = noFormatCurrency(Controllo)}
		  break

		case("Euro"): 
		  if (Operazione == true)
			 {valRet = formatCurrency(Controllo, true, Decimali,'\u20AC'+' ','');
        if (valRet == '-') 
          {return (false);}
        else 
          {Controllo.value = valRet;
          return (true);}}
		  else
			 {Controllo.value = noFormatCurrency(Controllo)}
		  break

		case("Fixed"): 
		  if (Operazione == true)
			 {valRet = formatCurrency(Controllo, false, Decimali,'','');
        if (valRet == '-') 
          {return (false);}
        else 
          {Controllo.value = valRet;
          return (true);}}
		  else
			 {Controllo.value = noFormatCurrency(Controllo)}
		  break

		case("Standard"): 
		  if (Operazione == true)
			 {valRet = formatCurrency(Controllo, true, Decimali,'','');
        if (valRet == '-') 
          {return (false);}
        else 
          {Controllo.value = valRet;
          return (true);}}
		  else
			 {Controllo.value = noFormatCurrency(Controllo)}
		  break

		case("Percent"): 
		  if (Operazione == true)
			 {valRet = formatCurrency(Controllo, false, Decimali,'','%');
        if (valRet == '-') 
          {return (false);}
        else 
          {Controllo.value = valRet;
          return (true);}}
		  else
			 {Controllo.value = noFormatCurrency(Controllo)}
		  break

		case("Scientific"): 
		  if (Operazione == true)
			 {valRet = formatCurrency(Controllo, false, Decimali,'','');
        if (valRet == '-') 
          {return (false);}
        else 
          {Controllo.value = valRet;
          return (true);}}
		  else
			 {Controllo.value = noFormatCurrency(Controllo)}	
		  break

		case("General Date"): 
		  break

		case("Long Date"): 
		  break

		case("Medium Date"): 
		  break

		case("Short Date"): 
		  break

		case("Long Time"): 
		  break

		case("Medium Time"): 
		  break

		case("Short Time"): 
		  break

		default:
		  break
	}
}

//Formattazione 
function formatCurrency(Controllo, Separatore, MaxDecimali, SimboloPrima, SimboloDopo) {
// Controllo    = Nome Controllo da Formattare
// Separatore   = true/false per separatore di migliaia
// SimboloPrima = Es. "€" 
// SimboloDopo  = Es. "%"

num = Controllo.value
var sep='';
if (Separatore) {sep='.';}

num1 = num;
num = num.toString().replace(/\|\./g,'');
num = num.toString().replace(/\,/g,'.');
if(isNaN(num))
	{Controllo.focus();
	 alert ("Il campo non e' un numero valido!");
	 return (num1);}

num = num.toString().replace(/\./g,',');

dp=num.indexOf(",")!=-1?num.substring(0,num.indexOf(",")).length:num.length;

//Controllo Numero di Cifre Decimali
if (MaxDecimali > 0 && num != "")	{
	var VetDec = num.split(",");
	if (VetDec.length==2)
	   {if (VetDec[1].length > MaxDecimali)
		   {Controllo.focus();
			alert ("Ammesse al massimo n." + MaxDecimali + " cifre decimali!");
			return (num1);}
		else
		   {for (i=VetDec[1].length; i<MaxDecimali;i++)
				num=num + "0";}
	   }
	else
		{num=num + ","
		 for (i=0; i<MaxDecimali;i++)
		   num=num + "0";
		 }
}
	
for (i=dp-3;i>0;i-=3)
    num=num.substring(0,i)+sep+num.substr(i);

num=num.replace(/-,/,"-");
return (SimboloPrima + num + SimboloDopo);

}


function noFormatCurrency(Controllo) {
	
	num = Controllo.value.toString()
	num = num.replace(/\./g,'');
	num = num.replace(/\€/g,'');
	num = num.replace(/\%/g,'');
	num = num.replace(/\$/g,'');
	num = num.replace(/\£/g,'');
	num = num.replace('\u20AC','');
	return (num);

}

function isValidCF(codiceFiscale, tipoCodice) {

	var posizioneCF = 0
	var sommaControllo = 0
	var carattereControllo = ""
	
	if (tipoCodice=="pi") {
		/* Si tratta di una azienda, quindi viene restituito se la lunghezza è 11 ed è un numero */
		return (codiceFiscale.length = 11 && !isNaN(codiceFiscale));
	} else {
		/* Si tratta di un codice fiscale, quindi viene calcolato il codice di controllo */
		for (posizioneCF = 0; posizioneCF < 15; posizioneCF++) {
			if (((posizioneCF + 1) % 2) != 0) {
				/* Carattere in posizione dispari */
				switch (codiceFiscale.charAt(posizioneCF)) {
					case "0": { sommaControllo += 1; break; }
					case "1": { sommaControllo += 0; break; }
					case "2": { sommaControllo += 5; break; }
					case "3": { sommaControllo += 7; break; }
					case "4": { sommaControllo += 9; break; }
					case "5": { sommaControllo += 13; break; }
					case "6": { sommaControllo += 15; break; }
					case "7": { sommaControllo += 17; break; }
					case "8": { sommaControllo += 19; break; }
					case "9": { sommaControllo += 21; break; }
					case "A": { sommaControllo += 1; break; }
					case "B": { sommaControllo += 0; break; }
					case "C": { sommaControllo += 5; break; }
					case "D": { sommaControllo += 7; break; }
					case "E": { sommaControllo += 9; break; }
					case "F": { sommaControllo += 13; break; }
					case "G": { sommaControllo += 15; break; }
					case "H": { sommaControllo += 17; break; }
					case "I": { sommaControllo += 19; break; }
					case "J": { sommaControllo += 21; break; }
					case "K": { sommaControllo += 2; break; }
					case "L": { sommaControllo += 4; break; }
					case "M": { sommaControllo += 18; break; }
					case "N": { sommaControllo += 20; break; }
					case "O": { sommaControllo += 11; break; }
					case "P": { sommaControllo += 3; break; }
					case "Q": { sommaControllo += 6; break; }
					case "R": { sommaControllo += 8; break; }
					case "S": { sommaControllo += 12; break; }
					case "T": { sommaControllo += 14; break; }
					case "U": { sommaControllo += 16; break; }
					case "V": { sommaControllo += 10; break; }
					case "W": { sommaControllo += 22; break; }
					case "X": { sommaControllo += 25; break; }
					case "Y": { sommaControllo += 24; break; }
					case "Z": { sommaControllo += 23; break; }
				}
			} else {
				/* Carattere in posizione pari */
				switch (codiceFiscale.charAt(posizioneCF)) {
					case "0": { sommaControllo += 0; break; }
					case "1": { sommaControllo += 1; break; }
					case "2": { sommaControllo += 2; break; }
					case "3": { sommaControllo += 3; break; }
					case "4": { sommaControllo += 4; break; }
					case "5": { sommaControllo += 5; break; }
					case "6": { sommaControllo += 6; break; }
					case "7": { sommaControllo += 7; break; }
					case "8": { sommaControllo += 8; break; }
					case "9": { sommaControllo += 9; break; }
					case "A": { sommaControllo += 0; break; }
					case "B": { sommaControllo += 1; break; }
					case "C": { sommaControllo += 2; break; }
					case "D": { sommaControllo += 3; break; }
					case "E": { sommaControllo += 4; break; }
					case "F": { sommaControllo += 5; break; }
					case "G": { sommaControllo += 6; break; }
					case "H": { sommaControllo += 7; break; }
					case "I": { sommaControllo += 8; break; }
					case "J": { sommaControllo += 9; break; }
					case "K": { sommaControllo += 10; break; }
					case "L": { sommaControllo += 11; break; }
					case "M": { sommaControllo += 12; break; }
					case "N": { sommaControllo += 13; break; }
					case "O": { sommaControllo += 14; break; }
					case "P": { sommaControllo += 15; break; }
					case "Q": { sommaControllo += 16; break; }
					case "R": { sommaControllo += 17; break; }
					case "S": { sommaControllo += 18; break; }
					case "T": { sommaControllo += 19; break; }
					case "U": { sommaControllo += 20; break; }
					case "V": { sommaControllo += 21; break; }
					case "W": { sommaControllo += 22; break; }
					case "X": { sommaControllo += 23; break; }
					case "Y": { sommaControllo += 24; break; }
					case "Z": { sommaControllo += 25; break; }
				}
			}
		}
		/* Somma di controllo modulo 26, calcolo lettera */
		sommaControllo %= 26
		switch (sommaControllo) {
			case 0: { carattereControllo = "A"; break; }
			case 1: { carattereControllo = "B"; break; }
			case 2: { carattereControllo = "C"; break; }
			case 3: { carattereControllo = "D"; break; }
			case 4: { carattereControllo = "E"; break; }
			case 5: { carattereControllo = "F"; break; }
			case 6: { carattereControllo = "G"; break; }
			case 7: { carattereControllo = "H"; break; }
			case 8: { carattereControllo = "I"; break; }
			case 9: { carattereControllo = "J"; break; }
			case 10: { carattereControllo = "K"; break; }
			case 11: { carattereControllo = "L"; break; }
			case 12: { carattereControllo = "M"; break; }
			case 13: { carattereControllo = "N"; break; }
			case 14: { carattereControllo = "O"; break; }
			case 15: { carattereControllo = "P"; break; }
			case 16: { carattereControllo = "Q"; break; }
			case 17: { carattereControllo = "R"; break; }
			case 18: { carattereControllo = "S"; break; }
			case 19: { carattereControllo = "T"; break; }
			case 20: { carattereControllo = "U"; break; }
			case 21: { carattereControllo = "V"; break; }
			case 22: { carattereControllo = "W"; break; }
			case 23: { carattereControllo = "X"; break; }
			case 24: { carattereControllo = "Y"; break; }
			case 25: { carattereControllo = "Z"; break; }
		}
		return (codiceFiscale.charAt(codiceFiscale.length - 1) == carattereControllo)
	}
}
