/*javascript for Bubble Tooltips by Alessandro Fulciniti
- http://pro.html.it - http://web-graphics.com */

function utf8_decode(str)
{
   var result = "";
   
   for (var i = 0; i < str.length; i++)
   {
      if (str.charAt(i) == "+")
         result += " ";
      else
         result += str.charAt(i);
   }
   return unescape(result);
}

function enableTooltips(id){
   var links,i,h;

   if(!document.getElementById || !document.getElementsByTagName) return;

   AddCss();

   h=document.createElement("span");
   h.id="btc";
   h.setAttribute("id","btc");
   h.style.position="absolute";

   document.getElementsByTagName("body")[0].appendChild(h);

   if(id==null) links=document.getElementsByTagName("a");
   else links=document.getElementById(id).getElementsByTagName("a");

   for(i=0;i<links.length;i++){
      Prepare(links[i]);
   }
}

function Prepare(el){
   var tooltip,t,b,s,l,idx,t2,p;
   t=el.getAttribute("tip");
   
   if (!t) return;
   
   idx = t.indexOf("~");
   t2  = t.substring(0,idx);
   t   = t.substring(idx+1);
   
   p = t.split("~");
   
   xx = document.getElementById
   if(t==null || t.length==0) t="...";
   
   el.removeAttribute("tip");
   
   tooltip=CreateEl("span","tooltip");
   
   s=CreateEl("span","top");
   tooltip.appendChild(s);
   
   s=CreateEl("span","tit");
   s.appendChild(document.createTextNode(t2));
   tooltip.appendChild(s);
   
   for(var i = 0; i < p.length; i++)
   {
      var rText = utf8_decode(p[i]);
      s = applyTags(rText);
      tooltip.appendChild(s);
   }
   
   s=CreateEl("span", "spacer");
   s.appendChild(document.createTextNode(" "));
   tooltip.appendChild(s);
   
   s=CreateEl("span","bottom");
   tooltip.appendChild(s);
   
   setOpacity(tooltip);
   el.tooltip=tooltip;
   el.onmouseover=showTooltip;
   el.onmouseout=hideTooltip;
   el.onmousemove=Locate;
}

function applyTags(text)
{
   var openTag  = "{b}";
   var closeTag = "{/b}";
   
   //armado del span final que se devuelve
   var s = CreateEl("span", "com");
   
   //posicion de la etiqueta
   var posOpen  = text.search(openTag);
   var posClose = text.search(closeTag);
   
   if(posOpen != -1)
   {
      //crear div para la parte con etiqueta y aplicar estilo
      var tDiv  = document.createElement("span");
      var tbold = document.createTextNode(text.substring(posOpen+3,posClose));
      tDiv.appendChild(tbold);
      tDiv.style.fontWeight = "bold";
      //dejar solo la parte sin etiquetas
      var tbt = document.createTextNode(text.substring(0, posOpen));
      var tat = document.createTextNode(text.substring(posClose+4));
      
      //texto final
      s.appendChild(tbt);
      s.appendChild(tDiv);
      s.appendChild(tat);
      
      return s;
   }
   else
   {
      s.appendChild(document.createTextNode(text));
      
      return s;
   }
}

function showTooltip(e){
   document.getElementById("btc").appendChild(this.tooltip);
   Locate(e);
}

function hideTooltip(e){
   var d=document.getElementById("btc");
   if(d.childNodes.length>0) d.removeChild(d.firstChild);
}

function setOpacity(el){
   el.style.filter="alpha(opacity:100)";
   el.style.KHTMLOpacity="1";
   el.style.MozOpacity="1";
   el.style.opacity="1";
}

function CreateEl(t,c){
   var x=document.createElement(t);
   x.className=c;
   x.style.display="block";
   return(x);
}

function AddCss(){
   var l=CreateEl("link");
   l.setAttribute("type","text/css");
   l.setAttribute("rel","stylesheet");
   l.setAttribute("href","bt.css");
   l.setAttribute("media","screen");
   document.getElementsByTagName("head")[0].appendChild(l);
}

function Locate(e){
   var posx=0,posy=0;

   if (e==null) e=window.event;

   if (e.pageX || e.pageY){
      posx = e.pageX;
      posy = e.pageY;
   }
   else
      if (e.clientX || e.clientY){
         if (document.documentElement.scrollTop){
            posx=e.clientX+document.documentElement.scrollLeft;
            posy=e.clientY+document.documentElement.scrollTop;
         }
         else{
            posx=e.clientX+document.body.scrollLeft;
            posy=e.clientY+document.body.scrollTop;
         }
      }
      
      ssize_h = document.getElementById("btc").offsetHeight;
      
      document.getElementById("btc").style.top=(posy-(ssize_h + 10))+"px";
      document.getElementById("btc").style.left=(posx-110)+"px";
}
