  var ctrlbusy;
  var RequestTimer;
  // *********************** requete AJAX *************************************
  function requetteHTTP(choix,params) { // en option idbusy,mess,color,opacity
      if (RequestTimer) return;
      var idbusy="wait";
      var mess="Enregistre";
      var busycolor="Black";
      var opacity=0.5;
      var stylebusy='color:white;font-size:20px;';
      var target='index.php';

      var gobusy=false;

      if (arguments[2]) target=arguments[2];
      if (arguments[3]) {idbusy=arguments[3];gobusy=true;alert(idbusy);}
      if (arguments[4]) mess=arguments[4];
      if (arguments[5]) busycolor=arguments[5];
      if (arguments[6]) opacity=arguments[6];
      if (arguments[7]) stylebusy=arguments[7];

      if (gobusy) {
         ctrlbusy = getBusyOverlay(recupereId(idbusy),{color: busycolor, opacity: opacity, text:mess,style:stylebusy});
      }


     if(window.XMLHttpRequest) {// Firefox
          xhr_object = new XMLHttpRequest();}
     else if(window.ActiveXObject) // Internet Explorer
               xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
          else { // XMLHttpRequest non supporté par le navigateur
               alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
               return;
          }

     var RequestTimer= setTimeout (
         function () {xhr_object.abort();
                      alert('Pas de réponse du serveur, abandon du processus');
                      if (ctrlbusy) ctrlbusy.remove();},40000); // 40s
     xhr_object.open("POST", target, true);
     firefox3_5=true;
     testbusy=false;
     if (IE) firefox3_5=false;
     if (firefox3_5) xhr_object.onload = xhr_object.onerror = xhr_object.onabort = function(){
        clearTimeout(RequestTimer);
        try {
            eval(xhr_object.responseText);
        } catch(err) {
            messerr="Exception détectée, exécution du bloc eval\n";
            messerr=messerr+"Nom de l'erreur : " + err.name+"\n";
            messerr=messerr+"Message d'erreur : " + err.message+"\n";
            switch (err.name) {
               case 'TypeError':  // bizzarerie de chrome ??
                    break;
               case 'NS_ERROR_DOM_NOT_FOUND_ERR':
                    break;
               default:
                   alert(messerr);
                   break;
            }
            if (ctrlbusy) ctrlbusy.remove();
        } finally {
            //document.writeln("Exécution du bloc finally")
        }
     };
     else xhr_object.onreadystatechange = function() {
          if (xhr_object.readyState == 4) {
             if (xhr_object.status == 200) {
                 window.clearTimeout(RequestTimer);
                 RequestTimer=null;
                 if (RequestTimer) {
                    alert('pas éteint!!');
                 }
                 try {
                     eval(xhr_object.responseText);
                 } catch(err) {
                     messerr="Exception détectée, exécution du bloc eval\n";
                     messerr=messerr+"Nom de l'erreur : " + err.name+"\n";
                     messerr=messerr+"Message d'erreur : " + err.message+"\n";
                     switch (err.name) {
                          case 'NS_ERROR_DOM_NOT_FOUND_ERR':
                               break;
                           case 'Error':    //bizzarerie de IE   ??
                               break;
                          default:
                              alert(messerr);
                              break;
                     }
                     if (ctrlbusy) ctrlbusy.remove();
                 } finally {
                     //document.writeln("Exécution du bloc finally")
                 }
             }
             else alert(xhr_object.status);
          }
     }

     xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

     var data = "choix="+choix;

     if (params!="") data=data+"&"+params;
     xhr_object.send(data);
  }

  /* --- affiche un message d'alerte avant de lancer la requete Ajax ---*/
  function AlertHTTP(message,params,choix) {
      if (confirm(message)) {
              requetteHTTP(choix,params);
      }
  }

  /* --- redirige un post de formulaire vers une requete Ajax ---*/
  function postForm(choix,myform) { // en option idbusy,mess,color,opacity
      var idbusy="wait";
      var mess="Enregistre";
      var busycolor="Black";
      var opacity=0.5;
      var stylebusy='color:white;font-size:20px;';
      var target='index.php';

      if (arguments[2]) idbusy=arguments[2];
      if (arguments[3]) mess=arguments[3];
      if (arguments[4]) busycolor=arguments[4];
      if (arguments[5]) opacity=arguments[5];
      if (arguments[6]) stylebusy=arguments[6];
      if (arguments[7]) target=arguments[7];

      var post="";
      for (i = 0; i <myform.elements.length ; i++) {
          val=html_entity_decode(myform.elements[i].value)
          if (i!=0) post=post+"&"+myform.elements[i].name+"="+val;
          else post=post+myform.elements[i].name+"="+val;
      }
      if (idbusy!='' && idbusy!='*') {
         //ctrlbusy = getBusyOverlay(recupereId(idbusy),{color: busycolor, opacity: opacity, text:mess,style:stylebusy});
         ctrlbusy = getBusyOverlay(recupereId(idbusy),{color: busycolor, opacity: 0, text:mess,style:stylebusy},{color:'black', size:16, type:'c', iradius:8, weight:16});
      }
      requetteHTTP(choix,post,target);
  }

  // récupère une valeur de liste (source) et envoi une requete pour récupérer une liste de valeurs (destination)

  function updateSelect(choix,params) {

      var target='index.php';
      if (arguments[2]) target=arguments[2];
      url=extractURL(params);
      var myform=document.forms[url['form']];
      src=myform.elements[url["name_src"]].value;
      //alert(url["name_src"]+" "+url["name_dest"]+" "+url["form"]);
      params=params+"&seg="+src;
      requetteHTTP(choix,params,target);
  }
