//based from http://kryogenix.org

addEvent(window, "load", makeNiceTitles);

var tags = new Array;
tags[0] = "a";
tags[1] = "img";
tags[2] = "td";
tags[3] = "span";
tags[4] = "div";

var XHTMLNS = "http://www.w3.org/1999/xhtml";
var CURRENT_NICE_TITLE;

function makeNiceTitles()
 {
  if (!document.createElement || !document.getElementsByTagName) return;
  // add namespace methods to HTML DOM; this makes the script work in both HTML and XML contexts.
  if(!document.createElementNS)
   {
    document.createElementNS = function(ns,elt)
     {
      return document.createElement(elt);
     }
   }

  //parcoure tags pour créer un array de ces balises qui existent dans le html
  for(var i = 0; i < tags.length; i++)
   {
    document.tag = document.getElementsByTagName(tags[i]);
    //parcoure l'array créé
    for (var j = 0; j < document.tag.length ; j++)
     {
      var lnk = document.tag[j];
      //si la balise a un titre, créer la bulle
      if (lnk.title)
       {
        //ajoute l'attribut bulle au tag
        lnk.setAttribute("nicetitle",lnk.title);
        //enlève l'attribut titre du tag
        lnk.removeAttribute("title");

        //ajoute des evenements sur le lien
        addEvent(lnk,"mouseover",showNiceTitle);
        addEvent(lnk,"mouseout",hideNiceTitle);
        addEvent(lnk,"focus",showNiceTitle);
        addEvent(lnk,"blur",hideNiceTitle);
       }
     }
   }
 }

function showNiceTitle(e)
 {
  //titre existant -> à cacher
  if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);
  if (!document.getElementsByTagName) return;
  if (window.event && window.event.srcElement)
   {
    lnk = window.event.srcElement
   } else if (e && e.target)
   {
    lnk = e.target
   }
  //alert(lnk);
  if (!lnk) return;
  nicetitle = lnk.getAttribute("nicetitle");
  //nicetitle contenu dans le node parent
  while (nicetitle == null)
   {
    lnk = lnk.parentNode;
    nicetitle = lnk.getAttribute("nicetitle");
   }

  var d = document.createElementNS(XHTMLNS,"div");
  d.className = "nicetitle";
  d.innerHTML = nicetitle;
  
  var w = d.width;

  if(lnk.offsetParent)
   {
    for( var posX = 0, posY = 0; lnk.offsetParent; lnk = lnk.offsetParent )
     {
      posX += lnk.offsetLeft;
      posY += lnk.offsetTop;
     }
    mpos = [ posX , posY ]
   }else{
    mpos = [ lnk.x , lnk.y ]
   }
  mpos = getMousePosition(e);
  mx = mpos[0];
  my = mpos[1];
  
  if (window.param_nice_title_h !== undefined)
   {
    d.style.top = param_nice_title_h + 'px';
   }else{
    d.style.top = (my+20) + 'px';
   }
  if (window.param_nice_title_w !== undefined)
   {
    d.style.left = param_nice_title_w + 'px';
   }else{
    d.style.left = (mx+20) + 'px';
   }
  if (window.innerWidth && ((mx+w) > window.innerWidth))
   {
    d.style.left = (window.innerWidth - w - 25) + "px";
   }
  if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth))
   {
    d.style.left = (document.body.scrollWidth - w - 25) + "px";
   }
    
  document.getElementsByTagName("body")[0].appendChild(d);
   
  CURRENT_NICE_TITLE = d;
 }

function hideNiceTitle(e)
 {
  if (!document.getElementsByTagName) return;
  if (CURRENT_NICE_TITLE)
   {
    document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE);
    CURRENT_NICE_TITLE = null;
   }
 }

// Add an eventListener to browsers that can do it somehow.
// Originally by the amazing Scott Andrew.
function addEvent(obj, evType, fn){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, false);
    return true;
  } else if (obj.attachEvent){
	var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
	return false;
  }
}

function getMousePosition(e)
 {
  x = (navigator.appName.substring(0,3) == "Net") ? e.pageX : event.x+document.body.scrollLeft;
  y = (navigator.appName.substring(0,3) == "Net") ? e.pageY : event.y+document.body.scrollTop;
  return [x,y];
 }
if(navigator.appName.substring(0,3) == "Net") { document.captureEvents(Event.MOUSEMOVE); }
document.onmousemove = getMousePosition;


