var overDiv = null;
var overTimeout = 200;
var timer = null;
var overObj = null;
var init = false;
var helpArray = new Array ();
var overXPos = 0;
var overYPos = 0;
var clientX = 0;
var clientY = 0;
var loadingImg = null;

function initOver () {
    var oldmove;
    var func;

    if (init)
        return;

    func = function (e) {
        hideOver (e, overObj);
    }

    oldmove = document.onmousemove;
    if (typeof document.onmousemove != 'function')
        document.onmousemove = func;
    else
        document.onmousemove = function (e) {
            if (oldmove)
                oldmove (e);
            func (e);
        }

    init = true;
}

function createLoadingImg () {
    var img;

    img = document.createElement ("img");
    img.src = "/images/gal/loading.gif"

    return img;
}

function addhelp (obj, text) {
    var id;

    try {
        id = obj.id;
    }
    catch (e) {
        return;
    }

    if (id) {
        helpArray[id] = new String (text);
    }

    addOver (obj);
}

function addOver (obj) {
    obj.onmouseover = function (e) {
        overObj = this;
    }
    obj.onmouseout = function (e) {
        overObj = null;
    }
    if (loadingImg == null) // preload loading image
        loadingImg = createLoadingImg ();
}

function buildOverPicDiv (obj) {
    var src = "";
    var overDiv;

    try {
        src = obj.src;
        src = src.replace (/size=2/g, "size=3");
    }
    catch (e) { }

    overDiv = document.createElement ("div");
    overDiv.className = "overPic";
/*    overDiv.style.height = "355px";
    overDiv.style.width = "398px";
    overDiv.style.backgroundColor = "#CCCCCC";
    overDiv.style.border = "1px solid #676767";
    overDiv.style.padding = "8px";*/

    var img = document.createElement ("img");
    img.src = src;
    img.className = "pic";
    /*img.style.height = "298px";
    img.style.width = "398px";
    img.style.marginBottom = "6px";*/
    if (document.all)
        overDiv.appendChild (img);
    else {
        if (loadingImg == null)
            loadingImg = createLoadingImg ();
        img.onload = function () {
            overDiv.replaceChild (img, loadingImg);
        }
        overDiv.appendChild (loadingImg);
    }

    /*var div = document.createElement ("div");
    div.style.width = "398px";
    div.style.height = "47px";
    div.style.backgroundColor = "#FFFFFF";
    overDiv.appendChild (div);*/

    return overDiv;
}

function buildHelpDiv (obj) {
    var id;
    var overDiv;

    try {
        id = obj.id;
    }
    catch (e) {
        return null;
    }

    if (typeof helpArray[id] == 'undefined')
        return null;

    overDiv = document.createElement ("div");
    overDiv.className = "overHelp";
    overDiv.innerHTML = helpArray[id];

    //var text = document.createTextNode (helpArray[id]);
    //overDiv.appendChild (text);

    return overDiv;
}

function showOver (e, obj) {
    if (! e)
        e = window.event;

    if (overDiv) {
        document.body.removeChild (overDiv);
        overDiv = null;
    }

    if (! timer) {
        timer = window.setTimeout (function () {
            showOver (e, obj);
        }, overTimeout);
        return;
    }

    window.clearTimeout (timer);
    timer = null;

    var x = clientX + getScrollX ();
    var y = clientY + getScrollY ();
    overDiv = buildHelpDiv (obj);
    if (! overDiv)
        overDiv = buildOverPicDiv (obj);

    if (overDiv) {
        overDiv.style.position = "absolute";
        document.body.appendChild (overDiv);
        var diffX = getWindowWidth () - (clientX + overDiv.offsetWidth);
        var diffY = getWindowHeight () - (clientY + overDiv.offsetHeight);
        if (diffX < 0)
            x += diffX;
        if (diffY < 0)
            y += diffY;
        overDiv.style.left = x + "px";
        overDiv.style.top = y + "px";

        overXPos = clientX;
        overYPos = clientY;
    }

}

function hideOver (e, obj) {
    if (!e)
        e = window.event;

    if (timer) {
        window.clearTimeout (timer);
        timer = null;
    }

    if (Math.abs (e.clientX - overXPos) <= 5 && Math.abs (e.clientY - overYPos) <= 5)
        return;

    if (overDiv) {
        document.body.removeChild (overDiv);
        overDiv = null;
    }
    if (obj) {
        if (e.clientX + getScrollX () >= getLeftPos (obj) && e.clientX + getScrollX () <= getLeftPos (obj) + obj.offsetWidth
            && e.clientY + getScrollY () >= getTopPos (obj) && e.clientY + getScrollY () <= getTopPos (obj) + obj.offsetHeight) {

            clientX = e.clientX;
            clientY = e.clientY;

            timer = window.setTimeout (function () {
                showOver (e, obj);
            }, overTimeout);
        }
    }
}
