﻿/*	#	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;
}

/*	#	Funzione di caricamento testo													#	*/

/*	#	nomeFile = il nome del file da richiamare										#	*/

/*	#	nomeElemento = il nome dell'elemento del quale cambiare il contenuto	#	*/

/*	#	metodo = metodo di invio richiesta [post o get]								#	*/

/*	#	stringaPost = coppie variabile-valore da passare come POST				#	*/

function caricaTesto(nomeFile,nomeElemento,metodo,stringaPost,fading) 
{
   // assegnazione oggetto XMLHttpRequest

   var ajax = assegnaXMLHttpRequest(),

   // assegnazione elemento del documento
   elemento = prendiElementoDaId(nomeElemento),

   // risultato booleano di funzione
   usaLink = true;

    // se l'oggetto XMLHttpRequest non è nullo
	if(ajax) 
	{
		//mostro il preload
		//elemento.style.textAlign='center';
		//elemento.innerHTML = "<img src='../script/ajax-loader.gif' align='center' /><br /><br />";

		// il link al file non deve essere usato
		usaLink = false;

		//verifico il valore di metodo e imposto quello di default
		if ((metodo != 'get') && (metodo != 'post')) 
		{
			metodo = 'get';
		}

		// impostazione richiesta asincrona in GET del file specificato
		ajax.open(metodo, nomeFile, true);

		//nel caso devo inviare i dati in POST: aggiungo l'impostazione dell'header
		if (metodo == 'post') 
		{
			ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		} 
		else 
		{
    	    //nel caso devo inviare i dati in GET: annullo la stringa con le coppie chiave/valore	
			stringaPost = null;
		}

		// impostazione controllo e stato della richiesta
		ajax.onreadystatechange = 
		function() 
		{
		    // verifica dello stato
		    if(ajax.readyState === readyState.COMPLETATO) 
		    {

			    elemento.style.textAlign='left';
			    // verifica della risposta da parte del server
			    if(statusText[ajax.status] === "OK")
                {
			        if(fading){
						testoHtml=ajax.responseText;
						fadeOut(nomeElemento, 2000, testoHtml);
						//setInterval(innerDiv(nomeElemento, testoHtml), 500);
					}
					else
						// visualizzazione risultato parsing
						elemento.innerHTML = unescape(ajax.responseText);
                }
			    else
			    {
				    // errore di caricamento
				    elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />" +	"Errore riscontrato: " + statusText[ajax.status];
			    }
               //per spostare il div in basso
               elemento = prendiElementoDaId(nomeElemento)
               elemento.innerHTML = elemento.innerHTML;

    		}
        }
		// invio richiesta
		ajax.send(stringaPost);
	}
	return usaLink;
} 

function caricaTesto2(nomeFile,nomeElemento,metodo,stringaPost) 
{
   // assegnazione oggetto XMLHttpRequest

   var ajax = assegnaXMLHttpRequest(),

   // assegnazione elemento del documento
   elemento = prendiElementoDaId(nomeElemento),

   // risultato booleano di funzione
   usaLink = true;

    // se l'oggetto XMLHttpRequest non è nullo
	if(ajax) 
	{
		//mostro il preload
		elemento.style.textAlign='center';
		elemento.innerHTML = "<img src='../script/ajax-loader.gif' align='center' style='margin:3px 0 14px 0;' />";

		// il link al file non deve essere usato
		usaLink = false;

		//verifico il valore di metodo e imposto quello di default
		if ((metodo != 'get') && (metodo != 'post')) 
		{
			metodo = 'get';
		}

		// impostazione richiesta asincrona in GET del file specificato
		ajax.open(metodo, nomeFile, true);

		//nel caso devo inviare i dati in POST: aggiungo l'impostazione dell'header
		if (metodo == 'post') 
		{
			ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		} 
		else 
		{
    	    //nel caso devo inviare i dati in GET: annullo la stringa con le coppie chiave/valore	
			stringaPost = null;
		}

		// impostazione controllo e stato della richiesta
		ajax.onreadystatechange = 
		function() 
		{
		    // verifica dello stato
		    if(ajax.readyState === readyState.COMPLETATO) 
		    {

			    elemento.style.textAlign='left';
			    // verifica della risposta da parte del server
			    if(statusText[ajax.status] === "OK")
                {
					// visualizzazione risultato parsing
					elemento.innerHTML = unescape(ajax.responseText);
                }
			    else
			    {
				    // errore di caricamento
				    elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />" +	"Errore riscontrato: " + statusText[ajax.status];
			    }
               //per spostare il div in basso
               elemento = prendiElementoDaId(nomeElemento)
               elemento.innerHTML = elemento.innerHTML;

    		}
        }
		// invio richiesta
		ajax.send(stringaPost);
	}
	return usaLink;
} 


function innerDiv(nomeElemento, testoHtml){
	elemento = prendiElementoDaId(nomeElemento);
	elemento.innerHTML = unescape(testoHtml);
}

// PER RECUPERARE UN ELEMENTO DATO UN ID

function prendiElementoDaId(id_elemento) 
{
	var elemento;

	if(document.getElementById)
    {
		elemento = document.getElementById(id_elemento);
    }
	else
    {
		elemento = document.all[id_elemento];
    }
	return elemento;
}


//fade elemento
function fadeOut(divID, time, testoHtml) {
 
  var speed = Math.round(time / 100); //arrotonda il valore della divisione
  var frame = 0;
 
  for(fade = 100; fade > 0; fade--) {
    setTimeout("setOpacity('"+divID+"', "+fade+")", (speed * frame));
    frame++;
  }
	elemento = prendiElementoDaId(divID);
	elemento.innerHTML =  unescape(testoHtml);
	
frame = 0;
 for(fade = 0; fade < 100; fade++) {
    setTimeout("setOpacity('"+divID+"', "+fade+")", (speed * frame));
    frame++;
  }
}

function setOpacity(id, opacity) {
 
  var element = document.getElementById(id);
 
  if(document.all) // se sto usando internet explorer
    element.style.filter = "alpha(opacity=" + opacity + ")";
  else
    element.style.opacity = opacity / 100;
 
}

/*	#	#	#	#	#	#	#	#	*/

/*	#	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";
