var gLastMouseX, gLastMouseY;
var gActiveTooltip, gImgCount, gFailImage;

function tooltip_update(e) {
  var docRef, mouseX, mouseY;

  // Récupére la position de la souris
  if (e) {
    mouseX = e.pageX;
    mouseY = e.pageY;
  }
  else { // Spécifique IE
    mouseX = event.clientX;
    mouseY = event.clientY;

    // Il faut traiter le CAS des DOCTYPE sous IE
    if( document.documentElement && document.documentElement.clientWidth) // Donc DOCTYPE
      docRef = document.documentElement;   // Dans ce cas c'est documentElement qui est réfèrence
    else
      docRef = document.body;                    // Dans ce cas c'est body qui est réfèrence

    // On rajoute la position liée aux ScrollBars
    mouseX += docRef.scrollLeft;
    mouseY += docRef.scrollTop;
  }


  // Si un tooltip nécessaire on le place aux coordonnées souris
  if (gActiveTooltip.length > 0) {
    var elemTp = document.getElementById(gActiveTooltip + "-tooltip");
    var elemParent = elemTp.parentNode;
    //if (elemParent) {
    //  mouseX -= elemParent.offsetLeft;
    //  mouseY -= elemParent.offsetTop;
    //}

    // Affiche le tooltip si nécessaire
    if (elemTp.style.display != "block") {
      elemTp.style.display = "block";
      //elemTp.style.width = elemTp.offsetWidth+"px";
    }

    elemTp.style.left = mouseX -elemTp.offsetWidth - 10 + "px";
    elemTp.style.top = mouseY + 10 + "px";
  }
  gLastMouseX = mouseX;
  gLastMouseY = mouseY;
}

function tooltip_mouseover(elemId) {
  // Charge les images dynamiques
  var elemTp = document.getElementById(elemId + "-tooltip");
  var imgs = elemTp.getElementsByTagName("img");
  var i, id, imgWaiter;

  for (i = 0; i < imgs.length; i++) {
    id = imgs[i].getAttribute("id");
    if (id)
      if (id.length >= 8)
        if (id.substring(0, 8) == "dynimg::") {
          imgs[i].setAttribute("id", "loadimg::" + imgs[i].imgIdx);
          imgs[i].onload = function() {tooltip_onimageload(elemId, this.imgIdx);};
          imgs[i].onerror = function() {tooltip_onimagefail(elemId, this.imgIdx);};
          imgs[i].setAttribute("src", imgs[i].imgFile);
        }
  }

  // Le div invisible pointe l'element propriétaire du tooltip
  gActiveTooltip = elemId;
}

function tooltip_mouseout(elemId) {
  // Cache le tooltip
  var elemTp = document.getElementById(elemId + "-tooltip");
  elemTp.style.display = "none";

  // Le div invisible ne pointe pas d'elements propriétaires de tooltips
  gActiveTooltip = "";
}

function tooltip_onimageload(elemId, imgIdx) {
  var img = document.getElementById("loadimg::" + imgIdx);
  var imgWaiter = document.getElementById("dynimg-waiter::" + imgIdx);
  var elemTp = document.getElementById(elemId + "-tooltip");

  img.setAttribute("id", "loadedimg::" + imgIdx);
  imgWaiter.style.display = "none";
  img.style.display = "block";
  elemTp.style.left = gLastMouseX + 10 + "px";
  elemTp.style.top = gLastMouseY - elemTp.offsetHeight - 10 + "px";
}

function tooltip_onimagefail(elemId, imgIdx) {
  var img = document.getElementById("loadimg::" + imgIdx);
  var imgWaiter = document.getElementById("dynimg-waiter::" + imgIdx);
  var elemTp = document.getElementById(elemId + "-tooltip");

  img.setAttribute("src", gFailImage);
}

function tooltip_init(elemId, waitImage) {
  // Affecte les fonctions d'entrée/sortie de la souris à l'element propriétaire du tooltip
  var elem = document.getElementById(elemId);
  elem.onmouseover = function() {tooltip_mouseover(elemId);};
  elem.onmouseout = function() {tooltip_mouseout(elemId);};

  // Affecte les fonctions d'entrée/sortie de la souris au tooltip
  var elemTp = document.getElementById(elemId + "-tooltip");
  elemTp.onmouseover = function() {tooltip_mouseover(elemId);};
  elemTp.onmouseout = function() {tooltip_mouseout(elemId);};

  // Cache le tooltip
  elemTp.style.position = "absolute";
  elemTp.style.display = "none";

  // Place les noms d'images dans le tableau et crée les balises img
  var divs = elemTp.getElementsByTagName("div");
  var i, dData, fileName, img, imgWaiter, parentDiv, newDiv;

  for (i = 0; i < divs.length; i++) {
    dData = divs[i].innerHTML;
    if (dData)
      if (dData.length >= 8)
        if (dData.substring(0, 8) == "dynimg::") {
          fileName = dData.substring(8, dData.length);

          newDiv = document.createElement("div");
          newDiv.setAttribute("align", "center");

          parentNode = divs[i].parentNode;
          parentNode.replaceChild(newDiv, divs[i]);

          img = document.createElement("img");
          img.setAttribute("id", "dynimg::" + gImgCount);
          img.imgIdx = gImgCount;
          img.imgFile = fileName;
          img.style.display = "none";
          img.style.width = "200px";

          imgWaiter = document.createElement("img");
          imgWaiter.setAttribute("id", "dynimg-waiter::" + gImgCount);
          imgWaiter.setAttribute("src", waitImage);

          newDiv.appendChild(imgWaiter);
          newDiv.appendChild(img);

          gImgCount++;
        }
  }
}

function tooltips_init(waitImage, failImage) {
  // Affecte la fonction de gestion des mouvements de la souris à l'événement onmousemove
  document.onmousemove = tooltip_update;

  // Initialisation des tooltips
  var divs = document.getElementsByTagName("div");
  var i, id;

  gImgCount = 0;
  gActiveTooltip = "";

  for (i = 0; i < divs.length; i++) {
    id = divs[i].getAttribute("id");
    if (id)
      if (id.length >= 8)
        if (id.substring(id.length - 8, id.length) == "-tooltip")
          tooltip_init(id.substring(0, id.length - 8), waitImage);
  }

  gFailImage = failImage;
}