/** (C) HTML.IT - insieme di funzioni ed oggetti utili per interagire con ajax */

/** FUNZIONI */
browserSniffer();

// Questo script permette di riconoscere il tipo di browser utilizzato
function browserSniffer()
{
   var ua = navigator.userAgent;

   this.isOpera 	= function(){ return /Opera/.test(ua); }  
   this.isNetscape 	= function(){ return /Netscape/.test(ua); }
   this.isMozilla 	= function(){ return /Mozilla/.test(ua); }
   this.isSafari 	= function(){ return /Safari/.test(ua); }
   this.isIEWin 	= function(){ return window.external && /Win/.test(ua); }
   this.isIEMac 	= function(){ return window.external && /Mac/.test(ua); }
   this.isGecko 	= function(){ return navigator.product == "Gecko" &&
   										 !( this.isOpera() || this.isSafari() || this.isNetscape() || this.isMozilla()); }
}
// ------------------------------------------------------------------------------------------------------------------------

// funzione per leggere un file XML - parametro: nome del file da leggere - return root del file letto
function CJL_loadXmlDocument(xmlFile)
{
   var xdoc;
   if( window.ActiveXObject && /Win/.test(navigator.userAgent) )
   {
      xdoc = new ActiveXObject("Microsoft.XMLDOM");
      xdoc.async = false;
      xdoc.load(xmlFile);
      return xdoc;
   }
   else if( document.implementation && document.implementation.createDocument )
   {
      xdoc = document.implementation.createDocument("", "", null);
      xdoc.load(xmlFile);
      return xdoc;
   }
   else{ return null; }
}
// --------------------------------------------------------------------------------------------------------------------------------

// funzione per prendere un elemento con id univoco
function $el(id_elemento)
{
	var elemento;
	if(document.getElementById) elemento = document.getElementById(id_elemento);
	else elemento = document.all[id_elemento];
	return elemento;
};
// ---------------------------------------------------------------------------------------------------

function setMouseMoveTableRow(table, overColor, sIndex, nRows) 
{
    if(overColor == null || overColor == "") { overColor = '#ffb700'; }
    if(table == null || table.tagName.toLowerCase() != "table"){ return; }
    var rows = table.getElementsByTagName("tr");
    if(rows == null || rows.length == 0){ return; }
    var start = ((sIndex != null && typeof sIndex == "number" && sIndex > 0) ? sIndex : 0);
    var num   = ((nRows != null && typeof nRows == "number" && nRows > 0 && nRows <= rows.length) ? nRows : rows.length);
    for(var i=start; i<num; i++) {
        rows[i].oldBGColor  = rows[i].style.backgroundColor;
        rows[i].onmouseover = function() { this.style.backgroundColor = overColor; }
        rows[i].onmouseout  = function() { this.style.backgroundColor = this.oldBGColor; }
    }
}
// ---------------------------------------------------------------------------------------------------

// recupera le variabili passate alla pagina col metodo GET
function getParam(numParam)
{
	param_name=new Array();
	param_value=new Array();
	
	indirizzo=unescape(String(this.location));
	
	params=indirizzo.split("?");
	if(params.length == 1) return null;
	param=params[1].split("&");
	
	for(i=0;i<param.length;i++)
	{
		param_temp=param[i].split("=");
		param_name[i]=param_temp[0];
		param_value[i]=param_temp[1];
		
		if(isNaN(param_value[i])) eval("var "+param_name[i]+"='"+param_value[i]+"';");
		else eval("var "+param[i]+";");
	}
	if(numParam >= param.length) return null;
	return param_value[numParam];
}
// ---------------------------------------------------------------------------------------------------

ajax = XMLHTTPObject();

function XMLHTTPObject()
{
	var xmlhttp;
	if (window.ActiveXObject)
	{
		// instanzio l'oggetto
		if (_XML_ActiveX) { xmlhttp = new ActiveXObject(_XML_ActiveX); }
		else {
			// ciclo attraverso le varie versioni
		 	var versions = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP", "Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", 
							"Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0"];
		 	for (var i = 0; i < versions.length ; i++)
			{
		   		try { // creo l'oggetto
					xmlhttp = new ActiveXObject(versions[i]);
			 		if (xmlhttp) { var _XML_ActiveX = versions[i]; break; }
		  		} catch (e) {  } ;
		 	}
	   	}
	} // se non c' ActiveX allora sono su un browser diverso da Internet Explorer
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined'){
		try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; }
	}
	return xmlhttp;
}

// 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";
