// Crossbrowser load function
function addEvent(elm, evType, fn, useCapture) {
  if (elm.addEventListener) elm.addEventListener(evType, function(ev) {fn(this, ev) }, useCapture);
  else if (elm.attachEvent) {
    elm[evType+fn] = function(){fn.call(elm);}
    elm.attachEvent( 'on'+evType, elm[evType+fn] );
  } else alert('Please upgrade your browser to use full functionality on this page');
}

function delEvent(elm, evType, fn, useCapture) {
  if (elm.removeEventListener) elm.removeEventListener(evType, fn, useCapture);
  else if (elm.detachEvent) {
    elm.detachEvent( 'on'+evType, elm[evType+fn] );
    elm[evType+fn] = null;
  } else alert('Please upgrade your browser to use full functionality on this page');
}
// -----------------------------------------

function ajaxGetObject(id) {
  var obj;
  if (id == null) return false;

  if (document.all) obj = document.all[id];
  else if (document.getElementById) obj = document.getElementById(id);
  else obj = null;

  if (!obj) return false;
  else return obj;
}

function myGO(id) { return ajaxGetObject(id);}
function objStyle(id) { return ajaxGetObject(id).style; }

function ajaxEvalJS(texte) {
  if (texte == '') return 0;

  var chaine = texte;
  index = chaine.indexOf('javascript">');
  while (index >= 0) {
    chaine = chaine.slice(index+12);
    index = chaine.indexOf("/script");

    if (index < 0) return 0;

    chaine2 = chaine.slice(0, index - 1);
    if (chaine2 != '') eval(chaine2);

    chaine = chaine.substr(index);
    index = chaine.indexOf('javascript">');
  }
}

function getHttpRequest () {
  var http_request;

  if (window.XMLHttpRequest) {
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) http_request.overrideMimeType('text/xml');
  } else
    if (window.ActiveXObject) {
      try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          http_request = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (e) {}
      }
    }

  if (!http_request) {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
  }

  return http_request;
}


function ajaxAsyncGetDocument(adresse, divID, divStatus) {
  var http_request;

  http_request = getHttpRequest();
  if (!http_request) return false;

  http_request.onreadystatechange = function () {
    switch (http_request.readyState) {
      case 0 : { alert('uninitialized'); break; }
      case 1 : { //loading
        var objST = myGO(divStatus);
        if (objST) {
          objST.innerHTML = "Actualisation...";
          objST.style.visibility = "visible";
        }
        break;
      }
      case 2 : { break; } //loaded
      case 3 : { //interactive
        if (myGO(divStatus)) myGO(divStatus).innerHTML = "Traitement...";
        break;
      }
      case 4 : { //complete
        if (http_request.status == 200) {
          var objST = myGO(divStatus);
          var obj   = myGO(divID);

          if (objST) objST.innerHTML = "Terminé";

          if (obj) obj.innerHTML = http_request.responseText;
          ajaxEvalJS(http_request.responseText);
          if (objST) objST.style.visibility = "hidden";
        } else if (objST) objST.innerHTML = "Erreur : "+http_request.status;
        break;
      }
    }
  }

  http_request.open('GET', adresse, true);
  http_request.send(null);
  return true;
}

function ajaxAsyncGetFct(adresse, id, fct_fin) {
  var http_request;

  http_request = getHttpRequest();
  if (!http_request) return false;

  http_request.onreadystatechange = function () {
  switch (http_request.readyState) {
      case 0 : { alert('uninitialized'); break; }
      case 4 : { //complete
        if (http_request.status == 200) {
          if (fct_fin) fct_fin(id, http_request.responseText);
        } else if (fct_fin) fct_fin(id, "Erreur : "+http_request.status);
        break;
      }
    }
  }
  http_request.open('GET', adresse, true);
  http_request.send(null);
  return true;
}

function ajaxGetDocument(adresse) {
  var http_request;
  var resultat;

  http_request = getHttpRequest();
  if (!http_request) return false;

  var function_body = function( my_http_request ) {
    if (my_http_request.readyState == 4) {
      resultat = my_http_request.responseText;
      ajaxEvalJS(resultat);
    }
  }

  // Hack parce que Firefox n'aime pas le synchrone
  try { // Firefox uses onload, but only when you have multiple AJAX requests going.
    http_request.onreadystatechange = function () {function_body( http_request ); };
    http_request.onload = function( e ) { function_body(http_request); }
  } catch (e) {  // IE does not have an onload handler, so bind the onreadystatechange
    http_request.onreadystatechange = function () {function_body( http_request ); };
  }

  http_request.open('GET', adresse, false);
  http_request.send(null);
  return resultat;
}

function noCache(sep) {
  var d = new Date();
  var trick = d.getYear() + "ie" + d.getMonth() + "t" + d.getDate() + "r" + d.getHours() + "i"
            + d.getMinutes() + "c" + d.getSeconds() + "k" + d.getMilliseconds();
  if (sep != "?") sep = "&";
  return sep + "noCache=" + trick;
}

