/*
 * FrontEndUtility.js
 * Funzioni per l'implementazione della tecnologia AJAX
 * Data creazione 30-04-2008
 */
  
  /*
   * Funzione per assegnare l'oggetto XMLHttpRequest
   * La funzione dovrebbe essere cross browser
   */
   function setXMLHttpRequest(){
     // variabile di return defoltata a null
     var XHR = null;
     var userBrowser = null;
     
     // recupero il browser utilizzato e lo converto in maiuscolo
     userBrowser = navigator.userAgent.toUpperCase();
     
     if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object"){
       // browser standard con supporto nativo del metodo XMLHttpRequest
       XHR = new XMLHttpRequest();
     }else if(window.ActiveXObject && userBrowser.indexOf("MSIE 4") < 0){
       //Per IE è necessario controllare la versione
       //la versione 4 non lo supporta correttamente quindi la scartiamo
       
       //La versione 6 di IE ha un nome diverso per l'oggetto ActiveX
       if (userBrowser.indexOf("MSIE 5") < 0){
         XHR = new ActiveXObject("Msxml2.XMLHTTP");
       }else{
         //Le versioni 5 e 5.5 invece utilizzano lo stesso nome
         XHR = new ActiveXObject("Microsoft.XMLHTTP");
       }
     }
     
     return XHR;
     
   } // fine function setXMLHttpRequest
   /****************************************************************/

 /*
  * Ritorna il riferimento al tag HTML con id="element_id"
  * La funzione dovrebbe essere cross browser
  */
  function getEleId(element_id){
    var elemento;
    
    if (document.getElementById){
      // Se esiste il metodo getElementById lo utilizzo e ritorno il puntatore dell'elemento passato
      //alert('document.getElementById');
      elemento = document.getElementById(element_id);
    }else{ 
      // Il browser utilizzato non supporta il metodo getElementById
      //alert('document.all');
      elemento = document.all[element_id];
    }
    
    return elemento;
    
  } // fine function getEleId
  /****************************************************************/

  var ajaxInstance = setXMLHttpRequest();
  var free = true;
  var vpage;
  var targetdiv;
  var vload = "<div class=\"loading\">"
            + "<img src=\"php/script/loader/Bar1.gif\" alt=\"Loading...\" title=\"Loading...\">"
            + "</div>";

  function buildTarget(link, divname) {
    
    // alert(link);
    // alert(divname);
    
    targetdiv = divname;
    
    // preparo e invio la richiesta AJAX
    ajaxInstance.open('get', link, true);
    ajaxInstance.setRequestHeader("connection", "close");
    
    // monitorizzo la risposta del server
    ajaxInstance.onreadystatechange = handleResponse;
    ajaxInstance.send(null);
  } // fine function buildTarget
  /****************************************************************/
  
  function handleResponse() {
    var myValues = 0;
    // Il testo di ritorno dello script php è diviso in due parti per mezzo di ||
    // la prima parte corrisponde all'id dell'elemento che si andrà a popolare
    // la seconda è il testo o codice html che verrà stampato
    if(ajaxInstance.readyState == 4){
      var response = ajaxInstance.responseText;
      var update = new Array();
      var val = new Array();
  
      free = true;
  
      //alert(response);
      getEleId(targetdiv).innerHTML = '';

      //##############################################################
      //alert(response);
      //##############################################################
      if(response.indexOf('||') != -1){
        update = response.split('||');
        getEleId(update[0]).innerHTML = update[1];
      }else{
        alert('FrontEndUtility: RESPONS ERROR!\n\n' + response);
      }
      
    }else{
      // la risposta del servere non è ancora completa
      free = false;
      //alert("Status " + ajaxInstance.readyState);

      // la risposta del servere non è ancora completa
      // mostro un'immagine di attesa
      //getEleId(targetdiv).className = 'load';

      getEleId(targetdiv).innerHTML = vload;
    }
  } // fine function handleResponse
  /****************************************************************/

    // registra la posizione corrente per l'array delle sezioni
    var count        = 0;
    var section2load = new Array();
    var mode         = 'X';
    var vParams      = '';
    
    //[0] funzione PHP per la generazione della sezione
    //[1] ID del tag da popolare
    //[2] indica se la sezione deve essere caricata, gestito a runtime dalla initBody()
    
    var steps = new Array();
    steps[0] = new Array("php/function/createBody.php", "corpo_left", false);
    steps[1] = new Array("php/function/createIsle.php", "corpo_rigth", false);
    steps[2] = new Array("php/function/createFooter.php", "footerPlace", false);
    // il menu è l'ultimo per evitare che l'utente utilizzi i link prima di aver caricato l'intera pagina
    // steps[3] = new Array("php/function/createMenu.php", "menu", false);

  // l'intero sito utilizza questa funzione per la navigazione
  // serve per valorizzare le variabili "globali"
  function init(page, sections, params){
    vpage = page;
    vParams = params;
    
    //alert("Page: " + vpage + " - Sections: " + sections + " - vParams: " + vParams);
    
    // di default carica tutte le sezioni
    var vAll = "0";
    for(var def=1; def < steps.length; def++){
      vAll = vAll + ',' + def;
    }

    if(sections == 'all'){
      section2load = vAll.split(',');
      mode = 'all';
    }else{
      section2load = sections.split(',');
      mode = "partial";
    }

    count = 0;
    // nascondo tutte le sezioni coinvolte
    for(var s=0; s < section2load.length; s++){      
      getEleId(steps[s][1]).innerHTML = vload;
    }
    
    //abilito il flag per la prima sezione richiesta
    steps[section2load[0]][2] = true;
    
    initBody();
    
  } // fine function init
  /****************************************************************/

  // Funzione per popolare in sequenza tutte le parti dinamiche del sito
  // richiama se stessa finchè la variabile free non è true
  // serve per non fare la seconda chiamata ajax senza che la prima sia terminata
  function initBody(){
    
    if (mode == 'all'){
      if(steps.length > count){
      
        if (free && steps[count][2]){
          buildTarget(steps[count][0] + "?page=" + vpage + "&tag=" + steps[count][1] + vParams, steps[count][1]);
          
          // disabilito la posizione corrente
          steps[count][2] = false;
      
          count++;
          
          if(steps.length > count){
            // abilito la prossima posizione
            steps[count][2] = true;
            initBody();
          }
        }else{
          setTimeout('initBody()', 500);
        }
      }
    }
    
    if (mode == 'partial'){
      
      if(section2load.length > count){
      
        if (free && steps[count][2]){
          buildTarget(steps[count][0] + "?page=" + vpage + "&tag=" + steps[count][1] + vParams, steps[count][1]);
          
          // disabilito la posizione corrente
          steps[count][2] = false;
      
          count++;
          
          if(steps.length > count){
            
            // abilito la prossima posizione
            steps[count][2] = true;
            initBody();
          }
        }else{
          setTimeout('initBody()', 500);
        }
      }

    } // fine if mode

} // fine function initBody

  /****************************************************************/