var imagesPrechargees = new Array();

function prechargeImage(indice, nomFichier) {
  var image = new Image();
  image.src = nomFichier;
  imagesPrechargees[indice] = image;
}

function imagePrechargee(indice) {
  try {
    return imagesPrechargees[indice].src;
  }
  catch ( e ) {
    alert( "DÉFAUT DE CACHE ! " + "\n" + e.message );
  }
}


function imageEstEllePrechargee(indice) {
  try {
    if ( imagesPrechargees[indice].src ) {
      return true;
    }
  }
  catch ( e ) {
    return false;
  }
}


function indiceValeurTableau(t, v) {
  // Retourne l'indice correspondant à la première valeur v dans le tableau t
  for (i in t) {
    if ( t[i] == v ) {
      return i;
    }
  }
  return null;
}

/*
  Window ouvrirFenetreCentree(String url, int largeurFenetre, int hauteurFenetre)
  - Fait apparaître une nouvelle fenêtre du navigateur centrée dans l'écran.
  - Retourne la référence de cette nouvelle fenêtre
*/

function ouvrirFenetreCentree(url, largeurFenetre, hauteurFenetre) {
  ouvrirFenetreCentreePlus(url, largeurFenetre, hauteurFenetre, '')
}

function ouvrirFenetreCentreePlus(url, largeurFenetre, hauteurFenetre, plus) { // , ascenseur) {
 var top = (screen.height - hauteurFenetre) / 2;
 var left = (screen.width - largeurFenetre) / 2;

 if ( plus == '' )
   plus = 'resizable=yes';
 
 var s = 'top=' + top + ',left=' + left + ',width=' + largeurFenetre + ',height=' + hauteurFenetre + ',status=no,toolbar=no,menubar=no,' + plus;
 // C'est scrollbars !!! (ascenseur ? ",scroll=yes" : ",scroll=no") ?alwaysRaised=yes?

 return open(url, 'nllfc', s);
}

function ouvrirFenetreCentreeNommee(url, largeurFenetre, hauteurFenetre, nomFenetre) { // , ascenseur) {
 var top = (screen.height - hauteurFenetre) / 2;
 var left = (screen.width - largeurFenetre) / 2;

 var s = 'top=' + top + ',left=' + left + ',width=' + largeurFenetre + ',height=' + hauteurFenetre + ',status=no,toolbar=no,menubar=no,resizable=yes';
 // C'est scrollbars !!! (ascenseur ? ",scroll=yes" : ",scroll=no") ?alwaysRaised=yes?

 return open(url, nomFenetre, s);
}

// ==================== Requêtes HTTP XML (asynchrone) ====================

// Exceptions, cf. http://developpeur.journaldunet.com/tutoriel/dht/011031jscript_exceptionhandling.shtml

var xhr; // Stands for Xml Http Request

function reponseXhrOk() {
  return ( xhr.readyState == 4 // [Requête/Réponse] terminée
	   && xhr.status == 200 ) // URL OK ?
}

function traiteReponseXhr() {
  if ( xhr.readyState == 4 ) // [Requête/Réponse] terminée
    
    if ( xhr.status == 200 ) { // URL OK ?
      // Je n'ai rien de spécial à faire !
      /*
      try {
	reponseXhrRecue(xhr.responseText); // reponseXhrRecue À IMPLANTER DANS L'APPELANT !
      }
      catch (e) {
	alert("Fonction reponseXhrRecue(String) non implantée !");
      } */
    }
  
    else // Il y a un PB !
      alert("Problème :\n" +  xhr.status + "\n" + xhr.statusText);
  
  else { // La réponse n'est pas encore arrivée : on l'attend...
    // Appelle - si elle est implantée - la fonction de l'appelant faisant patienter
    try {
      xhrMessageAttente(); 
    }
    catch (e) {
      // e == "ReferenceError: xhrMessageAttente is not defined"
    }
  }
  
}

function traiteXhr(url) { // fonction pour le traitement commun à MSIE et FireFox
  xhr.onreadystatechange = traiteReponseXhr; // ou passer par une fonction anonyme
  xhr.open("GET", url); // par défaut appel asynchrone
  
  /* workaround safari : setRequestHeader
http://www.bitterpill.org/logid/1117777362000
http://developer.apple.com/internet/safari/faq.html (navigator.appName = "Netscape", d'où l'utilisation conjointe avec navigator.vendor = "Apple Computer, Inc.")
   */

  var expressionReg = /apple/i;

  if ( navigator.appName == 'Netscape' && 0 <= navigator.vendor.search(expressionReg) ) {
    //    alert ( 'MESSAGE POUR PIERRE : C safari sous mac os !');
    xhr.setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT');
  }
    
  xhr.send(null); // utiliser POST si on envoie qq chose
}

function xhrAsynchrone(url) {
  if ( window.ActiveXObject ) { // Spécifique IE ; Sinon, MSIE dit XMLHttpRequest() est indéfini !
       xhr = new ActiveXObject("Microsoft.XMLHTTP");
       traiteXhr(url);
     }
     else
       if ( window.XMLHttpRequest ) {
        xhr = new XMLHttpRequest();
	traiteXhr(url);
       }
       else
	 alert("Votre navigateur ne gère pas les requêtes HTTP XML !");
}


function elementParId(id) {
  var e = document.getElementById(id);

  if ( e == null ) {
    alert("L'élément " + e + " n'existe pas !");
    return null;
  }

  return e;
}


function largeurHauteurInterieurFenetre() {
  // retourne les dimensions de la fenêtre du navigateur dans un tableau ('largeur','hauteur'). On ne tient compte que de la dimension de la zone d'affichage de la page HTML. On ne tient pas compte par exemple du menu ou de la barre d'état de cette fenêtre.

  var r = new Array();
  
  if (window.innerWidth) { // "famille" Firefox
    r['largeur'] = window.innerWidth;
    r['hauteur'] = window.innerHeight;
    return r;
  }

  if ( document.documentElement && document.documentElement.clientWidth ) { // "famille" MSIE
    r['largeur'] = document.documentElement.clientWidth;
    r['hauteur'] = document.documentElement.clientHeight;
    return r;
  }

  // ATTENTION si appliqué sous MSIE la hauteur renverrra la hauteu du contenu du BODY, voire même 0 !
  if ( document.body && document.body.clientWidth ) {
    r['largeur'] = document.body.clientWidth;
    r['hauteur'] = document.body.clientHeight;
    return r;
  }

  return null;
}

function hauteurInterieurFenetre() {
  var place = largeurHauteurInterieurFenetre();
  return place['hauteur'];
}

function largeurInterieurFenetre() {
  var place = largeurHauteurInterieurFenetre();
  return place['largeur'];
}

