
/** Insieme di funzioni ed oggetti utili per interagire con ajax */

//------------------------ 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 utile per recuperare un elemento fornendo l'ID
	function prendiElementoDaId(id_elemento) {
		// Elemento da restituire
		var elemento;

		// Se esiste il metodo getElementById, questo if sarà diverso da false, null o undefined
		// e sarà quindi considerato valido, come un true
		if(document.getElementById)
		{
			elemento = document.getElementById(id_elemento);
		}
		// altrimenti è necessario usare un vecchio sistema
		else
		{
			elemento = document.all[id_elemento];
		}
		// restituzione elemento
		return elemento;
	}

// Funzione per assegnare l'oggetto XMLHttpRequest.
// Risolve problemi di compatibilità con i browsers
	function assegnaXMLHttpRequest() {

		 var XHR = null; // Variabile di ritorno, nulla di default
		 var browserUtente = navigator.userAgent.toUpperCase(); // Informazioni sul nome del browser

		 // Browser standard con supporto nativo, non importa il tipo di browser
		 if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object")
		 {
			XHR = new XMLHttpRequest();
		 }

		 // Browser Internet Explorer, è necessario filtrare la versione 4
		 else if(window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0)
		 {
			// La versione 6 di IE ha un nome differente per il tipo di oggetto ActiveX
			if(browserUtente.indexOf("MSIE 5") < 0)
			{
				XHR = new ActiveXObject("Msxml2.XMLHTTP");
			}
			// Le versioni 5 e 5.5 invece sfruttano lo stesso nome
			else
			{
				XHR = new ActiveXObject("Microsoft.XMLHTTP");
			}
		 }
		 return XHR;
	}

// Funzione di caricamento testo da invocare
// pNomeFile -> Stringa contenente il nome del file da leggere
// pIdPagina -> Identificativo pagina HTML
// pIdWork -> Identificativo a disposizione per ulteriori informazioni
function FnCaricaXML(pNomeFile, pIdPagina, pIdWork, pDivTarget) {
  
  // variabili di funzione
  var ajax = assegnaXMLHttpRequest(); // assegnazione oggetto XMLHttpRequest
  var elemento = prendiElementoDaId(pDivTarget); // assegnazione elemento del documento
  var usaLink = true; // risultato booleano di funzione

  // se l'oggetto XMLHttpRequest non è nullo
  if(ajax) {
    // il link al file non deve essere usato
    usaLink = false;

    // impostazione richiesta asincrona in GET
    // del file specificato
    ajax.open("get", pNomeFile, true);

    // rimozione dell'header "connection" come "keep alive"
    ajax.setRequestHeader("connection", "close");

    // impostazione controllo e stato della richiesta
    ajax.onreadystatechange = function() {
        // verifica dello stato
        if(ajax.readyState === readyState.COMPLETATO)
        {
            // verifica della risposta da parte del server
            if(statusText[ajax.status] === "OK")
            {
                // verifica della validità dell'XML restituito dal server
                if(ajax.responseXML)
                {
                    elemento.innerHTML = FnParsaXml(ajax.responseXML,pIdPagina,pIdWork);
                }
                else
                {
                    // visualizzazione contenuto letto
                    // evitando di scrivere la risposta in modo
                    // interpretabile dal browser
                    elemento.innerHTML = "L'XML restituito dalla richiesta non è valido.<br />" +
                          ajax.responseText.split('<').join("&lt;").split('>').join("&gt;");
                }
            }
            else
            {
              // errore di caricamento
              elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />" +
                    "Errore riscontrato: " + statusText[ajax.status];
            }
        }
    }
    // invio richiesta
    ajax.send(null);
  }
  else
  {
	// Messaggio errore "Ajax compatible"
	prendiElementoDaId(pDivTarget).innerHTML = '<b>Yor browser is not Ajax compatible.</b>';
  }
  return usaLink;
}

// Funzione di recupero parametri della Query String
function objQueryString(qs){ 
	dic = new Array();
	if(!qs)	qs = location.search
	qs = qs.replace(/\?/,'');
	aQs = qs.split('&');
	txt = '';
	for(i=0;i<aQs.length;i++){
		aPV = aQs[i].split('=');
		dic[aPV[0]]=aPV[1];
	}
	return dic;
}

// Funzione per impostare la classe ad un oggetto
function FnSetClass(pIdObj, pClassName){ 
	var currObj = document.getElementById(pIdObj);
	currObj.className = pClassName;
    return;
}