// Objet d'accès Ajax   www.citemaison.fr Arnaud Sellé
// coeur inspiré de Feather Ajax (http://celtickane.com/programming/code/ajax.php)
// interfaces inspirées de XHRConnection (http://www.sutekidane.net)
function AjaxObject() {
 this.createRequestObject = function() {
  try {
   var ro = new XMLHttpRequest();
  }
  catch (e) {
   var ro = new ActiveXObject("Microsoft.XMLHTTP"); // IE6
  }
  return ro;
 }
 // envoi requête ajax et attente réponse
 this.sendAndLoad = function(url, action) {
  if (action.toUpperCase() == "POST") {
   this.http.open(action,url,true);
   this.http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
   this.http.onreadystatechange = this.handleResponse;
   this.http.send(data);
  }
  else {
   this.http.open(action,url + '?' + data,true);
   this.http.onreadystatechange = this.handleResponse;
   this.http.send(null);
  }
 }
 this.handleResponse = function() {
  if ( me.http.readyState == 4) {
   if (typeof me.funcDone == 'function') { me.funcDone();}
    if (typeof me.callBack == "function") {
     me.callBack(me.http);
     return;
    }
  }
  if ((me.http.readyState == 1) && (typeof me.funcWait == 'function')) { me.funcWait(); }
 }
 // passage de paramètres pour la requête POST
 this.appendData = function(pfield, pvalue) {
   // remplir la variable passée par POST avec les chaines "param1=val1&param2val2" etc (pas de & au début !)
  data += (data.length == 0) ? pfield+ "=" + escape(pvalue) : "&" + pfield + "=" + escape(pvalue);
 };
 
 // init variables
 var me = this;
 this.http = this.createRequestObject();

 var funcWait = null;     // fonction javascript invoquée avant envoi requête (p.ex. afficher sablier)
 var funcDone = null;     // fonction javascript invoquée après réception réponse (p.ex. effacer sablier)
 var callBack = null;     // fonction javascript à appeler à réception de réponse AJAX
 var data = new String(); // données paramètres POST
}