var char_nome = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ' \t\r\n\f";
var char_indirizzo = "°()/.,-\ 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ' \t\r\n\f";
var char_email = "@.-_1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var char_completo = "\|!£$%&/()=?^*+[]@°#;:§€<>-_.,1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ' \t\r\n\f" + '"';
var char_numeri = "0123456789";
var char_telefono = "()0123456789+-./\ #";
var char_codice_fiscale ="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var char_valuta = "0123456789.,";
var char_password = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";


function controlla_combo(nomecampo,descrizionecampo) {
	if (nomecampo.selectedIndex==0) {
		if (descrizionecampo==null)
			alert("Selezionare un valore per il campo \"" + nomecampo.name + "\".")
		else
			alert("Selezionare un valore per il campo \"" + descrizionecampo + "\".")
		nomecampo.focus();
		return false;
	} else return true;
}

function controlla_campo(nomecampo,caratterivalidi,obbligatorio,descrizionecampo) {
	var checkOK = caratterivalidi;
	var checkStr = nomecampo.value;
	var allValid = true;
	if (nomecampo.value == "" && obbligatorio) {
		if (descrizionecampo==null)
			alert("Inserire un valore nel campo \"" + nomecampo.name + "\".")
		else
			alert("Inserire un valore nel campo \"" + descrizionecampo + "\".")
		nomecampo.focus();
		return false
	}
	for (i = 0; i < checkStr.length; i++) {
		ch = checkStr.charAt(i);
		for (j = 0; j < checkOK.length; j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length) {
				allValid = false;
				break
			}
	}
	if (!allValid) {
		if (descrizionecampo==null)
			alert("Caratteri non ammessi nel campo \"" + nomecampo.name + "\".")
		else
			alert("Caratteri non ammessi nel campo \"" + descrizionecampo + "\".")
		nomecampo.focus();
		return false
	}
	return true
}

function controlla_campo_intervallo(nomecampo,valoreminimo,valoremassimo,obbligatorio,descrizionecampo) {
	var checkOK = "0123456789";
	var checkStr = nomecampo.value;
	var allValid = true;
	if (nomecampo.value == "" && obbligatorio) {
		if (descrizionecampo==null)
			alert("Inserire un valore nel campo \"" + nomecampo.name + "\".")
		else
			alert("Inserire un valore nel campo \"" + descrizionecampo + "\".")
		nomecampo.focus();
    return false
	}
	for (i = 0; i < checkStr.length; i++) {
		ch = checkStr.charAt(i);
		for (j = 0; j < checkOK.length; j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length) {
				allValid = false;
				break
			}
	}
	if (!allValid) {
		if (descrizionecampo==null)
			alert("Caratteri non ammessi nel campo \"" + nomecampo.name + "\".")
		else
			alert("Caratteri non ammessi nel campo \"" + descrizionecampo + "\".")
		nomecampo.focus();
		return false
	}
	if ((checkStr < valoreminimo || checkStr > valoremassimo) && nomecampo.value != '') {
		if (descrizionecampo==null)
			alert("Il valore del campo \"" + nomecampo.name + "\" non è accettabile:\ninserire un valore compreso tra " + valoreminimo + " e " + valoremassimo + ".");
		else
			alert("Il valore del campo \"" + descrizionecampo + "\" non è accettabile:\ninserire un valore compreso tra " + valoreminimo + " e " + valoremassimo + ".");
		nomecampo.focus();
		return false
	}
	return true
}

function controlla_campo_lunghezza(nomecampo,caratterivalidi,lunghezza,obbligatorio,descrizionecampo) {
	var checkOK = caratterivalidi;
	var checkStr = nomecampo.value;
	var allValid = true;
	if (nomecampo.value == "" && obbligatorio) {
		if (descrizionecampo==null)
			alert("Inserire un valore nel campo \"" + nomecampo.name + "\".")
		else
			alert("Inserire un valore nel campo \"" + descrizionecampo + "\".")
		nomecampo.focus();
		return false
	}
	for (i = 0; i < checkStr.length; i++) {
		ch = checkStr.charAt(i);
		for (j = 0; j < checkOK.length; j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length) {
				allValid = false;
				break;
			}
	}
	if (!allValid) {
		if (descrizionecampo==null)
			alert("Caratteri non ammessi nel campo \"" + nomecampo.name + "\".")
		else
			alert("Caratteri non ammessi nel campo \"" + descrizionecampo + "\".")
		nomecampo.focus();
		return false
	}
	if (nomecampo.value.length != lunghezza && nomecampo.value != '') {
		if (descrizionecampo==null)
			alert("La lunghezza del campo \"" + nomecampo.name + "\" non è accettabile.")
		else
			alert("La lunghezza del campo \"" + descrizionecampo + "\" non è accettabile.")
		nomecampo.focus();
		return false
	}
	return true
}

function controlla_campo_carattere(nomecampo,caratterivalidi,carattereobbligatorio,obbligatorio,descrizionecampo) {
	var checkOK = caratterivalidi;
	var checkStr = nomecampo.value;
	var allValid = true;
	var allValidO = false;
	if (nomecampo.value == "" && obbligatorio) {
		if (descrizionecampo==null)
			alert("Inserire un valore nel campo \"" + nomecampo.name + "\".")
		else
			alert("Inserire un valore nel campo \"" + descrizionecampo + "\".")
		nomecampo.focus();
		return false
	}
	for (i = 0; i < checkStr.length; i++) {
		ch = checkStr.charAt(i);
		for (j = 0; j < checkOK.length; j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length) {
				allValid = false;
				break
			}
	}
	if (!allValid) {
		if (descrizionecampo==null)
			alert("Caratteri non ammessi nel campo \"" + nomecampo.name + "\".")
		else
			alert("Caratteri non ammessi nel campo \"" + descrizionecampo + "\".")
		nomecampo.focus();
		return false
	}
	for (i = 0; i < checkStr.length; i++) {
		if (checkStr.charAt(i) == carattereobbligatorio && nomecampo.value != "") {
			allValidO = true;
			break
			}
	}
	if (!allValidO && nomecampo.value != "") {
		if (descrizionecampo==null)
			alert("Il campo \"" + nomecampo.name + "\" non sembra essere valido.")
		else
			alert("Il campo \"" + descrizionecampo + "\" non sembra essere valido.")
		nomecampo.focus();
		return false
	}
	return true
}

