/** insieme di funzioni ed oggetti utili per interagire con ajax */

/** FUNZIONI */

	// funzione per prendere un elemento con id univoco
		function prendiElementoDaId(id_elemento) {
			var elemento;
			if(document.getElementById)
				elemento = document.getElementById(id_elemento);
			else
				elemento = document.all[id_elemento];
			return elemento;
		};
		
		// funzione per ricavare il valore selezionato in un radio button
		function prendiElementoDaRadio(nome_form,id_elemento) {
			var indice = 0; 
				
				for (i = 0; i < document.forms[nome_form].elements[id_elemento].length; i++) { 
					if ( document.forms[nome_form].elements[id_elemento][i].checked) indice = i; 
				} 
				return  document.forms[nome_form].elements[id_elemento][indice]; 

			
		};
		
		
		function isNumeric(x){
		
			// I use this function like this: if (isNumeric(myVar)) { }
			// regular expression that validates a value is numeric
			
			var RegExp = /^(-)?(\d*)(\.?)(\d*)$/;
			// Note: this WILL allow a number that ends in a decimal: -452.
			// compare the argument to the RegEx
			// the 'match' function returns 0 if the value didn't match
			
			var result = x.match(RegExp);
			return result;
		}
		
		function ControllaCF(cf)
		{
		    var validi, i, s, set1, set2, setpari, setdisp;
		    if( cf == '' )  return '';
		    cf = cf.toUpperCase();
		    if( cf.length != 16 )
		       
		   //     return "La lunghezza del codice fiscale non ?\n"
		   //     +"corretta: il codice fiscale dovrebbe essere lungo\n"
		   //     +"esattamente 16 caratteri.\n";
		   return 0;
		   
		    validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
		    for( i = 0; i < 16; i++ ){
		        if( validi.indexOf( cf.charAt(i) ) == -1 )
		            return 0;
		            //return "Il codice fiscale contiene un carattere non valido `" +
		            //     cf.charAt(i) +
		            //   "'.\nI caratteri validi sono le lettere e le cifre.\n";
		    }
		    set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		    set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
		    setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		    setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
		    s = 0;
		    for( i = 1; i <= 13; i += 2 )
		        s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
		    for( i = 0; i <= 14; i += 2 )
		        s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
		    if( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) )
		         return 0;
		        //return "Il codice fiscale non ? corretto:\n"+
		        //    "il codice di controllo non corrisponde.\n";
		   // return "";
		    return 1;
		}
		
		
		function ControllaPIVA(pi)
		{
		    if( pi == '' )  return '';
		    if( pi.length != 11 )
		       return 0;
		       // return "La lunghezza della partita IVA non ?\n" +
		       //     "corretta: la partita IVA dovrebbe essere lunga\n" +
		       //     "esattamente 11 caratteri.\n";
		    validi = "0123456789";
		    for( i = 0; i < 11; i++ ){
		        if( validi.indexOf( pi.charAt(i) ) == -1 )
		            return 0;
		            //return "La partita IVA contiene un carattere non valido `" +
		            //    pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n";
		    }
		    s = 0;
		    for( i = 0; i <= 9; i += 2 )
		        s += pi.charCodeAt(i) - '0'.charCodeAt(0);
		    for( i = 1; i <= 9; i += 2 ){
		        c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
		        if( c > 9 )  c = c - 9;
		        s += c;
		    }
		    if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) )
		       return 0;
		       // return "La partita IVA non ? valida:\n" +
		       //     "il codice di controllo non corrisponde.\n";
		    return 1;
		}
		
				
		
	// funzione per assegnare un oggetto XMLHttpRequest
		function assegnaXMLHttpRequest() {
			var
				XHR = null,
				browserUtente = navigator.userAgent.toUpperCase();
			if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object")
				XHR = new XMLHttpRequest();
			else if(window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0) {
				if(browserUtente.indexOf("MSIE 5") < 0)
					XHR = new ActiveXObject("Msxml2.XMLHTTP");
				else
					XHR = new ActiveXObject("Microsoft.XMLHTTP");
			}
			return XHR;
		};



/** OGGETTI / ARRAY */

	// oggetto di verifica stato
		var readyState = {
			INATTIVO:	0,
			INIZIALIZZATO:	1,
			RICHIESTA:	2,
			RISPOSTA:	3,
			COMPLETATO:	4
		};

	// array descrittivo dei codici restituiti dal server
	// [la scelta dell' array è per evitare problemi con vecchi browsers]
		var statusText = new Array();
		statusText[100] = "Continue";
		statusText[101] = "Switching Protocols";
		statusText[200] = "OK";
		statusText[201] = "Created";
		statusText[202] = "Accepted";
		statusText[203] = "Non-Authoritative Information";
		statusText[204] = "No Content";
		statusText[205] = "Reset Content";
		statusText[206] = "Partial Content";
		statusText[300] = "Multiple Choices";
		statusText[301] = "Moved Permanently";
		statusText[302] = "Found";
		statusText[303] = "See Other";
		statusText[304] = "Not Modified";
		statusText[305] = "Use Proxy";
		statusText[306] = "(unused, but reserved)";
		statusText[307] = "Temporary Redirect";
		statusText[400] = "Bad Request";
		statusText[401] = "Unauthorized";
		statusText[402] = "Payment Required";
		statusText[403] = "Forbidden";
		statusText[404] = "Not Found";
		statusText[405] = "Method Not Allowed";
		statusText[406] = "Not Acceptable";
		statusText[407] = "Proxy Authentication Required";
		statusText[408] = "Request Timeout";
		statusText[409] = "Conflict";
		statusText[410] = "Gone";
		statusText[411] = "Length Required";
		statusText[412] = "Precondition Failed";
		statusText[413] = "Request Entity Too Large";
		statusText[414] = "Request-URI Too Long";
		statusText[415] = "Unsupported Media Type";
		statusText[416] = "Requested Range Not Satisfiable";
		statusText[417] = "Expectation Failed";
		statusText[500] = "Internal Server Error";
		statusText[501] = "Not Implemented";
		statusText[502] = "Bad Gateway";
		statusText[503] = "Service Unavailable";
		statusText[504] = "Gateway Timeout";
		statusText[505] = "HTTP Version Not Supported";
		statusText[509] = "Bandwidth Limit Exceeded";