// instanza di un oggetto XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
var xmlHttp2 = createXmlHttpRequestObject2();
var xmlHttp3 = createXmlHttpRequestObject3();
var xmlHttp4 = createXmlHttpRequestObject4();
var xmlHttp5 = createXmlHttpRequestObject5();


// funzione per la creazione di un oggetti XMLHttpRequest
function createXmlHttpRequestObject()
{
  var xmlHttp;
  // dovrebbe funzionare per tutti i browsers ad eccezione di IE6 e precedenti
  try
  {
    // prova a creare un oggetto XMLHttpRequest
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    // IE6 o precedente
    var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
                                    'MSXML2.XMLHTTP.5.0',
                                    'MSXML2.XMLHTTP.4.0',
                                    'MSXML2.XMLHTTP.3.0',
                                    'MSXML2.XMLHTTP',
                                    'Microsoft.XMLHTTP');
    // prova tutte le versioni fino a quella corretta
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
    {
      try

      {
        // prova a creare un oggetto XMLHttpRequest
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e) {}
    }
  }
  // restituisce l'oggetto creato o un messaggio di errore
  if (!xmlHttp)
    alert("Errore durante la creazione di un oggetto XMLHttpRequest.");
  else
    return xmlHttp;
}


function createXmlHttpRequestObject2()
{
  var xmlHttp2;
  // dovrebbe funzionare per tutti i browsers ad eccezione di IE6 e precedenti
  try
  {
    // prova a creare un oggetto XMLHttpRequest
    xmlHttp2 = new XMLHttpRequest();
  }
  catch(e)
  {
    // IE6 o precedente
    var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
                                    'MSXML2.XMLHTTP.5.0',
                                    'MSXML2.XMLHTTP.4.0',
                                    'MSXML2.XMLHTTP.3.0',
                                    'MSXML2.XMLHTTP',
                                    'Microsoft.XMLHTTP');
    // prova tutte le versioni fino a quella corretta
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp2; i++)
    {
      try

      {
        // prova a creare un oggetto XMLHttpRequest
        xmlHttp2 = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e) {}
    }
  }
  // restituisce l'oggetto creato o un messaggio di errore
  if (!xmlHttp2)
    alert("Errore durante la creazione di un oggetto XMLHttpRequest.");
  else
    return xmlHttp2;
}

function createXmlHttpRequestObject3()
{
  var xmlHttp3;
  // dovrebbe funzionare per tutti i browsers ad eccezione di IE6 e precedenti
  try
  {
    // prova a creare un oggetto XMLHttpRequest
    xmlHttp3 = new XMLHttpRequest();
  }
  catch(e)
  {
    // IE6 o precedente
    var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
                                    'MSXML2.XMLHTTP.5.0',
                                    'MSXML2.XMLHTTP.4.0',
                                    'MSXML2.XMLHTTP.3.0',
                                    'MSXML2.XMLHTTP',
                                    'Microsoft.XMLHTTP');
    // prova tutte le versioni fino a quella corretta
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp3; i++)
    {
      try

      {
        // prova a creare un oggetto XMLHttpRequest
        xmlHttp3 = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e) {}
    }
  }
  // restituisce l'oggetto creato o un messaggio di errore
  if (!xmlHttp3)
    alert("Errore durante la creazione di un oggetto XMLHttpRequest.");
  else
    return xmlHttp3;
}

function createXmlHttpRequestObject4()
{
  var xmlHttp4;
  // dovrebbe funzionare per tutti i browsers ad eccezione di IE6 e precedenti
  try
  {
    // prova a creare un oggetto XMLHttpRequest
    xmlHttp4 = new XMLHttpRequest();
  }
  catch(e)
  {
    // IE6 o precedente
    var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
                                    'MSXML2.XMLHTTP.5.0',
                                    'MSXML2.XMLHTTP.4.0',
                                    'MSXML2.XMLHTTP.3.0',
                                    'MSXML2.XMLHTTP',
                                    'Microsoft.XMLHTTP');
    // prova tutte le versioni fino a quella corretta
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp4; i++)
    {
      try

      {
        // prova a creare un oggetto XMLHttpRequest
        xmlHttp4 = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e) {}
    }
  }
  // restituisce l'oggetto creato o un messaggio di errore
  if (!xmlHttp4)
    alert("Errore durante la creazione di un oggetto XMLHttpRequest.");
  else
    return xmlHttp4;
}