function sostituisci(nomecampo,valoredacercare,valoredasostituire) {
	var checkStr = new String();
	checkStr = nomecampo.value;
	var nvolte;	
 	var i;	
	var nuovastr = new String();		
	var ch = new String();		
	for (i = 0; i < checkStr.length; i++) {
		ch = checkStr.charAt(i);
	    if (ch != valoredacercare)
			nuovastr = nuovastr + ch
        else
			nuovastr = nuovastr + valoredasostituire
	}
	return (nuovastr);
}

function sostituiscistringa(stringainput,valoredacercare,valoredasostituire) {
	checkStr = stringainput;
	var nvolte;	
 	var i;	
	var nuovastr = new String();		
	var ch = new String();		
	for (i = 0; i < checkStr.length; i++) {
		ch = checkStr.charAt(i);
	    if (ch != valoredacercare)
			nuovastr = nuovastr + ch
        else
			nuovastr = nuovastr + valoredasostituire
	}
	return (nuovastr);
}

function controlla_valuta(nomecampo,moneta,min,max,obbligatorio,nonzero,descrizionecampo) {
//si aspetta una valuta in lire da controllare
	var checkOK = char_valuta;
	var checkStr = nomecampo.value;
	var allValid = true;
	var decPoints = 0;
	var allNum = "";
	var valore;
	if (nomecampo.value == "" && obbligatorio) {
		if (descrizionecampo==null)
			alert("Inserire un valore nel campo \"" + nomecampo.name + "\".")
		else
		    alert("Inserire un valore nel campo \"" + descrizionecampo + "\".")
	    nomecampo.focus();
	    return false
	}
	if (nomecampo.value == 0 && nonzero) {
		if (descrizionecampo==null)
			alert("Il valore contenuto nel campo \"" + nomecampo.name + "\" deve essere maggiore di zero.")
		else
			alert("Il valore contenuto nel campo \"" + descrizionecampo + "\" deve essere maggiore di zero.")
	    nomecampo.focus();
	    return false
	}
	for (i = 0; i < checkStr.length; i++) {
		ch = checkStr.charAt(i);
	    for (j = 0;  j < checkOK.length;  j++) {
			if (checkStr.charCodeAt(i) - checkOK.charCodeAt(j) == 0) {
				break;
			}
		}
		if (j == checkOK.length) {
			if ((ch!=".") || (((checkStr.length-i)%4)==0)) {
				allValid = false;
				break;
			}
		}
		allNum += ch;
	}
	if (!allValid) {
		if (descrizionecampo==null)
			alert("Il formato della cifra nel campo \"" + nomecampo.name + "\" non è corretto.")
		else
		    alert("Il formato della cifra nel campo \"" + descrizionecampo + "\" non è corretto.")
		nomecampo.focus();
		return false
	}
	stringaPulita = togli_punti_e_virgole(nomecampo.value);
	if((stringaPulita.length)>0)
		valore= stringaPulita;
	else
		valore=0
	if ((moneta==2) || (moneta=="euro") || (moneta=="EURO") || (moneta=="'Euro")) { /* ----- EURO ----- */
		valore=valore*1936.27
	}
	if (!(valore>=min) || !(valore<=max)) {
		if (descrizionecampo==null)
			alert("Il valore specificato nel campo \"" + nomecampo.name + "\" non è ammissibile.")
		else
			alert("Il valore specificato nel campo \"" + descrizionecampo + "\" non è ammissibile.")
		nomecampo.focus();
		return false
	}
	return true
}

function controlla_radio(nomecampo,descrizionecampo) {
	var radioSelected = false;
	for (i = 0; i < nomecampo.length; i++) {
		if (nomecampo[i].checked)
			radioSelected = true
	}
	if (!radioSelected) {
		if (descrizionecampo==null)
			alert("Effettuare una selezione per il campo \"" + nomecampo.name + "\".");
		else
			alert("Effettuare una selezione per il campo \"" + descrizionecampo + "\".");
	    nomecampo[0].focus();
	    return false
	}
	return true
}

function controlla_separatori_migliaia() 
{
	var flag = 0;
	for (var i = 0; i < arguments.length; i += 2)
		{
			var result = arguments[i].match(/[^.\d]|[.]+\d{4,}[.]+|[.]\d{0,2}[.]|[.]\d{0,2}$|[.]\d{4,}$/gi);
				if(result!=null)
					{
					alert("PrestitiOnline\n\n Controllare che in "+arguments[i+1]+", i valori immessi siano dei numeri consistenti:\n\n" +
							"- non sono ammessi numeri decimali\n" +
							"- usare il SOLO punto (facoltativo) per raggruppare le migliaia\n" +
							"- non inserire caratteri che non siano delle cifre.\n\n");
					return false;
					}	
		}
return true;
}

