/** (C) HTML.IT - insieme di funzioni ed oggetti utili per interagire con ajax  - riveduto e ottimizzato per uso personale da Paolo Vadalà */
/** 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";
		
/** FUNZIONI */

	// funzione per prendere un elemento con id univoco
		function XHRGetHtmlObject(id_elemento) {
			var elemento;
			if(document.getElementById)
				elemento = document.getElementById(id_elemento);
			else
				elemento = document.all[id_elemento];
			return elemento;
		};
	
	// funzione per assegnare un oggetto XMLHttpRequest
		function XHRGetXhrObject() {
			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;
		};

	// funzione per effettuare la richiesta asincrona (metodo GET) di una pagina (Link) da mettere in un tag HTML (con ID = IdContainer), come un DIV, SPAN, ...
	// ValueArray è un array con una sequenza <variabile> <valore> da utilizzare in GET alla pagina (può essere null se non ci sono valori da inviare)
		function XHRShowOnHtmlObjectG(IdContainer,Link,ValueArray) {
			var hCont = XHRGetHtmlObject(IdContainer);
			if( !hCont ) return;
			var LinkBuild = Link;
			var xhr = XHRGetXhrObject();
			if( ValueArray && ValueArray.length > 0 && ValueArray.length % 2 == 0 ) {
				LinkBuild += '?';
				for( var k=0; k<ValueArray.length; k++ ) {
					LinkBuild += ValueArray[k] + '=';
					k++;
					LinkBuild += ValueArray[k];
				}
			}
			xhr.open('GET', LinkBuild, true); 
//			xhr.setRequestHeader('content-type', 'text/plain');
//			xhr.setRequestHeader('Content-language', 'it');
//			xhr.setRequestHeader('Content-Encoding', 'identity');
//			xhr.setRequestHeader('Cache-Control', 'no-transform');
//			xhr.setRequestHeader('Transfer-Encoding', 'chunked');
			xhr.setRequestHeader('connection', 'close');	// rimozione dell'header "connection" come "keep alive"
			xhr.onreadystatechange=function() { 
				if( xhr.readyState === readyState.COMPLETATO && xhr.status === 200 ) { 
					hCont.innerHTML = xhr.responseText;
					//hCont.innerText = xhr.responseText;
					//hCont.innerHTML = xhr.getAllResponseHeaders();
					
				} 
			} 
			xhr.send(null);
		};

	// funzione per effettuare la richiesta asincrona (metodo POST) di una pagina (Link) da mettere in un tag HTML (con ID = IdContainer), come un DIV, SPAN, ...
	// ValueArray è un array con una sequenza <variabile> <valore> da utilizzare in POST alla pagina (può essere null se non ci sono valori da inviare)
		function XHRShowOnHtmlObjectP(IdContainer,Link,ValueArray) {
			var hCont = XHRGetHtmlObject(IdContainer);
			if( !hCont ) return;
			var LinkBuild;
			var xhr = XHRGetXhrObject(); 
			if( ValueArray && ValueArray.length > 0 && ValueArray.length % 2 == 0 ) {
				LinkBuild += '?';
				for( var k=0; k<ValueArray.length; k++ ) {
					if( LinkBuild.length > 0 ) LinkBuild += '&';
					LinkBuild += ValueArray[k] + '=';
					k++;
					LinkBuild += ValueArray[k];
				}
			}
			xhr.open('POST', Link, true); 
			xhr.setRequestHeader('connection', 'close');	// rimozione dell'header "connection" come "keep alive"
			xhr.onreadystatechange=function() { 
				if( xhr.readyState === readyState.COMPLETATO && xhr.status === 200 ) { 
					hCont.innerHTML = xhr.responseText;
				} 
			} 
			xhr.send(LinkBuild);
		};

