/*! @file ajax_interaction.js
*	@brief Fonctions javascript pour AJAX
*	@date 2008-05-27
*/

/*!
*	@fn G_get_xhr ()
*	@brief Initialise un objet XmlHttpRequest
*	@par Explication :
*	Initialise l'objet Xhr pour traiter des requetes Ajax
*/
function G_get_xhr ()
{
  if (window.XMLHttpRequest) // Firefox et autres
  {
    xhr = new XMLHttpRequest ();
  }
  else if (window.ActiveXObject)     // Internet Explorer
  {
    try
    {
      xhr = new ActiveXObject ("Msxml2.XMLHTTP"); // IE version > 5
    }
    catch(e)
    {
      xhr = new ActiveXObject ("Microsoft.XMLHTTP");
    }
  }
  else // XMLHttpRequest non supporté par le navigateur
  {
    alert ("Votre navigateur ne supporte pas les objets XMLHttpRequest !");
    xhr = false;
  }

  return xhr;
}  // G_get_xhr ()


/*!
*	@fn G_change_content (id_target, url, params, callback_function)
*	@param id_target Identifiant de la zone à mettre à jour
*	@param url Lien vers le script php
*	@param params Parametres à passer au script
*	@param callback_function Notion de callback, executer du javascript apres la requete
*	@brief Fonction pour traiter la requete Ajax
*	@par Explication :
*	Cette fonction est utilisée pour toutes les requetes Ajax
*/
function G_change_content (id_target, url, params, callback_function)
{
  var c = document.getElementById(id_target);
  //c.innerHTML = '<img src="/Commun/Img/loading.gif" alt="Chargement en cours"/>';

  var xhr = G_get_xhr ();  //Recupere la connexion au serveur http

  xhr.open ('POST', url, true);  //Ouvre la connexion avec le serveur http avec comme url url

  xhr.setRequestHeader ('Content-Type','application/x-www-form-urlencoded');
  //xhr.setRequestHeader ('Cache-Control','no-cache');

  xhr.send (params);//  Envoie l'url pour execution au serveur http avec les params

  // Execution en mode asynchrone de la fonction des que l'on obtient une reponse du serveur http
  xhr.onreadystatechange = function()
  {
    // Si on a tout reçu (4) et que le serveur est ok (200)
    // Modifie l'event ayant pour id_targetentificateur id_target suivant le programme url
    if(xhr.readyState == 4 && xhr.status == 200)
    {
      c.innerHTML = xhr.responseText;

      // Si on a du javascript on identifie les scripts et on force la valuation eval()
      var all_scripts = c.getElementsByTagName('script');
      var nb_scripts = all_scripts.length;

      for (var i = 0; i < nb_scripts; ++i)
      {
        window.eval (all_scripts[i].text);
      }

      if (callback_function != null)
      {
        window.eval (callback_function);
      }

    }///readyState
  }//onreadystatechange

}  // G_change_content() 
