// memorizza un'istanza di XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
// memorizza l'indirizzo del server remoto e i parametri
var getOneFeedbackAddress = "http://www.esamediteoria.com/getOneFeedback.asp";
var sendFeedbackAddress = "http://www.esamediteoria.com/sendFeedback.asp";
var serverAddress = "http://www.esamediteoria.com/getDownloads.asp";
var serverParams = "num=1" + // quanti numeri casuali vogliamo
                   "&min=1" + // il numero minimo da generare
                   "&max=100"; // il numero massimo da generare

// crea un'istanza di XMLHttpRequest
function createXmlHttpRequestObject() 
{
  // memorizza il riferimento all'oggetto XMLHttpRequest
  var xmlHttp;
  // questo dovrebbe funzionare per tutti i browsers eccetto IE6 e precedenti
  try
  {
    // provo a creare un oggetto XMLHttpRequest
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
 
    // nel caso di IE6 o precedenti
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // proviamo ogni id finchè non funziona
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
    {
      try 
      { 
        // tentiamo di creare un oggetto XMLHttpRequest
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {}
    }
  }
  // Restituiamo l'oggetto creato o mostriamo un messaggio di errore
  if (!xmlHttp)
    alert("Errore durante la creazione dell'oggetto XMLHttpRequest.");
  else 
    return xmlHttp;
}

// chiama il server in modo asincrono
function sendFeedback(form){
	//alert(form.name.value);
  // continuiamo solo se xmlHttp non è null
  if (xmlHttp)  {
    // tentiamo di collegarci al server
    try{
      // chiediamo a mozilla il permesso di chiamare il server remoto, per i browser basati su Mozilla
      try{
       // questo genera un errore (che ignoriamo) se il browser non è
       // Mozilla
       netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
      }
      catch(e) {} // ignoriamo l'errore
      // iniziamo l'accesso al server
      xmlHttp.open("GET", sendFeedbackAddress + "?name=" + document.getElementById(form).name.value + "&feedback=" + document.getElementById(form).feedback.value, true);
      xmlHttp.onreadystatechange = handleRequestStateChangeFeedback;
      xmlHttp.send(null);
    }
    // in caso di fallimento mostriamo un errore
    catch (e){
      alert("Impossibile collegarsi al server:\n" + e.toString());
    }
  }

}
function getOneFeedback(){
	//alert(form.name.value);
  // continuiamo solo se xmlHttp non è null
  if (xmlHttp)  {
    // tentiamo di collegarci al server
    try{
      // chiediamo a mozilla il permesso di chiamare il server remoto, per i browser basati su Mozilla
      try{
       // questo genera un errore (che ignoriamo) se il browser non è
       // Mozilla
       netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
      }
      catch(e) {} // ignoriamo l'errore
      // iniziamo l'accesso al server
      xmlHttp.open("GET", getOneFeedbackAddress, true);
      xmlHttp.onreadystatechange = handleRequestStateChangeOneFeedback;
      xmlHttp.send(null);
    }
    // in caso di fallimento mostriamo un errore
    catch (e){
      alert("Impossibile collegarsi al server:\n" + e.toString());
    }
  }

}
function process(){
  // continuiamo solo se xmlHttp non è null
  if (xmlHttp)  {
    // tentiamo di collegarci al server
    try{
      // chiediamo a mozilla il permesso di chiamare il server remoto, per i browser basati su Mozilla
      try{
       // questo genera un errore (che ignoriamo) se il browser non è
       // Mozilla
       netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
      }
      catch(e) {} // ignoriamo l'errore
      // iniziamo l'accesso al server
      xmlHttp.open("GET", serverAddress + "?" + serverParams, true);
      xmlHttp.onreadystatechange = handleRequestStateChange;
      xmlHttp.send(null);
    }
    // in caso di fallimento mostriamo un errore
    catch (e){
      alert("Impossibile collegarsi al server:\n" + e.toString());
    }
  }
}

// funzione chiamata quando lo stato della richiesta  HTTP cambia
function handleRequestStateChange(){
  // quando lo stato è 4, siamo pronti a leggere la risposta del server
  if (xmlHttp.readyState == 4){ 
    // continuiamo solo se lo stato HTTP è "OK"
    if (xmlHttp.status == 200){
      try{
        // facciamo qualcosa con la risposta del server
        handleServerResponse();
      }
      catch(e){
        // mostriamo un messaggio di errore
        alert("Errore durante la lettura della risposta: " + e.toString());
      }
    }else{
      // mostriamo un messaggio di stato
      alert("C'è stato un problema nella ricezione dei dati:\n" + 
            xmlHttp.statusText);
    }
  }
}
// funzione chiamata quando lo stato della richiesta  HTTP cambia
function handleRequestStateChangeFeedback(){
  // quando lo stato è 4, siamo pronti a leggere la risposta del server
  if (xmlHttp.readyState == 4){ 
    // continuiamo solo se lo stato HTTP è "OK"
   // if (xmlHttp.status == 200){
      try{
        // facciamo qualcosa con la risposta del server
        handleServerResponseFeedback();
      }
      catch(e){
        // mostriamo un messaggio di errore
        alert("Errore durante la lettura della risposta: " + e.toString());
      }
    //}else{
      // mostriamo un messaggio di stato
    //  alert("C'è stato un problema nella ricezione dei dati:\n" + 
    //        xmlHttp.statusText);
    //}
  }
}
function handleRequestStateChangeOneFeedback(){
  // quando lo stato è 4, siamo pronti a leggere la risposta del server
  if (xmlHttp.readyState == 4){ 
    // continuiamo solo se lo stato HTTP è "OK"
   // if (xmlHttp.status == 200){
      try{
        // facciamo qualcosa con la risposta del server
        handleServerResponseOneFeedback();
      }
      catch(e){
        // mostriamo un messaggio di errore
        alert("Errore durante la lettura della risposta: " + e.toString());
      }
    //}else{
      // mostriamo un messaggio di stato
    //  alert("C'è stato un problema nella ricezione dei dati:\n" + 
    //        xmlHttp.statusText);
    //}
  }
}

// gestisce la risposta ricevuta dal server
function handleServerResponse(){
  // leggiamo la risposta del server
  var response = xmlHttp.responseText;
  // otteniamo un riferimento all'elemento <div> della pagina
  myDiv = document.getElementById('downloads');
  // Mostriamo l'output HTML
  myDiv.innerHTML = "" + response + "";
}
// gestisce la risposta ricevuta dal server
function handleServerResponseFeedback(){
  // leggiamo la risposta del server
  var response = xmlHttp.responseText;
  // otteniamo un riferimento all'elemento <div> della pagina
  myDiv = document.getElementById('feedbackDiv');
  // Mostriamo l'output HTML
  myDiv.innerHTML = "" + response + "";
}
function handleServerResponseOneFeedback(){
  // leggiamo la risposta del server
  var response = xmlHttp.responseText;
  // otteniamo un riferimento all'elemento <div> della pagina
  myDiv = document.getElementById('randomFeedbackDiv');
  // Mostriamo l'output HTML
  myDiv.innerHTML = "" + response + "";
}
