// Yahoo!

  function xGetElementById(e)
  {
     if(typeof(e)!='string') return e;
     if(document.getElementById) e=document.getElementById(e);
           else if(document.all) e=document.all[e];
	                    else e=null;
     return e;
  }

  ////////////////////////////////////////////////////////////////
  // http://java.sun.com/developer/technicalArticles/J2EE/AJAX/RealtimeValidation/
  ////////////////////////////////////////////////////////////////
  // Nicolas : problème ne prévoit que 3 arguments pour l'appel de la callback
  function AJAXInteraction(url, callback, name, arg1, arg2, arg3)
  {
    var req = init();
    req.onreadystatechange = processRequest;

    function init() {
      if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
       } else if (window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
       }
    }

    function processRequest () {
      // readyState of 4 signifies request is complete
      if (req.readyState == 4) {
        // status of 200 signifies sucessful HTTP call
        if (req.status == 200) {
          // if (callback) callback(req.responseXML, name, arg1, arg2, arg3);
          if (callback) callback(req, name, arg1, arg2, arg3);
        }
      }
    }

    this.doGet = function() {
      // make a HTTP GET request to the URL asynchronously
      req.open("GET", url, true);
      req.send(null);
		
    }
  }

  // Nicolas
  function form_to_url( elt )
  {
    var u='';
    var Telts =elt.childNodes;
    var nb_elt=Telts.length;

    for(var i=0; i<nb_elt; i++) {
      elt=Telts[i];
      // nodeType
      // ELEMENT_NODE : 1
      // TEXT_NODE : 3
      // nodeName : INPUT  FIELDSET...
      // Ignorer les champs 'button' sauf pour celui qui est actif...

      // if (elt && elt.type && elt.type=='submit')
      // {
      //   alert( 'n=' + elt.name + ' t=' + elt.type + ' v=' + elt.value +
      //          ' dv=' + elt.defaultvalue + ' s=' + elt.size + ' ml=' + elt.maxlength +
      //          ' c=' + elt.checked + ' d=' + elt.disabled + ' r=' + elt.readOnly);
      // }

      if (elt && elt.name && elt.value) {
        var key=encodeURIComponent(elt.name);
        var val=encodeURIComponent(elt.value);
        if (key!="AJAX") u+= "&" + key + "=" + val;
      }
      u+=form_to_url(elt);
    }
    return u;
  }

  // Nicolas
  function validate_form_ex(f, name, arg1, arg2, arg3, resetDiv)
  {
    // Si on veux faire une anim d'attente
    if (resetDiv!='')
    {
      var div = xGetElementById(resetDiv);
      if (div) div.innerHTML = '<div style="text-align:center;font-weight:bold;color:#4E90B3;padding:30px">Chargement en cours...<br /><br /><img src="' + FTP + '/img/wait.gif" alt="" /></div>';
    }

    var url = "/php/main_new_api.php?AJAX=1";

    // Ajout des champs du formulaire qui vient d'être validé (format GET)
    if (f!=null) url+=form_to_url(f);

	 
    // Appel du serveur avec le formulaire
    var ajax = new AJAXInteraction(url, validateCallback, name, arg1, arg2, arg3);
    ajax.doGet();
	
	
    // En attendant la réponse, ne rien faire
	
    return false;
  }
  
   // Nicolas
  function validate_url(url, name, arg1, arg2, arg3, resetDiv)
  {
    // Si on veux faire une anim d'attente
    if (resetDiv!='')
    {
      var div = xGetElementById(resetDiv);
      if (div) div.innerHTML = '<div style="clear:both;text-align:center;font-weight:bold;color:#1A3483;padding:30px">Chargement en cours...<br /><br /><img src="' + FTP + '/img/wait.gif" alt="" /></div>';
    }

   
    // Ajout des champs du formulaire qui vient d'être validé (format GET)
    if (url!=null) url+="&AJAX=1";

	 
		
    // Appel du serveur avec le formulaire
    var ajax = new AJAXInteraction(url, validateCallback, name, arg1, arg2, arg3);
    ajax.doGet();
	
	
    // En attendant la réponse, ne rien faire
	
    return false;
  }

  // req : requete de retour :  req.responseXML et req.responseText
  // name : id du div pour l'affichage
  // arg1,arg2,arg3 : arguments perso...
  function validateCallback(req, name, arg1, arg2, arg3) 
  {
    // Attention, le div d'attente n'est pas remis à zéro (il l'est si name==div d'attente)
    // var msg = req.responseXML
    var msg = req.responseText;

    xGetElementById(name).innerHTML=msg;
  }

  // Nicolas
  function load_tri_garantie( f )
  {
    var name='ajax'; // Nom du div principal
    var arg1=''; // Numéro de catégorie ou autres infos utilises pour la suite (en JS)
    var arg2='';
    var arg3='';
    var resetDiv='ajax'; // Nom du div d'attente

    return validate_form_ex(f, name, arg1, arg2, arg3, resetDiv);
  }
  
  // Nicolas
  function load_next_garantie(url)
  {
    var name='ajax'; // Nom du div principal
    var arg1=''; // Numéro de catégorie ou autres infos utilises pour la suite (en JS)
    var arg2='';
    var arg3='';
    var resetDiv='ajax'; // Nom du div d'attente

    return validate_url(url, name, arg1, arg2, arg3, resetDiv);
  }
