	/*** gestionnaire d'évènements ***/

function addEvent(obj, type, fn)
{
 !!obj.attachEvent? obj.attachEvent('on'+type,fn): obj.addEventListener(type, fn, false);
}

function killEvent(obj, type, fn)
{
 !!obj.detachEvent? obj.detachEvent('on'+type,fn): obj.removeEventListener(type, fn, false);
}


	/*** infobulle ***/

var bulle_width, bulle_height, body_width, body_height; //largeur/hauteur de l'infobulle en position initiale et de body

function AffBulle(e)
{
 if (!e) var e = event;
 var targ = (e.target||e.srcElement);
 if (targ.getAttribute("msg")) {
  infobulle.innerHTML = targ.getAttribute("msg");
  infobulle.style.display = "inline";
  
  //actualisation des variables de contrôle
  bulle_width = infobulle.offsetWidth;
  bulle_height = infobulle.offsetHeight;
  body_width = document.body.offsetWidth;
  body_height = document.body.offsetHeight;
  
  //inscription évènementielle des fonctions MoveBulle et HideBulle
  addEvent(targ, "mousemove", MoveBulle);
  addEvent(targ, "mouseout", HideBulle);
 }
}

function MoveBulle(e)
{
 if (!e) e = event;
 var targ = (e.target||e.srcElement);
 with (infobulle.style)
 {
  left = (e.pageX)? e.pageX+6: e.clientX + document.body.scrollLeft+6;
  if (infobulle.offsetLeft + bulle_width >= body_width + document.body.scrollLeft)
   left = infobulle.offsetLeft - bulle_width;

  top = (e.pageY) ? e.pageY+15: e.clientY + document.body.scrollTop+15;
  if (infobulle.offsetTop + bulle_height >= body_height + document.body.scrollTop)
   top = infobulle.offsetTop - infobulle.offsetHeight - 20;
 }
}

function HideBulle(e)
{
 if (!e) e = event;
 var targ = (e.target||e.srcElement);
 infobulle.style.display = "none";
 
 //remise à zéro de la position de l'infobulle
 if (infobulle.style.removeProperty) {
  infobulle.style.removeProperty("top");
  infobulle.style.removeProperty("left");
 }
 else {
  infobulle.style.removeAttribute("top");
  infobulle.style.removeAttribute("left");
 }
 
 //désinscription évènementielle des fonctions MoveBulle et HideBulle 
 killEvent(targ, "mousemove", MoveBulle);
 killEvent(targ, "mouseout", HideBulle);
}


//plus sensé de faire l'appel dans une balise script incluse dans la partie HEAD du code source
//ce qui permet de rajouter au besoin d'autres instructions qui n'ont rien à voir avec l'infobulle
	/*** chargement de la page ***/
/*
addEvent(window, "load", function () {
 addEvent(document, "mouseover", AffBulle);
});
*/
