
var tooltipOffsetX = -145       // half of tooltip width + div padding
var tooltipOffsetY = 0

var tooltipEnabled = false
var divTooltip;
var divTooltipInner;
var timeoutId = null;


$(document).ready(function ()
{
    divTooltip = document.getElementById("documentGridTooltip");
    divTooltipInner = document.getElementById("documentGridTooltipInner");
});


function showTooltip(txt)
{
//    var debug = document.getElementById("debug");
//    if (debug)
//    {
//        debug.innerHTML += "over<br>";
//    }

    if (timeoutId != null)
    {
//        if (debug)
//        {
//            debug.innerHTML += timeoutId + "<br>";
//        }

        window.clearTimeout(timeoutId);
        timeoutId = null;
    }

    divTooltipInner.innerHTML = txt;
    tooltipEnabled = true;
    if (document.onmousemove == null)
        document.onmousemove = drawTooltip;
    return false;
}


function drawTooltip(e)
{
    if (tooltipEnabled)
    {
        var xScrollAdjusted = false;
        var pos = getMousePos(e);
        var curX = pos.x;
        var curY = pos.y;
        var oldCurX = curX;

        var scrollLeft = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
        var scrollTop = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;

        // limit left edge
        curX += tooltipOffsetX;
        if (curX < scrollLeft - 20)             // allow for div border padding
        {
            oldCurX = curX;
            curX = scrollLeft - 20;
            xScrollAdjusted = true;
        }

        // limit top edge
        curY += tooltipOffsetY - divTooltip.offsetHeight;
        if (curY < scrollTop + 104 - 20)        // allow for menu height & div border padding
        {
            curY = scrollTop + 104 - 20;
            if (xScrollAdjusted)
                curX = oldCurX;                 // remove left edge limit if applied, as tooltip is to right of cursor
            curX -= tooltipOffsetX;               // shift to the right to prevent tooltip masking cursor
        }

        divTooltip.style.left = curX + "px";
        divTooltip.style.top = curY + "px";

        divTooltip.style.visibility = "visible";

        //        var debug = document.getElementById("debug");
        //        if (debug)
        //        {
        //            debug.innerHTML = "x : " + curX + ", y : " + curY;
        //            debug.innerHTML += "<br>sl : " + scrollLeft + ", st : " + scrollTop;
        //        }
    }
}


function hideTooltip()
{
    //    var debug = document.getElementById("debug");
    //    if (debug)
    //    {
    //        debug.innerHTML += "start timer<br>";
    //    }
    //timeoutId = window.setTimeout(function () { stopTooltip(); }, 20);     // delay to stop jitter in FF & some other browsers
    stopTooltip();
}


function stopTooltip()
{
    //    var debug = document.getElementById("debug");
    //    if (debug)
    //    {
    //        debug.innerHTML += "out<br>";
    //    }

    document.onmousemove = null
    tooltipEnabled = false
    divTooltip.style.visibility = "hidden"
    divTooltip.style.left = "-1000px";              // prevent re-position jitter when re-enabled
    timeoutId = null;
}


function getMousePos(e)
{
    var xpos = 0;
    var ypos = 0;

    e = e || window.event; 										        // ensure both IE & FF event models are supported

    if (typeof e.pageX != 'undefined')									// use pageX/Y for preference if available
    {
        xpos = e.pageX; 												// value relative to whole page including scrolling
        ypos = e.pageY;
    }
    else if (typeof e.clientX != 'undefined')
    {
        xpos = e.clientX; 											    // value relative to displayed part of page
        ypos = e.clientY;

        if (typeof document.documentElement.scrollLeft != 'undefined')	// add in scrolled amounts dependent on methods supported
        {
            xpos += document.documentElement.scrollLeft;
            ypos += document.documentElement.scrollTop;
            if (typeof document.documentElement.clientLeft != 'undefined')	// adjust for window border if supplied 
            {
                xpos -= document.documentElement.clientLeft;
                ypos -= document.documentElement.clientTop;
            }
        }
        else if (typeof document.body.scrollLeft != 'undefined')
        {
            xpos += document.body.scrollLeft;
            ypos += document.body.scrollTop;
            if (typeof document.body.clientLeft != 'undefined')			// adjust for window border if supplied 
            {
                xpos -= document.body.clientLeft;
                ypos -= document.body.clientTop;
            }
        }
    }

    return { x: xpos, y: ypos }; 										// return hash with position values
}