function createXmlHttpRequestObject5()
{
  var xmlHttp5;
  // dovrebbe funzionare per tutti i browsers ad eccezione di IE6 e precedenti
  try
  {
    // prova a creare un oggetto XMLHttpRequest
    xmlHttp5 = new XMLHttpRequest();
  }
  catch(e)
  {
    // IE6 o precedente
    var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
                                    'MSXML2.XMLHTTP.5.0',
                                    'MSXML2.XMLHTTP.4.0',
                                    'MSXML2.XMLHTTP.3.0',
                                    'MSXML2.XMLHTTP',
                                    'Microsoft.XMLHTTP');
    // prova tutte le versioni fino a quella corretta
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp5; i++)
    {
      try

      {
        // prova a creare un oggetto XMLHttpRequest
        xmlHttp5 = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e) {}
    }
  }
  // restituisce l'oggetto creato o un messaggio di errore
  if (!xmlHttp5)
    alert("Errore durante la creazione di un oggetto XMLHttpRequest.");
  else
    return xmlHttp5;
}











// esegue la funzione passata per parametro con il risultato dell'interrogazione all'url passato per parametro
function process(indirizzo,parametri,funzione)
{
	
  // prosegue solo se xmlHttp non è nullo
  if (xmlHttp)
  {
    // tenta di connettersi al server
    try
    {
      // effettua la lettura dall'indirizzo
      xmlHttp.open("POST", indirizzo, true);
      xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlHttp.setRequestHeader("Content-length", parametri.length);
      xmlHttp.setRequestHeader("Connection", "close");
      xmlHttp.onreadystatechange = gestCambStatoRequest;
      xmlHttp.send(parametri);
    }
    // messaggio di avviso nel caso di errore
    catch (e)
    {
      alert("Impossibile connettersi al server:\n" + e.toString());
    }
  }

  function gestCambStatoRequest()
  {
    // quando il readyState è 4, siamo in grado di leggere la risposta del server
    if (xmlHttp.readyState == 4)
    {
      // prosegue solo se lo status HTTP è 200=OK
      if (xmlHttp.status == 200)
      {
        try
        {
          // esegue la funzione passata per parametro		  
          funzione();
        }
        catch(e)
        {
          // messaggio di errore
          alert("Errore durante la lettura: " + e.toString());
        }
      }
      else
      {
		  /*
        // messaggio di errore
        alert("Si sono verificati problemi durante la lettura del risultato:\n" +
              xmlHttp.statusText);
		*/
		void(0);
      }

    }else{
		void(0);
  	}
  }
}


function process2(indirizzo,parametri,funzione)
{
	
  // prosegue solo se xmlHttp non è nullo
  if (xmlHttp2)
  {
    // tenta di connettersi al server
    try
    {
      // effettua la lettura dall'indirizzo
      xmlHttp2.open("POST", indirizzo, true);
      xmlHttp2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlHttp2.setRequestHeader("Content-length", parametri.length);
      xmlHttp2.setRequestHeader("Connection", "close");
      xmlHttp2.onreadystatechange = gestCambStatoRequest2;
      xmlHttp2.send(parametri);
    }
    // messaggio di avviso nel caso di errore
    catch (e)
    {
      alert("Impossibile connettersi al server:\n" + e.toString());
    }
  }

  function gestCambStatoRequest2()
  {
    // quando il readyState è 4, siamo in grado di leggere la risposta del server
    if (xmlHttp2.readyState == 4)
    {
      // prosegue solo se lo status HTTP è 200=OK
      if (xmlHttp2.status == 200)
      {
        try
        {
          // esegue la funzione passata per parametro		  
          funzione();
        }
        catch(e)
        {
          // messaggio di errore
          alert("Errore durante la lettura: " + e.toString());
        }
      }
      else
      {
        // messaggio di errore
        alert("Si sono verificati problemi durante la lettura del risultato:\n" +
              xmlHttp2.statusText);
      }
    }
  }
}

