//##########################################################################################
// Variabili pubbliche
//##########################################################################################

	//SI=visualizza un errore di alert quando da errore nelle chiamate delle pagine
	//NO=non visualizza niente
var AttivaErroriDebug="NO";
	//SI=visualizza un errore di debug quando da errore nelle chiamate delle pagine all'interno del div
	//NO=non visualizza niente
var AttivaErroriDebugNelDiv="SI";

	//Url della gif loading
var UrlLoading = "/ajax/loading.gif"

var PUBRichiestaOccupata;
var PUBRichiesta;
var PUBNomeDiv;





//##########################################################################################
// Funzioni Ajax
//##########################################################################################


//==========================================================================================
// LanciaRichiesta()
//==========================================================================================

function LanciaRichiesta(UrlPagina,NomeFunzione,NomeDiv,Parametri)
{
	/*
	Funzione che lancia la richiesta che legge la pagina asp passandogli i parametri necessari
	Ogni millesimo di secondo controlla che non sia stata lanciata un'altra richiesta. Aspetta
	la conclusione della richiesta e poi lancia nuovamente quella corrente.
	
	Parametri input:
		UrlPagina: url da chiamare. (es: /cartella/Risposta.asp oppure http://www.sitoremoto.it/Risposta.asp)
		NomeFunzione: Nome della funzione javascript da chiamare. in questo modo gli si puņ dire quale funzione chiamare dopo aver letto la pagina xml
		NomeDiv: Nome del div da riempire
		Parametri: parametri da passare. es: p1=1&p2=2&p3=3
		
	Esempio:
		<a href="javascript:void(0)" onclick="LanciaRichiesta('Risposta.asp','RispostaAjaxHtml','DivContenutoHtml','p=mod&id=1');">Aggiorna</a>
    	<!-- Div Riempito dinamicamente -->
		<div id="DivContenutoHtml"></div><br>
		
		<a href="javascript:void(0)" onclick="LanciaRichiesta('Risposta2.asp','RispostaAjaxHtml','DivContenutoHtml2','p=mod&id=1');">Aggiorna2</a>
    	<!-- Div Riempito dinamicamente -->
		<div id="DivContenutoHtml2"></div><br>
	
	*/
	
			//tra un millesimo di secondo controllo che non ci sia un'altro processo aperto
		window.setTimeout(function(){Attendi(UrlPagina,NomeFunzione,NomeDiv,Parametri)}, 1)
}
function Attendi(UrlPagina,NomeFunzione,NomeDiv,Parametri)
{
	if (PUBRichiestaOccupata=="SI")
	{
		//alert("Attesa...")
		
			//tra un millesimo di secondo ri-controllo che non ci sia un'altro processo aperto
		window.setTimeout(function() {Attendi(UrlPagina,NomeFunzione,NomeDiv,Parametri)}, 1)
	}
	else
	{	
		//alert("Lancio funzione")
		
			//Lancio la funzione
		LanciaLettura(UrlPagina,NomeFunzione,NomeDiv,Parametri)
	}
}


//==========================================================================================
// LanciaLettura()
//==========================================================================================

function LanciaLettura(UrlPagina,NomeFunzione,NomeDiv,Parametri) 
{
	/*
	Funzione che legge la pagina asp passandogli i parametri necessari
	
	Parametri input:
		UrlPagina: url da chiamare. (es: /cartella/Risposta.asp oppure http://www.sitoremoto.it/Risposta.asp)
		NomeFunzione: Nome della funzione javascript da chiamare. in questo modo gli si puņ dire quale funzione chiamare dopo aver letto la pagina xml
		NomeDiv: Nome del div da riempire
		Parametri: parametri da passare. es: p1=1&p2=2&p3=3
		
	Esempio:
		<a href="javascript:void(0)" onclick="LanciaLettura('Risposta.asp','RispostaAjaxHtml','DivContenutoHtml','p=mod&id=1');">Aggiorna</a>
    	<!-- Div Riempito dinamicamente -->
		<div id="DivContenutoHtml"></div><br>
	
	*/
	
		//Percorso pagina asp da chiamare da default (es: /cartella/Risposta.asp oppure http://www.sitoremoto.it/Risposta.asp)
    var url = "";
    
    
	//-------------------------------------------------------------------------
		//All'inizio di tutto setto la richiesta come occupata
	PUBRichiestaOccupata="SI";
	//-------------------------------------------------------------------------
	
	
    
    if (UrlPagina!="")
    {
    		//Url da chiamare
	    url=UrlPagina;
	    	//Variabile globale
	    PUBNomeDiv=NomeDiv;
	    
	    	//Visualizzo il preload
		document.getElementById(NomeDiv).innerHTML="<img border=0 src='" + UrlLoading + "'>";
	
	    	//Aggiungo numero random ai parametri
	    var NrRandom = Math.random();
	    //NrRandom = Math.ceil(NrRandom * 100);
	    if (Parametri!=""){Parametri= Parametri + "&rnd=" + NrRandom;}
		else{Parametri= "rnd=" + NrRandom;}
 
	    PUBRichiesta = new RichiestaXmlHttp();
	    PUBRichiesta.onreadystatechange = eval(NomeFunzione);

	    	//Invio con metodo GET
	    PUBRichiesta.open("GET", url + "?" + Parametri, true);
	    	//Invio con metodo POST
	    //PUBRichiesta.open("POST", url, true);
	    
	    PUBRichiesta.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	    PUBRichiesta.setRequestHeader("Content-length", Parametri.length);
	    
	    	//Invio con metodo GET
	    PUBRichiesta.send(null);
	    	//Invio con metodo POST
	    //PUBRichiesta.send(Parametri);

	}
	else
	{
		alert('Url mancante.');
	}
}


