/**** Fonctions pour l'user ****/

/*
  contentLoad(url, data, contentid, loading)
    Charge url dans un élément d'id contentid.
    
    url : chaîne de l'url
      ex. 'http://www.truc.com/bidule.php'
    data : chaîne url-encodée des données passées
      ex. 'foo=bar&bar=foo'
    contentid : chaîne du content id
      ex. 'myid'
    loading : si vrai, affiche la progression dans l'id
      dans un <p class="loading"></p>.

    Les erreurs sont affichées dans un
    <div class="error"></div>
    

  getFormData(formname)
    Renvoie la forme url-encodée du formulaire
    nommé formnam.
*/

/**** Initialisation ****/

var connexionState = new Array(
  'En attente',
  'Connexion au serveur',
  'Requ&ecirc;te transmise',
  'R&eacute;ception des donn&eacute;es');

var name = navigator.appName
var ie = (name == "Microsoft Internet Explorer");

/**** Bordel AJAX ****/

/* Petit script de Wikipedia pour avoir un ben objet xhr quel que soit le nav */
var xhr = false;

function initXHR() {
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
    if (xhr.overrideMimeType)
      xhr.overrideMimeType("text/text");
      // Petite modif ici.
  } else {
    if (window.ActiveXObject) {
      try { // essaie de charger l'objet pour IE
        xhr = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try { // essaie de charger l'objet pour une autre version IE
          xhr = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
          window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
        }
      }
    }
  }
}

/* Voici la gestion séquencielle de tout ce bordel */
var xhrTab = new Array();
var xhrTabN = 0;
var xhrTabI = 0;

function getFormData(formName) {
  form = eval('document.forms.' + formName);
  data = '';
  sep = '';
  for (i = 0; i < form.elements.length; i++)
    if ((form.elements[i].name != '') &&
        (((form.elements[i].type != 'radio') && (form.elements[i].type != "checkbox"))
         || (form.elements[i].checked))) {
      data +=
        sep + encodeURI(form.elements[i].name) +
        '=' + encodeURI(form.elements[i].value);
      if (!sep)
        sep = '&';
    }
  return data;
}

function xhrStatus() {
  if ((xhr.readyState < 4) && xhrTab[xhrTabI][3]) {
    xhrTab[xhrTabI][2].innerHTML =
      '<p class="loading">' + connexionState[xhr.readyState] + '</p>';
  } else if (xhr.readyState == 4) {
    if (xhr.status == 0) {
      xhrTab[xhrTabI][2].innerHTML =
        '<div class="error">La requ&ecirc;te a &eacute;chou&eacute;, ' +
        'serveur injoignable.</div>'; // Pour IE
    } else {
      if (xhr.status == 200) 
        xhrTab[xhrTabI][2].innerHTML = xhr.responseText;
      else {
        xhrTab[xhrTabI][2].innerHTML =
          '<div class="error">La requ&ecirc;te a &eacute;chou&eacute;, ' +
          'erreur ' + xhr.status + '.</div>';
      }
      xhrTabI++;
      contentLoadNext();
    }
  }
}

function xhrTimeout(tabI) {
  if (xhrTabI == tabI) {
    xhrTab[xhrTabI][2].innerHTML =
      '<div class="error">La requ&ecirc;te a &eacute;chou&eacute;, ' +
      'serveur injoignable.</div>'; // Pour FireFox
    xhr.abort(); 
    xhrTabI++;
    contentLoadNext();
  }
}

function contentLoadNext() {
  if (xhrTabI < xhrTabN) {
    initXHR();
    xhr.onreadystatechange = xhrStatus;
    xhr.open('POST', xhrTab[xhrTabI][0], true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send(xhrTab[xhrTabI][1]);
    setTimeout('xhrTimeout(' + xhrTabI + ')', 30000);
  }
}

function contentLoad(url, data, cnt, loading) {
  xhrTab[xhrTabN] = new Array(url, data, document.getElementById(cnt), loading);
  if (loading)
    xhrTab[xhrTabN][2].innerHTML = '<p class="loading">En attente</p>';
  if (xhrTabI == xhrTabN) {
    xhrTabN++;
    contentLoadNext();
  } else
    xhrTabN++;
}

function contentLoadSync(url, data, cnt) {
  initXHR();
  xhr.open('POST', url, false);
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  xhr.send(data);

  document.getElementById(cnt).innerHTML = xhr.responseText;
}

function contentClear(cnt) {
  document.getElementById(cnt).innerHTML = '';
}