function process3(indirizzo,parametri,funzione)
{
	
  // prosegue solo se xmlHttp non è nullo
  if (xmlHttp3)
  {
    // tenta di connettersi al server
    try
    {
      // effettua la lettura dall'indirizzo
      xmlHttp3.open("POST", indirizzo, true);
      xmlHttp3.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlHttp3.setRequestHeader("Content-length", parametri.length);
      xmlHttp3.setRequestHeader("Connection", "close");
      xmlHttp3.onreadystatechange = gestCambStatoRequest3;
      xmlHttp3.send(parametri);
    }
    // messaggio di avviso nel caso di errore
    catch (e)
    {
      alert("Impossibile connettersi al server:\n" + e.toString());
    }
  }

  function gestCambStatoRequest3()
  {
    // quando il readyState è 4, siamo in grado di leggere la risposta del server
    if (xmlHttp3.readyState == 4)
    {
      // prosegue solo se lo status HTTP è 200=OK
      if (xmlHttp3.status == 200)
      {
        try
        {
          // esegue la funzione passata per parametro		  
          funzione();
        }
        catch(e)
        {
          // messaggio di errore
          alert("Errore durante la lettura: " + e.toString());
        }
      }
      else
      {
        // messaggio di errore
        alert("Si sono verificati problemi durante la lettura del risultato:\n" +
              xmlHttp3.statusText);
      }
    }
  }
}

function process4(indirizzo,parametri,funzione)
{
	
  // prosegue solo se xmlHttp non è nullo
  if (xmlHttp4)
  {
    // tenta di connettersi al server
    try
    {
      // effettua la lettura dall'indirizzo
      xmlHttp4.open("POST", indirizzo, true);
      xmlHttp4.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlHttp4.setRequestHeader("Content-length", parametri.length);
      xmlHttp4.setRequestHeader("Connection", "close");
      xmlHttp4.onreadystatechange = gestCambStatoRequest4;
      xmlHttp4.send(parametri);
    }
    // messaggio di avviso nel caso di errore
    catch (e)
    {
      alert("Impossibile connettersi al server:\n" + e.toString());
    }
  }

  function gestCambStatoRequest4()
  {
    // quando il readyState è 4, siamo in grado di leggere la risposta del server
    if (xmlHttp4.readyState == 4)
    {
      // prosegue solo se lo status HTTP è 200=OK
      if (xmlHttp4.status == 200)
      {
        try
        {
          // esegue la funzione passata per parametro		  
          funzione();
        }
        catch(e)
        {
          // messaggio di errore
          alert("Errore durante la lettura: " + e.toString());
        }
      }
      else
      {
        // messaggio di errore
        alert("Si sono verificati problemi durante la lettura del risultato:\n" +
              xmlHttp4.statusText);
      }
    }
  }
}

function process5(indirizzo,parametri,funzione)
{
	
  // prosegue solo se xmlHttp non è nullo
  if (xmlHttp5)
  {
    // tenta di connettersi al server
    try
    {
      // effettua la lettura dall'indirizzo
      xmlHttp5.open("POST", indirizzo, true);
      xmlHttp5.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlHttp5.setRequestHeader("Content-length", parametri.length);
      xmlHttp5.setRequestHeader("Connection", "close");
      xmlHttp5.onreadystatechange = gestCambStatoRequest5;
      xmlHttp5.send(parametri);
    }
    // messaggio di avviso nel caso di errore
    catch (e)
    {
      alert("Impossibile connettersi al server:\n" + e.toString());
    }
  }

  function gestCambStatoRequest5()
  {
    // quando il readyState è 4, siamo in grado di leggere la risposta del server
    if (xmlHttp5.readyState == 4)
    {
      // prosegue solo se lo status HTTP è 200=OK
      if (xmlHttp5.status == 200)
      {
        try
        {
          // esegue la funzione passata per parametro		  
          funzione();
        }
        catch(e)
        {
          // messaggio di errore
          alert("Errore durante la lettura: " + e.toString());
        }
      }
      else
      {
        // messaggio di errore
        alert("Si sono verificati problemi durante la lettura del risultato:\n" +
              xmlHttp5.statusText);
      }
    }
  }
}



