﻿var _timerHints = [], _instancesHints = [];
var Hints = {
    set : function()
    {
        var e, h, c; 
        for(var i=0; i<arguments.length; i++)
        {
            e = arguments[i].element; 
            if(e)
            {
                h = document.createElement("div");
                h.id = "hint_" + e.id;
                h.className = "hints" + (arguments[i].type ? " hints-" + arguments[i].type : "");
                
                _instancesHints.push(h);         
                       
                c = document.createElement("div");
                c.className = "hints-text";
                c.innerHTML = arguments[i].text;
                if(arguments[i].fontSize) c.style.fontSize = arguments[i].fontSize + "px";
                h.appendChild(c);
                e.parentNode.appendChild(h);              
                
                setPosHints(h);           
                
                $(h).fadeOut(0);
                h.style.visibility = "visible";
                
                e.setAttribute("hint", h.id);                
                addEvent(e, "mouseover", Hints.toggleHints);
                addEvent(e, "mouseout", Hints.toggleHints);              
            }
        }
        
        addEvent(window, "resize", setPosHints);    
    },    
    toggleHints : function(evt)
    {
        var isOpen = (window.event ? window.event : evt).type.indexOf("out")==-1;
        var h = document.getElementById((window.event ? window.event.srcElement : evt.target).getAttribute("hint"));     
        clearTimeout(_timerHints[h.id]);
        if(isOpen)  
            _timerHints[h.id] = setTimeout(function(){ $(h).fadeIn("fast"); }, 400); 
        else 
            $(h).fadeOut("fast");
    }
}

//-------------------------------------

function setPosHints(hint)
{
    var p, e, i;
    hint = hint.id ? [hint] : _instancesHints;   
    for(i=0; i<hint.length; i++)
    {
        with(hint[i].style){ visibility = "hidden"; display = "block"; }; //corrige bug de alinhamento de elementos com display none
        
        e = document.getElementById(hint[i].id.substring(5));
        p = absPos(e);
        hint[i].style.top = (p.y - hint[i].offsetHeight) + "px";
        hint[i].style.left = (p.x - (hint[i].offsetWidth/2) + (e.offsetWidth/2)) + "px"; //acerto para espaco da sombra a direita
        
        with(hint[i].style){ visibility = "visible"; display = "none"; };
    }
}

//-------------------------------------

function absPos(el) 
{
    var SL = el.scrollLeft;
    var ST = el.scrollTop;
    var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
    if (el.offsetParent) 
    {
        var tmp = this.absPos(el.offsetParent);
        r.x += tmp.x;
        r.y += tmp.y;
    }
    return r;
}