//==========================================================================================
// RichiestaXmlHttp()
//==========================================================================================

function RichiestaXmlHttp() {
    PUBRichiesta = false;
    if (window.XMLHttpRequest && !(window.ActiveXObject))
    { 
    	try
    	{	PUBRichiesta = new XMLHttpRequest();	}
    	catch(e)
    	{	PUBRichiesta=false;	}
    }
    else {
        if (window.ActiveXObject) {
            try { PUBRichiesta = new ActiveXObject("Msxml2.XMLHTTP"); }
            catch (err1) {
                try { PUBRichiesta = new ActiveXObject("Microsoft.XMLHTTP"); }
                catch (err2)
				{ PUBRichiesta = false; }
            }
        }
    }
    return PUBRichiesta;
}






//##########################################################################################
// Funzioni di risposta personalizzabili
//##########################################################################################


//==========================================================================================
// RispostaAjaxHtml()
//==========================================================================================

function RispostaAjaxHtml()
{
	/*
	Funzione che legge l'html restituito dalla richiesta ajax e fa le operazioni necessarie
	
	
	*/

    if (PUBRichiesta.readyState == 4)
    {
    		//Visualizzo messaggi degli errori
    	ErroreChiamata=""
    	if (PUBRichiesta.status != 200){ErroreChiamata="Errore " + PUBRichiesta.status + " - " + PUBRichiesta.statusText}
    	if (PUBRichiesta.status == 404){ErroreChiamata="Errore 404 - Url non esistente"}
	    if (PUBRichiesta.status == 500){ErroreChiamata="Errore 500 - Errore interno nella pagina chiamata"}
    	if (AttivaErroriDebug=="SI" && ErroreChiamata!=""){alert(ErroreChiamata)}
		if (AttivaErroriDebugNelDiv=="SI" && ErroreChiamata!=""){document.getElementById(PUBNomeDiv).innerHTML="<img border=0 src='" + UrlLoading + "'> <font face=arial size=1 color=red>" + ErroreChiamata + "</font>"}
		
    	if (PUBRichiesta.status == 200)
    	{
    		var TestoHtml="";
    			//Azzero il contenuto del div
    		document.getElementById(PUBNomeDiv).innerHTML="";
    	
    		TestoHtml=PUBRichiesta.responseText;
    	
		    
		    	//Riempio il div col contenuto della tabella html
		    document.getElementById(PUBNomeDiv).innerHTML+=TestoHtml;
		    
		    
		    
		    
		    //-------------------------------------------------------------------------
		    	//Alla fine di tutto azzero la variabile che mi impegna il processo
		    PUBRichiestaOccupata="";
		    //-------------------------------------------------------------------------
        }
        else
        {
        	
        	//-------------------------------------------------------------------------
		    	//Azzero la variabile che mi impegna il processo
		    PUBRichiestaOccupata="";
		    //-------------------------------------------------------------------------
        }
    }
}






//==========================================================================================
// RispostaAjaxXml()
//==========================================================================================

function RispostaAjaxXml()
{
	/*
	Funzione che cicla i nodi xml letti dalla pagina asp e fa le operazioni necessarie
	
	
	*/
	
    if (PUBRichiesta.readyState == 4)
    {
    		//Visualizzo messaggi degli errori
    	ErroreChiamata=""
    	if (PUBRichiesta.status != 200){ErroreChiamata="Errore " + PUBRichiesta.status + " - " + PUBRichiesta.statusText}
    	if (PUBRichiesta.status == 404){ErroreChiamata="Errore 404 - Url non esistente"}
	    if (PUBRichiesta.status == 500){ErroreChiamata="Errore 500 - Errore interno nella pagina chiamata"}
    	if (AttivaErroriDebug=="SI" && ErroreChiamata!=""){alert(ErroreChiamata)}
		if (AttivaErroriDebugNelDiv=="SI" && ErroreChiamata!=""){document.getElementById(PUBNomeDiv).innerHTML="<img border=0 src='" + UrlLoading + "'> <font face=arial size=1 color=red>" + ErroreChiamata + "</font>"}		
    	
    	if (PUBRichiesta.status == 200)
    	{
    		var TestoHtml="";
    			//Azzero il contenuto del div
    		document.getElementById(PUBNomeDiv).innerHTML="";
    	
    	
		    //-----Ciclo i campi del file xml ricevuto
		    var opzioni = PUBRichiesta.responseXML.getElementsByTagName('Valore');
		    for (var i = 1; i <= opzioni.length; i++)
		    {
					//Riempio il div coi campi dell'xml
				TestoHtml+=opzioni[i - 1].childNodes[0].nodeValue;
		    }
		    
		    
		    	//Riempio il div col contenuto della tabella html
		    document.getElementById(PUBNomeDiv).innerHTML+=TestoHtml;
		    
		    
		    
		    
		    //-------------------------------------------------------------------------
		    	//Alla fine di tutto azzero la variabile che mi impegna il processo
		    PUBRichiestaOccupata="";
		    //-------------------------------------------------------------------------
        }
        else
        {
        	//-------------------------------------------------------------------------
		    	//Azzero la variabile che mi impegna il processo
		    PUBRichiestaOccupata="";
		    //-------------------------------------------------------------------------
        }
    }
}