function controlla_percentuali() {
	var flag = 0;
	for (var i = 0; i < arguments.length; i+=2)
		{
			var result = arguments[i].match(/\d*[.,]{2,}\d*|[%]|\d*[a-zA-z]|\d*[.,]\d{1,}[.,%]\d*/g);
				if(result != null)
					{
					alert("Attenzione\n\nControllare che per i tassi di interesse, i valori immessi siano dei numeri consistenti:\n\n" +
							"- non inserire il simbolo \"%\"\n" +
							"- usare la virgola o il punto per dividere i decimali\n" +
							"- non inserire caratteri che non siano delle cifre.\n\n");
					return false;
					}	
		}
return true;
}

function campo_vuoto(campo) {
	if (campo.value=="" || campo.value==null)
		return true;
	else
		return false;
}

function togli_punti_e_virgole(str) {
//toglie punti e virgole dalla stringa data.
	str = sostituiscistringa(str,".","");
	str = sostituiscistringa(str,",","");
	return str;
}

function controlla_email(nomecampo) {
	var emailStr = nomecampo.value;
	
	/* The following variable tells the rest of the function whether or not
	to verify that the address ends in a two-letter country or well-known
	TLD.  1 means check it, 0 means don't. */

	var checkTLD=1;

	/* The following is the list of known TLDs that an e-mail address must end with. */

	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

	/* The following pattern is used to check if the entered e-mail address
	fits the user@domain format.  It also is used to separate the username
	from the domain. */

	var emailPat=/^(.+)@(.+)$/;

	/* The following string represents the pattern for matching all special
	characters.  We don't want to allow special characters in the address. 
	These characters include ( ) < ' > @ , ; : \ " . [ ] */

	var specialChars="\\(\\)><@',;:\\\\\\\"\\.\\[\\]";

	/* The following string represents the range of characters allowed in a 
	username or domainname.  It really states which chars aren't allowed.*/

	var validChars="\[^\\s" + specialChars + "\]";

	/* The following pattern applies if the "user" is a quoted string (in
	which case, there are no rules about which characters are allowed
	and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	is a legal e-mail address. */

	var quotedUser="(\"[^\"]*\")";

	/* The following pattern applies for domains that are IP addresses,
	rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	e-mail address. NOTE: The square brackets are required. */

	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

	/* The following string represents an atom (basically a series of non-special characters.) */

	var atom=validChars + '+';

	/* The following string represents one word in the typical username.
	For example, in john.doe@somewhere.com, john and doe are words.
	Basically, a word is either an atom or quoted string. */

	var word="(" + atom + "|" + quotedUser + ")";

	// The following pattern describes the structure of the user

	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

	/* The following pattern describes the structure of a normal symbolic
	domain, as opposed to ipDomainPat, shown above. */

	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	/* Finally, let's start trying to figure out if the supplied address is valid. */

	/* Begin with the coarse pattern to simply break up user@domain into
	different pieces that are easy to analyze. */

	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) {

	/* Too many/few @'s or something; basically, this address doesn't
	even fit the general mould of a valid e-mail address. */

	nomecampo.focus();
	alert("E' necessario inserire un indirizzo e-mail corretto (controllare @ e i punti) per poter procedere.");
	return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];

	// Start by checking that only basic ASCII characters are in the strings (0-127).

	for (i=0; i<user.length; i++) {
	if (user.charCodeAt(i)>127) {
	nomecampo.focus();
	alert("Il nome utente dell'email contiene dei caratteri scorretti.");
	return false;
	   }
	}
	for (i=0; i<domain.length; i++) {
	if (domain.charCodeAt(i)>127) {
	nomecampo.focus();
	alert("Il dominio dell'email contiene dei caratteri scorretti.");
	return false;
	   }
	}

	// See if "user" is valid 

	if (user.match(userPat)==null) {

	// user is not valid
	nomecampo.focus();
	alert("Il nome utente dell'email contiene dei caratteri scorretti.");
	return false;
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	host name) make sure the IP address is valid. */

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {

	// this is an IP address

	for (var i=1;i<=4;i++) {
	if (IPArray[i]>255) {
	nomecampo.focus();
	alert("L'indirizzo IP della email non è corretto.");
	return false;
	   }
	}
	return true;
	}

	// Domain is symbolic name.  Check if it's valid.
	 
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
	if (domArr[i].search(atomPat)==-1) {
	nomecampo.focus();
	alert("Il dominio dell'email non è valido.");
	return false;
	   }
	}

	/* domain name seems valid, but now make sure that it ends in a
	known top-level domain (like com, edu, gov) or a two-letter word,
	representing country (uk, nl), and that there's a hostname preceding 
	the domain or country. */

	if (checkTLD && domArr[domArr.length-1].length!=2 && 
	domArr[domArr.length-1].toLowerCase().search(knownDomsPat)==-1) {
	nomecampo.focus();
	alert("L'indirizzo email deve terminare con un dominio conosciuto o un codice internazionale di 2 lettere.");
	return false;
	}

	// Make sure there's a host name preceding the domain.

	if (len<2) {
	nomecampo.focus();
	alert("Nell'email manca la parte tra la @ e il punto.");
	return false;
	}

	// to do verify if domain exist else suggest 
	var domains="libero.it,tiscali.it,virgilio.it,yahoo.it,alice.it,hotmail.com,hotmail.it,inwind.it,fastwebnet.it,gmail.com,tiscalinet.it,email.it,tele2.it,interfree.it,katamail.com,aliceposta.it,yahoo.com,poste.it,msn.com,live.it,infinito.it,jumpy.it,supereva.it";
	domainArray=domains.split(",");
	   
	if(domain!=domainArray[0] &&  
				domain!=domainArray[1] &&  
				domain!=domainArray[2] &&
			    domain!=domainArray[3] && 
			    domain!=domainArray[4] && 
			    domain!=domainArray[5] &&
			    domain!=domainArray[6] && 
			    domain!=domainArray[7] && 
			    domain!=domainArray[8] &&
			    domain!=domainArray[9] && 
			    domain!=domainArray[10] && 
			    domain!=domainArray[11] &&
			    domain!=domainArray[12] && 
			    domain!=domainArray[13] && 
				domain!=domainArray[14] && 
				domain!=domainArray[15] && 
				domain!=domainArray[16] && 
				domain!=domainArray[17] && 
				domain!=domainArray[18] && 
				domain!=domainArray[19] && 
				domain!=domainArray[20] && 
			    domain!=domainArray[21] &&
			    domain!=domainArray[23]) {
	 suggestThis=suggest_another(domain, domainArray);
	 
	 if(suggestThis!="")
	    if (confirm("Hai inserito l' indirizzo email: " +emailStr+" \nDesideri che venga modificato in: "+user+"@"+suggestThis+" ?")) 
	    {
		   nomecampo.value=user+"@"+suggestThis;
		}
		
	 }

	// If we've gotten this far, everything's valid!
	return true;

}

