//show a tooltip and position it next to the given control
var offsetfromcursorX = 12;       //x offset of tooltip
var offsetfromcursorY = 10;       //y offset of tooltip
var offsetdivfrompointerX = 10;   //x offset of tooltip DIV relative to pointer image
var offsetdivfrompointerY = 14;   //y offset of tooltip DIV relative to pointer image. Tip: Set it to (height_of_pointer_image-1).

document.write('<div id="dhtmltooltip"></div>');
document.write('<img id="dhtmlpointer" />');

var ie = document.all;
var ns6 = document.getElementById && !document.all;

if (ie || ns6)
{
    var tipobj = document.all ? document.all["dhtmltooltip"] : document.getElementById ? document.getElementById("dhtmltooltip") : "";
}

var pointerobj = document.all ? document.all["dhtmlpointer"] : document.getElementById ? document.getElementById("dhtmlpointer") : "";

function ietruebody()
{
    return (document.compatMode && document.compatMode !== "BackCompat") ? document.documentElement : document.body;
}

function findPos(obj)
{
    var curleft = 0;
    var curtop = 0;

    if (obj.offsetParent)
    {
        curleft = obj.offsetLeft;
        curtop = obj.offsetTop;

        while (obj = obj.offsetParent) //meant to be assignment
        {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        }
    }
    return [curleft, curtop];
}

function positionTip(obj, xOffset, yOffset)
{
    var nondefaultpos = false;
    var coors = findPos(obj);
    var curX = coors[0] + xOffset;
    var curY = coors[1] + yOffset;

    //Find out how close the mouse is to the corner of the window
    var winwidth = ie && !window.opera ? ietruebody().clientWidth : window.innerWidth - 20;
    var winheight = ie && !window.opera ? ietruebody().clientHeight : window.innerHeight - 20;

    var rightedge = ie && !window.opera ? winwidth - event.clientX - offsetfromcursorX : winwidth - curX - offsetfromcursorX;
    var bottomedge = ie && !window.opera ? winheight - event.clientY - offsetfromcursorY : winheight - curY - offsetfromcursorY;

    var leftedge = (offsetfromcursorX < 0) ? offsetfromcursorX * (-1) : -1000;

    //if the horizontal distance isn't enough to accomodate the width of the context menu
    if (rightedge < tipobj.offsetWidth)
    {
        //move the horizontal position of the menu to the left by it's width
        tipobj.style.left = curX - tipobj.offsetWidth + "px";
        nondefaultpos = true;
    }
    else if (curX < leftedge)
    {
        tipobj.style.left = "5px";
    }
    else
    {
        //position the horizontal position of the menu where the mouse is positioned
        tipobj.style.left = curX + offsetfromcursorX - offsetdivfrompointerX + "px";
        pointerobj.style.left = curX + offsetfromcursorX + "px";
    }

    //same concept with the vertical position
    if (bottomedge < tipobj.offsetHeight)
    {
        tipobj.style.top = curY - tipobj.offsetHeight - offsetfromcursorY + "px";
        nondefaultpos = true;
    }
    else
    {
        tipobj.style.top = curY + offsetfromcursorY + offsetdivfrompointerY + "px";
        pointerobj.style.top = curY + offsetfromcursorY + "px";
    }

    tipobj.style.visibility = "visible";

    if (!nondefaultpos)
    {
        pointerobj.style.visibility = "visible";
    }
    else
    {
        pointerobj.style.visibility = "hidden";
    }
}

function showTip(thetext, obj, xOffset, yOffset, imgPath)
{
    if (ns6 || ie)
    {
        pointerobj.src = imgPath + "/balloonPoint.gif";
        tipobj.innerHTML = thetext;
        positionTip(obj, xOffset, yOffset);
        return false;
    }

    return true;
}

function hideTip()
{
    if (ns6 || ie)
    {
        tipobj.style.visibility = "hidden";
        pointerobj.style.visibility = "hidden";
        tipobj.style.left = "-1000px";
        tipobj.style.backgroundColor = '';
        tipobj.style.width = '';
    }
}

function checkCapsLock(e, obj, imgPath)
{
    var myKeyCode = 0;
    var myShiftKey = false;

    // Internet Explorer 4+
    if (document.all)
    {
        myKeyCode = e.keyCode;
        myShiftKey = e.shiftKey;
    }

    // Netscape 4
    else if (document.layers)
    {
        myKeyCode = e.which;
        myShiftKey = (myKeyCode === 16) ? true : false;
    }

    // Netscape 6
    else if (document.getElementById)
    {
        myKeyCode = e.which;
        myShiftKey = (myKeyCode === 16) ? true : false;
    }

    // Upper case letters are seen without depressing the Shift key, therefore Caps Lock is on
    if ((myKeyCode >= 65 && myKeyCode <= 90) && !myShiftKey)
    {
        showTip('Caps Lock is On', obj, 10, 10, imgPath);
    }
    // Lower case letters are seen while depressing the Shift key, therefore Caps Lock is on
    else if ((myKeyCode >= 97 && myKeyCode <= 122) && myShiftKey)
    {
        showTip('Caps Lock is On', obj, 10, 10, imgPath);
    }
    else
    {
        hideTip();
    }
}
