function showTooltip(id, event){
    var div = document.getElementById(id);
   
    div.parentNode.removeChild(div);
    document.body.appendChild(div);
   
    if (div.getElementsByTagName('span').length < 2) {
        var span = document.createElement("span");  
        span.setAttribute('class', 'close');
        span.setAttribute('className', 'close');

        var close = document.createElement("a");
        close.setAttribute('href','#');
        close.onclick = hideTooltip(id);
        close.appendChild(document.createTextNode('Fechar'));
   
        span.appendChild(close);
        div.getElementsByTagName('div')[0].appendChild(span);
    }

    div.style.display = 'block';

    var x,y;
    if (self.innerHeight) { // all except Explorer
        x = self.innerWidth;
        y = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode 
        x = document.documentElement.clientWidth;
        y = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
        x = document.body.clientWidth;
        y = document.body.clientHeight;
    }

    // Move vertically if needed
    if ((div.clientHeight) > y - event.clientY) {        
        div.style.top = (pointerY(event) - 10 - div.clientHeight).toString() + 'px';
        div.style.left = (pointerX(event)).toString() + 'px';                
    } else {
        div.style.top = (pointerY(event) + 10).toString() + 'px';
        div.style.left = (pointerX(event) + 10).toString() + 'px';
    }
    
    //IE Check
    if (event.stopPropagation) {
        event.stopPropagation();
    } else {
        event.cancelBubble = true;
    }
    
    //IE Check
    if (window.addEventListener) {
        window.addEventListener("click", hideTooltip(id), false);
    } else {
        document.body.attachEvent("onclick", hideTooltip(id));
    } 
}

function hideTooltip(id) {
    return function () {
        var div = document.getElementById(id);
        div.style.display = 'none';
        return false;
    }
}

function pointerX(event) {
    return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft));
}

function pointerY(event) {
    return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop));
}
