// How many pixels to the right/left of the cursor to show the popup
// Values between 3 and 12 are best
if (typeof offsetx == 'undefined') { var offsetx = 20; }

// How many pixels to the below the cursor to show the popup
// Values between 3 and 12 are best
if (typeof offsety == 'undefined') { var offsety = 20; }

ns4 = (document.layers) ? true : false
ie4 = (document.all) ? true : false

// Microsoft Stupidity Check
if (ie4) {
    if (navigator.userAgent.indexOf('MSIE 5') > 0) {
        ie5 = true;
    } else {
        ie5 = false;
    }
} else {
    ie5 = false;
}

var x = 0;
var y = 0;
var snow = 0;
var snowStatic = 0;
var sw = 0;
var cnt = 0;
var dir = 1;
var widthInt = 0;

// Public functions to be used on pages.

// Caption popup
function showPopupDiv(d, width, text) {
    widthInt = width;
    txt = "<table width=" + width + " border=0 cellpadding=2 cellspacing=1 bgcolor=\"#f0f0f0\" class=\"table_bord2\"><tr><td class=\"PopupBlock\">" + text + "</td></tr></table>";
    if ((ns4) || (ie4)) {
        /*if (ns4) over = document.overDiv;
        if (ie4) over = overDiv.style;*/
        document.onmousemove = mouseMove;
        if (ns4) document.captureEvents(Event.MOUSEMOVE);
    }
    layerWrite(txt);
    dir = d;
    disp();
}

function showStaticPopupDiv(obj, d, width, text) {
    txt = "<table width=" + width + " border=0 cellpadding=2 cellspacing=1 bgcolor=\"#f0f0f0\" class=\"table_bord2\"><tr><td class=\"PopupBlock\">" + text + "</td></tr></table>";
    layerWrite(txt);
    dir = d;
    document.onmousemove = null;
    //document.getElementById( 'overDiv' ).ondblclick = mouseClickOnDiv;
    dispStaticDiv(obj);
}


// Clears popups if appropriate
function hidePopupDiv() {

    if (cnt >= 1) { sw = 0 };
    if ((ns4) || (ie4)) {
        if (sw == 0) {
            snow = 0;
            hideObject(document.getElementById('overDiv').style, 0);
            hideObject(document.getElementById('HelpShim').style, 1);
        } else {
            cnt++;
        }
    }

}

// Non public functions. These are called by other functions etc.

function dispStaticDiv(obj) {
    x = getposOffsetDiv(obj, "left")
    y = getposOffsetDiv(obj, "top")
    if ((ns4) || (ie4)) {
        var yPoint = y + offsety;
        if (yPoint + 300 > document.body.clientHeight) {
            yPoint = yPoint - 300;
        }
        if (dir == 2) { // Center
            moveTo(document.getElementById('overDiv').style, x + offsetx - (width / 2), yPoint);
        }
        if (dir == 1) { // Right
            moveTo(document.getElementById('overDiv').style, x + offsetx, yPoint);
        }
        if (dir == 0) { // Left
            moveTo(document.getElementById('overDiv').style, x - offsetx - width, yPoint);
        }
        if (snowStatic == 0) {
            showObject(document.getElementById('overDiv').style);
            snowStatic = 1;
        }
        else {
            hideObject(document.getElementById('overDiv').style, 0);
            hideObject(document.getElementById('HelpShim').style, 1);
            snowStatic = 0;
        }
    }
    // Here you can make the text goto the statusbar.
}