function suggest_another(wrong_domain, array)
{
    for(j=0;j<array.length;j++)
    {	
		if(differences(wrong_domain,array[j])<=1)
			return array[j];
    }
    return "";
}

function differences(wrongDomain, item)
{
    noOfDiferences=0;
 
    charLengthDif=wrongDomain.length-item.length;
    
    
    switch(charLengthDif)
    {     
        case 0:
            for(i=0;i<wrongDomain.length;i++)
            {
              if(noOfDiferences<2)
              {
                if(wrongDomain.substr(i,1)!=item.substr(i,1))
                        noOfDiferences++;
              }
              else
                return noOfDiferences;               
            }          
            return noOfDiferences;
                
        case 1:                   
            for(i=0;i<item.length;i++)
            {
              if(noOfDiferences<2)
              {
                if(item.substr(i,1)!=wrongDomain.substr(i+noOfDiferences,1)){
                    noOfDiferences++;
					i--;
				}
              }
              else
                return noOfDiferences;
            }
            return noOfDiferences; 
                     
        case -1:
            for(i=0;i<wrongDomain.length;i++)
            {
              if(noOfDiferences<2)
              {
                if(wrongDomain.substr(i,1)!=item.substr(i+noOfDiferences,1)){
                        noOfDiferences++;
                        i--;
                }
              }
              else
                return noOfDiferences;
            } 
            return noOfDiferences;
            
        default:
            return 9;
    }
}


