/********************************************************************************************************/
/*********************************************Ajax******************************************************/
/*******************************************************************************************************/
//  L'objet Ajax regroupe les méthodes:
//   - XMLHttpRequest() permettant de créer une liaison http vers le serveur
//         @return : objet permettant de gérer un liaison asynchrone ou synchrone vers un serveur
/********************************************************************************************************/
AJAX = {
  // XMLHttpRequest() permettant de créer une liaison http vers le serveur
  //      @return : objet permettant de gérer un liaison asynchrone ou synchrone vers un serveur
  //      @modif : 22-01-2009 par Renaud Lerognon : Mise en forme, indentation, commentaires
  XMLHttpRequest: function ()
  {
    // Création d'un objet requete
    var objRequete = null;
    // On essaie
    try 
    { 
      // Ajax pour un navigateur de Microsoft
      objRequete = new ActiveXObject("Microsoft.XMLHTTP");
    } // try
    // On attrape l'erreur
    catch(Error) 
    { 
      // On essaie
      try 
      { 
        // Ajax pour les autres navigateurs de Microsoft
        objRequete = new ActiveXObject("MSXML2.XMLHTTP");
      } // try
      // On attrape l'erreur
      catch(Error) 
      { 
        // On essaie
        try 
        { 
          // Ajax pour les autres navigateurs
          objRequete = new XMLHttpRequest();
        } // try
        // On attrape l'erreur
        catch(Error) 
        { 
          // Le navigateur ne supporte pas l'AJAX
          alert(' Impossible de créer l\'objet XMLHttpRequest')
        } // catch
      } // catch
    } // catch
    return  objRequete;
  }, // XMLHttpRequest
  
  // Requete() permettant d'envoyer une requete Ajax
  //      @modif : 22-01-2009 par Renaud Lerognon : Mise en forme, indentation, commentaires, rajout des paramètres
  //      @params : Mode : Mode d'envoie de la requête (GET ou POST)
  //                Fichier : Adresse du fichier
  //                Params :  Paramètre d'envoie de la requete
  //                Fonction : Fonction appelé pour la gestion de la récupération
  Requete : function (Mode, Fichier, Params, Fonction, Callback)
  {
      // Création d'un objet XMLHttpRequestObject
      var Req = AJAX.XMLHttpRequest();
      
      // Lorsque le status de la requête change
      Req.onreadystatechange= function()
      {
        // Si
        if (4 == Req.readyState) 
        {
          Fonction (Req);
					
					// Exécution des javascripts
					AJAX.Eval_Js (Req.responseText);
					
					// Si il y a une fonction callback
					if (null != Callback)
					{
						// On évalue la callback
						eval(Callback);
					} // if     
        } // if
			} // Req.onreadystatechange
      
      // Les paramètres ne marche pas pareil en GET et en POST
      // Initialisation des paramtères
      var ParamsPost  = null;
      var ParamsGet   = '';
      
      // Si on est en mode GET
      if ('GET' == Mode)
      {
        // On change la variable des paramètres GET
        ParamsGet = '?'+Params
      } // if
      
      // Si on est en mode POST
      if ('POST' == Mode)
      {
        // On change la variable des paramètres POST
        ParamsPost = Params;
      } // if
      
      // On appelle le Fichier avec les paramtères qui vont bien et selon le Mode
      Req.open(Mode, Fichier+ParamsGet, true); // true pour Asynchrone
      Req.send(ParamsPost);
			
			return Req;
  }, // Requete ()
  
  // Contenu() permettant de récuperer une requete Ajax dans un élément Id
  //      @params : Mode : Mode d'envoie de la requête (GET ou POST)
  //                Fichier : Adresse du fichier
  //                Params :  Paramètre d'envoie de la requete
  //                Id : Identifiant de l'élement qui récuperera le résultat (dans le cas où Fonction est null)
  //                Callback, fonction appele après la requete Ajax
  //                Type : Xml ou Text
  Contenu : function (Mode, Fichier, Params, Id, Callback, Type)
  {
    // Element cible
    var Cible = document.getElementById (Id);
    
    // Définition de l'action de la fonction
    Fonction = function (Objet_Requete)
    {
      // Si on récupère un fichier du type Xml
      if ('Xml' == Type)
      {
        // On affiche la réponse en Xml
        Cible.innerHTML = Objet_Requete.responseXml;
      } // if
      // Sinon, en texte brut
      else
      {
        // On affiche la réponse en Text
        Cible.innerHTML = Objet_Requete.responseText;
      } // else
    } // Fonction ()
    
    // Objet Requete Ajax
    var Objet_Requete = AJAX.Requete (Mode, Fichier, Params, Fonction, Callback);
  }, // Contenu ()
  
  // Affiche l'apercu d'un site dans un cadra à l'aider d'une iframe
  //      @params : Fichier : Adresse du fichier
  //                Params :  Paramètre d'envoie de la requete
  //                Id : Identifiant de l'élement qui récuperera le résultat (dans le cas où Fonction est null)
  //                Callback, fonction appele après la requete Ajax
  Apercu : function (Fichier, Params, Id, Callback)
  {
    // Element cible
    var Cible = document.getElementById (Id);
    
    // Variable lien, pour eviter les répetitions de code
    var Lien = Fichier +'?'+ Params;
    
    Cible.innerHTML = '<iframe class="apercu" src="'+ Lien +'">'
                      +'<p>Impossible d\'afficher l\'apercu du site.<br /><a href="'+ Lien +'"Cliquez sur ce lien pour y acceder</a></p>';

    if (null != Callback)
    {
      eval(Callback);
    } // if
  }, // Apercu

	// Exécute les scripts javascript à l'intérieur d'une page appelé en Ajax
	Eval_Js : function (Contenu_Page)
	{
		/*
		var Reg_Exp = new RegExp ('.*<script[^>]*>(.+)<\/script>.*', 'gi');
		Reg_Exp.multiline = true;
		alert (Contenu_Page);
		alert (Reg_Exp.exec(Contenu_Page));
		*/
	} // Eval_Js
}; // Ajax