var CLASS_AIDE = "aide";
var g_pos_curseur;
var g_bulle_aide;
var g_textes_bulle = new Array();
var g_bulle_flag = false;
var g_id_cour = null;

//onload = init;

function init() {
   // création du <div> contenant la bulle d'aide
   g_bulle_aide = creer_bulle_aide();
   // affectation de onmouseover et de onmouseout sur tous les <span class="aide">
   var tab_spans = document.getElementsByTagName("span");
   for (i in tab_spans) {
       if (tab_spans[i].className == CLASS_AIDE) {
           tab_spans[i].id = CLASS_AIDE + i;
           tab_spans[i].onmouseover = afficher_aide;
           // astuce pour le cas où le title contient un lien :
           // seuls les textes ne contenant pas de lien ferment la bulle sur un onmouseout
           // pour les autres, on fait un 2e onmouseover
           if (!tab_spans[i].title.sansMouseOut()) tab_spans[i].onmouseout = masquer_aide;
           // on stocke les title dans un tableau, et on supprime chaque title
           // pour ne pas les afficher en même temps que la bulle d'aide
           g_textes_bulle[CLASS_AIDE + i] = tab_spans[i].title;
           tab_spans[i].title = "";
       }
   }
}

function creer_bulle_aide() {
   // création de l'objet bulle d'aide
   var bulle_aide = document.createElement("DIV");
   var tags_body = document.getElementsByTagName("BODY");
   tags_body[0].appendChild(bulle_aide);
   bulle_aide.setAttribute("id", "bulle_aide");
   bulle_aide.className = "bulle-aide";
   // on y ajoute un noeud texte
   var texte = document.createTextNode("");
   bulle_aide.appendChild(texte);
   return bulle_aide;
}

function afficher_aide() {
   // affiche l'aide dans la bulle en fonction de l'id du span
   var texte = g_textes_bulle[this.id];
   // si le flag est true, on masquera la bulle (2e mouseover) si le title du span contient un lien
   if (g_bulle_flag) {
       if (this.id == g_id_cour) {
           var afficher = false;
           g_bulle_flag = false;
           g_id_cour = null;
       }
       else {
           var afficher = true;
           if (texte.sansMouseOut()) g_id_cour = this.id;
           else {
               g_bulle_flag = false;
               g_id_cour = null;
           }
       }
   }
   // sinon, on affichera la bulle
   // si le title du span contient un lien : on met le flag à true (1e mouseover)
   else {
       var afficher = true;
       if (texte.sansMouseOut()) {
           g_bulle_flag = true;
           g_id_cour = this.id;
       }
   }
   // si affichage de la bulle
   if (afficher) {
       // on modifie le texte de la bulle d'aide
       g_bulle_aide.innerHTML = texte;
       // place la bulle d'aide sous le curseur
       g_bulle_aide.style.left = g_pos_curseur.x-123;
       g_bulle_aide.style.top = g_pos_curseur.y-280;
	   g_bulle_aide.style.background = 'transparent';
	   g_bulle_aide.style.border = 0;
       // et la rend visible
       g_bulle_aide.style.visibility = "visible";
   }
   // sinon masquage de la bulle
   else g_bulle_aide.style.visibility = "hidden";
}

function masquer_aide() {
  // masque la bulle d'aide (déclenché par un onmouseout sur le <span>)
  g_bulle_aide.style.visibility = "hidden";
}

String.prototype.sansMouseOut = function() {
   // détermine si le texte de la bulle contient certaines balises HTML (actuellement seulement des liens)
   // qui empêchent la fermeture de la bulle sur un onmousout du span ayant ouvert la bulle
   if (this.search(/<a href=[^>]+>.*<\/a>/) == -1) return false;
   else return true;
}

// affectation de la fonction "emplacementSouris" à l'événement onmousemove
document.onmousemove = emplacementSouris;

// Cette fonction appelle emplacementSouris à chaque mouvement de la souris
function emplacementSouris(e) {
  // avec IE, on utilise l'objet "event"
  if (document.all) g_pos_curseur = {x: document.body.scrollLeft+event.clientX, y: document.body.scrollTop+event.clientY};
  // avec Netscape, Mozilla, on utilise l'événement "e" en argument
  else g_pos_curseur = {x: e.pageX, y: e.pageY};
}