function check_fiscale(campo,obbligatorio,messaggio)
{
   caratteri= new Array ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
   pari= new Array (0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
   dispari=new Array (1,0,5,7,9,13,15,17,19,21,1,0,5,7,9,13,15,17,19,21,2,4,18,20,11,3,6,8,12,14,16,10,22,25,24,23)
   cod=campo.value.toLowerCase();
   check=true;
   if (cod.length!=16){
			check=false
   } else {
      lettere=cod.substr(0,6)+cod.substr(8,1)+cod.substr(11,1)+cod.substr(15);
      numeri=cod.substr(6,2)+cod.substr(9,2)+cod.substr(12,3);
      for (i=0;i<10;i++){
         if (lettere.charCodeAt(i)<97 || lettere.charCodeAt(i)>122){
            check=false;
         }
      } //fine for
      for (i=0;i<8;i++){
         if (numeri.charCodeAt(i)<48 || numeri.charCodeAt(i)>57){
            check=false;
         }
      } //fine for   
      
    } // fine else
     
   //checksum del codice fiscale
   test=cod.substr(15,1);
   var somma=0
   for (i=0;i<16;i=i+2){ //dispari
       carattere=cod.substr(i,1)
       for (k=0;k<36;k++){
          if (carattere==caratteri[k]){
             somma=somma+dispari[k]
             break
          }
       }
    } // fine for
    for (i=1;i<15;i=i+2){ //pari
       carattere=cod.substr(i,1)
       for (k=0;k<36;k++){
          if (carattere==caratteri[k]){
             somma=somma+pari[k]
             break
          }
       }
    } //fine for
   resto=somma % 26;
   var lettera=String.fromCharCode(97+resto);            
   if (test != lettera){
      check=false;
   }   
   
   if (check==false) {
   	 if (obbligatorio) {
	    alert("Il codice fiscale contenuto nel campo \"" + messaggio +"\" è errato");
	    campo.focus();
	    return (false);
	 } else {
		return (confirm("Il codice fiscale contenuto nel campo \"" + messaggio +"\" è errato; Proseguo?"));
	 }
   } //fine if esterno
   
   return true;
}

function check_importo_reddito(field,moneta,min,max,obbligatorio,nonzero,messaggio) 
  {
	  var checkOK = "0123456789.,";				
	  var checkStr = field.value;
	  var allValid = true;
	  var decPoints = 0;
	  var allNum = "";
	  var valore;

	  if (field.value == "" && obbligatorio)
	  {
	   if (messaggio==null)
		    alert("Dati obbligatori nell'importo reddito");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	 if (field.value == 0 && nonzero)
	  {
	   if (messaggio==null)
		    alert("Il valore contenuto nell'importo reddito deve essere maggiore di zero");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	 for (i = 0;  i < checkStr.length;  i++)
	  {
	    ch = checkStr.charAt(i);
	    for (j = 0;  j < checkOK.length;  j++)
	      if (ch == checkOK.charAt(j))
	        break;
	    if (j == checkOK.length)
	    {
	      if ((ch!=".") || (((checkStr.length-i)%4)!=0))
		    {
		      allValid = false;
		      break;
		    }
	    }
	    allNum += ch;
	  }
	 if (!allValid)
	  {
	   if (messaggio==null)
		   alert("Il formato della cifra nel campo \"Importo reddito\" non è corretto");
	   else
		    alert(messaggio);
	   field.focus();
	   return (false);
	  }
	if((ReplaceEta(field,".","").length)>0)
		valore=parseFloat(ReplaceEta(field,".",""));
	else
		valore=0;
//2=euro
	if (moneta==2)
		valore=valore*(1936.27/1000000);

	if (!(valore>=min) || !(valore<=max))
	  {
	   if (messaggio==null)
	  {
		if (moneta==2)
		{
		   alert("Il reddito specificato non può essere convalidato. Controllare l'importo.");
		}
		else
		{
		   alert("Il reddito specificato non può essere convalidato. Controllare l'importo. Nell'inserire l'importo, fare attenzione all'unità di valuta. Ad esempio, se la richiesta è espressa in \"Milioni di lire\", per inserire un importo di 2.300.000 lire, bisognerà digitare \"2,3\".");
		}
	  }
	   else
	  {
		    alert(messaggio);
	  }
	   field.focus();
	   return (false);
	  }


	return (true);
  }

function check_importo_residuo(field,moneta,min,max,obbligatorio,nonzero,messaggio) 
  {
	  var checkOK = "0123456789.,";				
	  var checkStr = field.value;
	  var allValid = true;
	  var decPoints = 0;
	  var allNum = "";
	  var valore;

	  if (field.value == "" && obbligatorio)
	  {
	   if (messaggio==null)
		    alert("Dati obbligatori nell'importo residuo");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	 if (field.value == 0 && nonzero)
	  {
	   if (messaggio==null)
		    alert("Il valore contenuto nell'importo residuo deve essere maggiore di zero");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	 for (i = 0;  i < checkStr.length;  i++)
	  {
	    ch = checkStr.charAt(i);
	    for (j = 0;  j < checkOK.length;  j++)
	      if (ch == checkOK.charAt(j))
	        break;
	    if (j == checkOK.length)
	    {
	      if ((ch!=".") || (((checkStr.length-i)%4)!=0))
		    {
		      allValid = false;
		      break;
		    }
	    }
	    allNum += ch;
	  }
	 if (!allValid)
	  {
	   if (messaggio==null)
		   alert("Il formato della cifra nel campo \"Importo residuo\" non è corretto");
	   else
		    alert(messaggio);
	   field.focus();
	   return (false);
	  }
	if((ReplaceEta(field,".","").length)>0)
		valore=parseFloat(ReplaceEta(field,".",""));
	else
		valore=0;
//2=euro
	if (moneta==2)
		valore=valore*(1936.27/1000000);

	if (!(valore>=min) || !(valore<=max))
	  {
	   if (messaggio==null)
	  {
		if (moneta==2)
		{
		   alert("Il valore residuo del prestito non può essere convalidato. Controllare l'importo.");
		}
		else
		{
		   alert("Il valore residuo del prestito non può essere convalidato. Controllare l'importo. Nell'inserire l'importo, fare attenzione all'unità di valuta. Ad esempio, se la richiesta è espressa in \"Milioni di lire\", per inserire un importo di 50.000.000 lire, bisognerà digitare \"50\".");
		}
	  }
	   else
	  {
		    alert(messaggio);
	  }
	   field.focus();
	   return (false);
	  }


	return (true);
  }

function check_rata(field,moneta,min,max,obbligatorio,nonzero,messaggio) 
  {
	  var checkOK = "0123456789.,";				
	  var checkStr = field.value;
	  var allValid = true;
	  var decPoints = 0;
	  var allNum = "";
	  var valore;

	  if (field.value == "" && obbligatorio)
	  {
	   if (messaggio==null)
		    alert("Dati obbligatori nella rata");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	 if (field.value == 0 && nonzero)
	  {
	   if (messaggio==null)
		    alert("Il valore contenuto nella rata deve essere maggiore di zero");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	 for (i = 0;  i < checkStr.length;  i++)
	  {
	    ch = checkStr.charAt(i);
	    for (j = 0;  j < checkOK.length;  j++)
	      if (ch == checkOK.charAt(j))
	        break;
	    if (j == checkOK.length)
	    {
	      if ((ch!=".") || (((checkStr.length-i)%4)!=0))
		    {
		      allValid = false;
		      break;
		    }
	    }
	    allNum += ch;
	  }
	 if (!allValid)
	  {
	   if (messaggio==null)
		   alert("Il formato della cifra nel campo \"Rata\" non è corretto");
	   else
		    alert(messaggio);
	   field.focus();
	   return (false);
	  }
	if((ReplaceEta(field,".","").length)>0)
		valore=parseFloat(ReplaceEta(field,".",""));
	else
		valore=0;
//2=euro
	if (moneta==2)
		valore=valore*(1936.27/1000000);

	if (!(valore>=min) || !(valore<=max))
	  {
	   if (messaggio==null)
	  {
		if (moneta==2)
		{
		   alert("Il valore della rata non può essere convalidato. Controllare l'importo.");
		}
		else
		{
		   alert("Il valore della rata non può essere convalidato. Controllare l'importo. Nell'inserire l'importo, fare attenzione all'unità di valuta. Ad esempio, se la richiesta è espressa in \"Milioni di lire\", per inserire un importo di 2.300.000 lire, bisognerà digitare \"2,3\".");
		}
	  }
	   else
	  {
		    alert(messaggio);
	  }
	   field.focus();
	   return (false);
	  }


	return (true);
  }

function check_curr1(field,moneta,min,max,obbligatorio,nonzero,messaggio) 
{
// controlla l'importo. i parametri sono:
// moneta: 1=milioni di lire, 2=euro 3=lire
// min, max: estremi di validità, con importo espresso in milioni di lire (separatore dei decimali è il punto)	

	var checkOK = "0123456789.,";				
	var checkStr = field.value;
	var allValid = true;
	var valore;
	
	//controllo l'obbligatorietà dei campi.
	
	if (field.value == "" && obbligatorio)	{
		if (messaggio==null)
			alert("Dati obbligatori nel campo \"" + field.name +"\" ");
		else
			alert(messaggio);
		field.focus();
		return (false);
	}

	//conto il numero di punti e di virgole

	var numvirgole = 0;
	var numpunti = 0;
	for (i = 0;  i < checkStr.length;  i++) {
		if (checkStr.charAt(i) == ',') {
			++numvirgole;
		}
		if (checkStr.charAt(i) == '.') {
			++numpunti;
		}
	}

	//sia per i milioni di lire che per gli euro, non sono ammessi punti e virgole contemporaneamente,

	if (numvirgole>0 && numpunti>0) {
		alert("Non sono ammessi virgole e punti contemporaneamente nel campo \"" + field.name +"\".");
		field.focus();
		return (false);
	}
	
	//per i milioni di lire, non sono ammessi più di 1 punto o di 1 virgola.
	
	if (moneta==1 && (numvirgole>1 || numpunti>1)) {
		alert("Ammesso un solo punto o una sola virgola nel campo \"" + field.name +"\".");
		field.focus();
		return (false);
	}

	//cerco dei caratteri non ammessi nella stringa. Confronto con checkOK

	for (i = 0;  i < checkStr.length;  i++) {
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j)) {
				break;
			}

		if (j == checkOK.length) {
			//ho trovato un carattere non ammesso in checkOK
			allValid = false;
			break;
		}
		if ( ((ch==".") || (ch==',')) && (moneta==2 || moneta==3) && ((checkStr.length-i)%4)!=0)  {
			//se ci sono punti e virgole, devono essere nelle posizioni delle migliaia se si tratta di euro o di lire
			//ad esempio, 1,000,000 = 1.000.000 = 1000000 per gli euro e   per le lire
			allValid = false;
			break;
		}
	
	}
		
	if (!allValid) {
		if (messaggio==null)
			alert("Il formato della cifra nel campo \"" + field.name +"\" non è corretto");
		else
			alert(messaggio);
		field.focus();
		return (false);
	}

	if (field.value == 0 && nonzero) {
		if (messaggio==null)
			alert("Il valore contenuto nel campo \"" + field.name +"\" deve essere maggiore di zero");
		else
			alert(messaggio);
		field.focus();
		return (false);
	}

	//setto la variabile 'valore' al valore corretto, espresso in MILIONI DI LIRE.
	if((ReplaceEta(field,".","").length)>0) {
		if(moneta==1) {
			//se la valuta è lire (attenzione: si intende milioni di lire)
			//rimpiazzo la virgola col punto. Il separatore indica i decimali di milione, quindi 3,5 -> 3.5
			//questo perchè in Javascript i decimali si rappresentano col punto
			valore = parseFloat(ReplaceEta(field,",","."));
		} else
		{
			//se la valuta è euro o  lire,
			//tolgo virgole e punti, gli euro non ammettono decimali e quindi 
			//la punteggiatura serve solo da separatore, pertanto per i calcoli è inutile
			valore = parseFloat(sostituiscistringa(sostituiscistringa(field.value,".",""),",",""));
		}
		
	} else
	 	valore=0;

	//2=euro; la variabile 'valore' contiene i milioni di lire.
	if (moneta==2)
		valore=valore*(1936.27/1000000);
	if (moneta==3){
		//la grandezza per le lire è sempre in milini, ma usando tutte le posizioni:
		//per indicare 1 milione il valore non sarà 1 ma 1000000.
		//adatto tutte le grandezze per il confronto alle lire, moltiplicandole per 1000000
		min = min*1000000;
		max=max*1000000;
		}

	if (!(valore>=min) || !(valore<=max))
	  {
	   if (messaggio==null)
		   alert("Il valore del campo \""+field.name+"\"non è accettabile.");
	   else
		    alert(messaggio);
	   field.focus();
	   return (false);
	  }
	return (true);
  }

function check_radio(field,messaggio)
  {

	  var radioSelected = false;
	  for (i = 0;  i < field.length;  i++)
	  {
	    if (field[i].checked)
	        radioSelected = true;
	  }
	  if (!radioSelected)
	  {
	    alert("Effettuare una selezione "+messaggio+" ");
	    field[0].focus();
	    return (false);
	  }
	return (true);
  }

function check_cap(field,obbligatorio,messaggio)
{
	  var checkOK = "0123456789";				
	  var checkStr = field.value;
	  var allValid = true;
	  var decPoints = 0;
	  var allNum = "";


	  if (field.value == "" && obbligatorio)
	  {
	   if (messaggio==null)
		    alert("Dati obbligatori nel campo \"" + field.name +"\" ");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	  if ((checkStr.length!=5) && obbligatorio)
	  {
	   if (messaggio==null)
		    alert("Il formato del CAP è errato nel campo \"" + field.name +"\" ");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	 for (i = 0;  i < checkStr.length;  i++)
	  {
	    ch = checkStr.charAt(i);
	    for (j = 0;  j < checkOK.length;  j++)
	      if (ch == checkOK.charAt(j))
	        break;
	    if (j == checkOK.length)
	    {
	      allValid = false;
	      break;
	    }
	    allNum += ch;
	  }
	 if (!allValid)
	  {
	   if (messaggio==null)
		   alert("Il formato del numero intero nel campo \""+field.name+"\" non è corretto");
	   else
		    alert(messaggio);
	   field.focus();
	   return (false);
	  }
	return (true);
}


function check_name(field,obbligatorio,messaggio)
{
  var checkOK = ",.'- ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ \t\r\n\f";
  var checkStr = field.value;
  var allValid = true;

  if (field.value == "" && obbligatorio)
  {
   if (messaggio==null)
	    alert("Dati obbligatori nel campo \"" + field.name +"\" ");
   else
	    alert(messaggio);
    field.focus();
    return (false);
  }
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
  }
  if (!allValid)
  {
   if (messaggio==null)
	    alert("Ammesse solo lettere e spazi nel campo \"" + field.name +"\" ");
   else
	    alert(messaggio);
    field.focus();
    return (false);
  }
 return (true);
}

function check_indirizzo(field,obbligatorio,messaggio)
{
  var checkOK = char_indirizzo ;
  var checkStr = field.value;
  var allValid = true;

  if (field.value == "" && obbligatorio)
  {
   if (messaggio==null)
	    alert("Dati obbligatori nel campo \"" + field.name +"\" ");
   else
	    alert(messaggio);
    field.focus();
    return (false);
  }
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
  }
  if (!allValid)
  {
   if (messaggio==null)
	    alert("Ammesse solo lettere  e spazi nel campo \"" + field.name +"\" ");
   else
	    alert(messaggio);
    field.focus();
    return (false);
  }
 return (true);
}

function check_date(giorno,mese,anno,field,messaggio)
{
var data = new Date(anno,mese,giorno,0,0,0,0);

 if (messaggio==null)
	messaggio="La data non è corretta";

if (data.getDate()!=giorno)
	{
	alert(messaggio);
	field.focus();
	return (false);
	}

else
	return (true);
}

function check_string(field,lettere,obbligatorio,messaggio)
{
  var checkOK = lettere;
  var checkStr = field.value;
  var allValid = true;


  if (field.value == "" && obbligatorio)
  {
   if (messaggio==null)
	    alert("Dati obbligatori nel campo \"" + field.name +"\" ");
   else
	    alert(messaggio);

    field.focus();
    return (false);
  }
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
  }
  if (!allValid)
  {
   if (messaggio==null)
	    alert("Caratteri non ammessi nel campo \"" + field.name +"\" ");
   else
	    alert(messaggio);
    field.focus();
    return (false);
  }
	return (true);
}

function check_integer(field,obbligatorio,nonzero,messaggio) 
  {
	  var checkOK = "0123456789";				
	  var checkStr = field.value;
	  var allValid = true;
	  var decPoints = 0;
	  var allNum = "";
	
	  if (field.value == "" && obbligatorio)
	  {
	   if (messaggio==null)
		    alert("Dati obbligatori nel campo \"" + field.name +"\" ");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	 if (field.value == 0 && nonzero)
	  {
	   if (messaggio==null)
		    alert("Il valore contenuto nel campo \"" + field.name +"\" deve essere maggiore di zero");
	   else
		    alert(messaggio);
	    field.focus();
	    return (false);
	  }
	 for (i = 0;  i < checkStr.length;  i++)
	  {
	    ch = checkStr.charAt(i);
	    for (j = 0;  j < checkOK.length;  j++)
	      if (ch == checkOK.charAt(j))
	        break;
	    if (j == checkOK.length)
	    {
		      allValid = false;
		      break;
	    }
	    allNum += ch;
	  }
	 if (!allValid)
	  {
	   if (messaggio==null)
		   alert("Il formato della cifra nel campo \""+field.name+"\" non è corretto");
	   else
		    alert(messaggio);
	   field.focus();
	   return (false);
	  }
	return (true);
  }

function ReplaceEta(field,ValDaCercare,ValDaSost)		{
	  var checkStr = field.value;  	
	  var nvolte;	
 	  var i;	
	  var nuovastr = new String();		
	  var ch = new String();		

	 for (i = 0;  i < checkStr.length;  i++)	{
	    ch = checkStr.charAt(i);

	    if (ch != ValDaCercare)
				nuovastr = nuovastr + ch
      else
				nuovastr = nuovastr + ValDaSost		
	  }

	return (nuovastr);
}

function SelezionaCombo(obj,v)	{
	for(i=0;i<obj.options.length;i++) {
		if (obj.options[i].value == v) {
			obj.selectedIndex = i;
			break;
		}
	}
}

function CheckCurrEuro(field,min,max,obbligatorio,nonzero,messaggio)	{
// controlla l'importo. i parametri sono:
// min, max: estremi di validità, con importo espresso in milioni di lire (separatore dei decimali è il punto)	

	var checkOK = "0123456789.,";				
	var checkStr = field.value;
	var allValid = true;
	var valore;
	
	//controllo l'obbligatorietà dei campi.
	
	if (field.value == "" && obbligatorio)	{
		if (messaggio==null)
			alert("Dati obbligatori nel campo \"" + field.name +"\".");
		else
			alert(messaggio);
		field.focus();
		return (false);
	}

	//conto il numero di punti e di virgole

	var numvirgole = 0;
	var numpunti = 0;
	for (i = 0;  i < checkStr.length;  i++) {
		if (checkStr.charAt(i) == ',') {
			++numvirgole;
		}
		if (checkStr.charAt(i) == '.') {
			++numpunti;
		}
	}

	//sia per i milioni di lire che per gli euro, non sono ammessi punti e virgole contemporaneamente,

	if (numvirgole>0 && numpunti>0) {
		alert("Non sono ammessi virgole e punti contemporaneamente nel campo \"" + field.name +"\".");
		field.focus();
		return (false);
	}
	
	//per i milioni di lire, non sono ammessi più di 1 punto o di 1 virgola.
	
	/*
	if (numvirgole>1 || numpunti>1) {
		alert("Ammesso un solo punto o una sola virgola nel campo \"" + field.name +"\".");
		field.focus();
		return (false);
	}
	*/
	//cerco dei caratteri non ammessi nella stringa. Confronto con checkOK

	for (i = 0;  i < checkStr.length;  i++) {
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j)) {
				break;
			}

		if (j == checkOK.length) {
			//ho trovato un carattere non ammesso in checkOK
			allValid = false;
			break;
		}
		if (((ch==".") || (ch==','))  && ((checkStr.length-i)%4)!=0)  {
			//se ci sono punti e virgole, devono essere nelle posizioni delle migliaia se si tratta di euro o di lire
			//ad esempio, 1,000,000 = 1.000.000 = 1000000 per gli euro e   per le lire
			allValid = false;
			break;
		}
	}
		
	if (!allValid) {
		if (messaggio==null)
			alert("Il formato della cifra nel campo \"" + field.name +"\" non è corretto.");
		else
			alert(messaggio);
		field.focus();
		return (false);
	}

	if (field.value == 0 && nonzero) {
		if (messaggio==null)
			alert("Il valore contenuto nel campo \"" + field.name +"\" deve essere maggiore di zero.");
		else
			alert(messaggio);
		field.focus();
		return (false);
	}

	//setto la variabile 'valore' al valore corretto
	if((ReplaceEta(field,".","").length)>0) {
			//se la valuta è euro o  lire,
			//tolgo virgole e punti, gli euro non ammettono decimali e quindi 
			//la punteggiatura serve solo da separatore, pertanto per i calcoli è inutile
			valore = parseFloat(sostituiscistringa(sostituiscistringa(field.value,".",""),",",""));
	} else	{
	 	valore=0;
	}

	if (!(valore>=min) || !(valore<=max))
	  {
	   if (messaggio==null)
		   alert("Il valore del campo \""+field.name+"\"non è accettabile.");
	   else
		    alert(messaggio);
	   field.focus();
	   return (false);
	  }
	return (true);
}

function controllo_importo_intero(importo, strNomeCampo){
	// Solo stringhe formate da: 
	// numeri interi
	// punti per separatore migliaia centinaia
		
	var espressione = new RegExp("(^($)|^([1-9]([0-9]*)$))|(^([1-9](|[0-9]|[0-9]{2})([.]([0-9]){3})+)$)");
	if (!espressione.test(importo.value)){
		alert("Valore non ammesso nel campo " + strNomeCampo +"\nInserire un numero intero.");
		importo.focus();
		return false;
	}
	return true;
}


function controllo_importo_intero_con_messaggio(importo, strNomeCampo, messaggio){
	// Solo stringhe formate da: 
	// numeri interi
	// punti per separatore migliaia centinaia
		
	var espressione = new RegExp("(^($)|^([1-9]([0-9]*)$))|(^([1-9](|[0-9]|[0-9]{2})([.]([0-9]){3})+)$)");
	if (!espressione.test(importo.value)){
		if(messaggio != ""){
			alert(messaggio);
		}else{
			alert("Valore non ammesso nel campo " + strNomeCampo +"\nInserire un numero intero.");
		}
		importo.focus();
		return false;
	}
	return true;
}


function non_soloInt(campo,descrizioneCampo , messaggio){
	if (parseInt(campo.value) == campo.value){
			if(messaggio != ""){
				alert(messaggio);
			}else{
				alert("Il campo \"" + descrizioneCampo + "\" non può essere formato solo da numeri.");
			}
			campo.focus();
			return true;
	}
	return false;
}

function controlla_campo_intervallo_con_messaggio(nomecampo,valoreminimo,valoremassimo,obbligatorio,descrizionecampo,messaggio) {
	var checkOK = "0123456789";
	var checkStr = nomecampo.value;
	var allValid = true;
	if (nomecampo.value == "" && obbligatorio) {
		if(messaggio != ""){
			alert(messaggio);
		}else{
			if (descrizionecampo==null)
				alert("Inserire un valore nel campo \"" + nomecampo.name + "\".")
			else
				alert("Inserire un valore nel campo \"" + descrizionecampo + "\".")
		}
		nomecampo.focus();
    return false
	}
	for (i = 0; i < checkStr.length; i++) {
		ch = checkStr.charAt(i);
		for (j = 0; j < checkOK.length; j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length) {
				allValid = false;
				break
			}
	}
	if (!allValid) {
		if(messaggio != ""){
			alert(messaggio);
		}else{
			if (descrizionecampo==null)
				alert("Caratteri non ammessi nel campo \"" + nomecampo.name + "\".")
			else
				alert("Caratteri non ammessi nel campo \"" + descrizionecampo + "\".")
		}
		nomecampo.focus();
		return false
	}
	if ((checkStr < valoreminimo || checkStr > valoremassimo) && nomecampo.value != '') {
		if(messaggio != ""){
			alert(messaggio);
		}else{
			if (descrizionecampo==null)
				alert("Il valore del campo \"" + nomecampo.name + "\" non è accettabile:\ninserire un valore compreso tra " + valoreminimo + " e " + valoremassimo + ".");
			else
				alert("Il valore del campo \"" + descrizionecampo + "\" non è accettabile:\ninserire un valore compreso tra " + valoreminimo + " e " + valoremassimo + ".");
		}
		nomecampo.focus();
		return false
	}
	return true
}