// Common calls
function disp() {
    if (ns4) { x = window.e.pageX; y = window.e.pageY; }
    if (ie4) { x = event.x; y = event.y; }
    if (ie5) { x = event.x + document.body.scrollLeft; y = event.y + document.body.scrollTop; }
    if ((ns4) || (ie4)) {
        if (snow == 0) {
            var yPoint = y + offsety;
            if (yPoint + 175 > document.body.clientHeight) {
                yPoint = yPoint - 195
            }

            var xPoint = x;
            if (xPoint + widthInt + offsetx > document.body.clientWidth) {
                xPoint = xPoint - widthInt - 2 * offsetx;
            }
            if (dir == 2) { // Center
                moveTo(document.getElementById('overDiv').style, xPoint + offsetx - (widthInt / 2), yPoint);
            }
            if (dir == 1) { // Right
                moveTo(document.getElementById('overDiv').style, xPoint + offsetx, yPoint);
            }
            if (dir == 0) { // Left
                moveTo(document.getElementById('overDiv').style, xPoint - offsetx - widthInt, yPoint);
            }

            showObject(document.getElementById('overDiv').style);
            snow = 1;
        }
    }
    // Here you can make the text goto the statusbar.
}

// Moves the layer

function mouseClickOnDiv(e) {
    hideObject(document.getElementById('overDiv').style, 0);
    hideObject(document.getElementById('overDiv').style, 1);
}

function mouseMove(e) {
    if (ns4) { x = e.pageX; y = e.pageY; }
    if (ie4) { x = event.x; y = event.y; }
    if (ie5) { x = event.x + document.body.scrollLeft; y = event.y + document.body.scrollTop; }
    if (snow) {
        var yPoint = y + offsety;
        if (yPoint + 175 > document.body.clientHeight) {
            yPoint = yPoint - 195
        }

        var xPoint = x;

        if (xPoint + widthInt + offsetx > document.body.clientWidth) {
            xPoint = xPoint - widthInt - 2 * offsetx;
        }

        if (dir == 2) { // Center
            moveTo(document.getElementById('overDiv').style, xPoint + offsetx - (widthInt / 2), yPoint);
        }
        if (dir == 1) { // Right
            moveTo(document.getElementById('overDiv').style, xPoint + offsetx, yPoint);
        }
        if (dir == 0) { // Left
            moveTo(document.getElementById('overDiv').style, xPoint - offsetx - widthInt, yPoint);
        }
    }
}

// Writes to a layer
function layerWrite(txt) {
    if (ns4) {
        var lyr = document.overDiv.document;
        lyr.write(txt);
        lyr.close();
    } else if (ie4) {
        document.getElementById('overDiv').innerHTML = txt;
    }
}

// Make an object visible
function showObject(obj) {

    if (ns4) {
        obj.visibility = "show";
    }
    else if (ie4) {
        obj.visibility = "visible";
    }

    var IfrRef = document.getElementById('HelpShim');
    IfrRef.style.display = "block";
}

// Hides an object
function hideObject(obj, div) {
    if (div == 0) {
        if (ns4) obj.visibility = "hide";
        else if (ie4) obj.visibility = "hidden";
    }
    else {
        var IfrRef = document.getElementById('HelpShim');
        IfrRef.style.display = "none";
    }
}

// Move a layer
function moveTo(obj, xL, yL) {
    obj.left = xL + document.body.scrollLeft;
    obj.top = yL + document.body.scrollTop;
    var IfrRef = document.getElementById('HelpShim');
    var DivRef = document.getElementById('overDiv');
    IfrRef.style.left = DivRef.style.left;
    IfrRef.style.top = DivRef.style.top;
    IfrRef.style.width = DivRef.offsetWidth;
    IfrRef.style.height = DivRef.offsetHeight;
    IfrRef.style.zIndex = DivRef.style.zIndex - 1;
    IfrRef.style.backgroundColor = "black";
}

function getposOffsetDiv(what, offsettype) {
    var totaloffset = (offsettype == "left") ? (what.offsetLeft + what.offsetWidth) : (what.offsetTop + what.offsetHeight);
    var parentEl = what.offsetParent;
    while (parentEl != null) {
        totaloffset = (offsettype == "left") ? totaloffset + parentEl.offsetLeft : totaloffset + parentEl.offsetTop;
        parentEl = parentEl.offsetParent;
    }
    return totaloffset;
}

