﻿var tooltip = {
    position: "top",
    color: "black",
    manualTop: 0,
    css: "",
    contextmenuDistance: 100,
    init: function (obj) {
        for (var t in obj) {
            if (obj[t] != undefined) {
                if (obj[t].className != undefined) {
                    if (obj[t].className.indexOf('tool ') == 0 || obj[t].className == 'tool') {

                        obj[t].onmouseover = function () {
                            var child = this.getElementsByTagName('span');
                            tooltip.hover(this, child[0].innerHTML);
                        }
                    }

                    if (obj[t].className == 'contextmenu') {
                        obj[t].onmouseover = function () {
                            var child = this.getElementsByTagName('span');
                            tooltip.contextmenu(this, child[0].innerHTML);
                        }
                    }
                }
            }
        }
    },
    clearManual: function () {
        if (document.getElementById('contextmenu')) {
            document.body.removeChild(document.getElementById('contextmenu'));
        }
    },
    clear: function (e) {
        if (document.getElementById('contextmenu')) {
            var obj = document.getElementById('contextmenu');
            var left = tooltip.getPosition(obj).x;
            var top = tooltip.getPosition(obj).y;
            var height = obj.offsetHeight;
            var width = obj.offsetWidth;

            var mouseLeft = tooltip.mouseX(e);
            var mouseTop = tooltip.mouseY(e);


            if (tooltip.position == "right") {
                var distance = tooltip.contextmenuDistance;
                //------------LEFT--------------------------------------------------BOTTOM------------------------------------------------------------RIGHT-------------------------------------------------------------------TOP
                if (mouseLeft < (parseInt(left) - (parseInt(distance))) || mouseTop > parseInt(top) + parseInt(height) + parseInt(distance) || mouseLeft > parseInt(left) + parseInt(width) + parseInt(distance) || mouseTop < parseInt(top) - parseInt(distance)) // || mouseTop > top + height || mouseLeft > left + width + 10 || mouseTop < top - distance
                    document.body.removeChild(obj);
            } else {
                var distance = 50;
                if (mouseLeft < (left - distance) || mouseTop < (top - distance) || (mouseTop + height) > (top + height + distance) || mouseLeft > (left + width + 10))
                    document.body.removeChild(obj);
            }
        }

        if (document.getElementById('tooltip')) {
            var obj = document.getElementById('tooltip');
            var left = tooltip.getPosition(obj).x;
            var top = tooltip.getPosition(obj).y;
            var height = obj.offsetHeight;
            var width = obj.offsetWidth;

            var mouseLeft = tooltip.mouseX(e);
            var mouseTop = tooltip.mouseY(e);

            var distance = 200;

            if (mouseLeft < (left - distance) || mouseTop < (top - distance) || (mouseTop + height) > (top + height + distance) || mouseLeft > (left + width + 10))
                document.body.removeChild(obj);
        }
    },
    cancelBubbleEvent: function (e) {
        if (!e) var e = window.event;
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();
    },
    contextmenu: function (obj, text, width) {
        if (text.length == 0) return false;
        tooltip.clear;

        var oldTop = tooltip.getPosition(obj).y;
        var oldLeft = tooltip.getPosition(obj).x;
        var oldWidth = obj.offsetWidth;

        if (document.getElementById('tooltip')) {
            document.body.removeChild(document.getElementById('tooltip'));
        }

        if (document.getElementById('contextmenu')) {
            document.body.removeChild(document.getElementById('contextmenu'));
        }

        var newDiv = document.createElement('div');
        newDiv.setAttribute("id", "contextmenu");
        if (width != undefined)
            newDiv.style.width = width + "px";
        newDiv.setAttribute("class", "context " + tooltip.color + " " + tooltip.css);
        if (tooltip.position == "top") newDiv.innerHTML = '<div class="inner">' + text + '</div><div class="arrow IS_18 IS_18_ArrowRight"></div><br class="clearBoth" />';
        if (tooltip.position == "right") newDiv.innerHTML = '<div class="arrowRight IS_18 IS_18_ArrowRight"></div><div class="inner">' + text + '</div>';
        document.body.appendChild(newDiv);


        var newTooltip = document.getElementById('contextmenu');
        if (tooltip.position == "top") newTooltip.style.top = ((oldTop - 5)) + 'px';
        if (tooltip.position == "bottom") newTooltip.style.top = ((oldTop + 5 + newTooltip.offsetHeight)) + 'px';
        if (tooltip.position == "right") {
            newTooltip.style.top = ((oldTop - 5)) + tooltip.manualTop + 'px';
            newTooltip.style.left = (oldLeft + 10 + (oldWidth / 2)) + 'px';
        } else {
            newTooltip.style.left = (oldLeft + 10 - (newTooltip.offsetWidth)) + 'px';
        }
    },
    hover: function (obj, text) {
        if (text.length == 0) return false;
        if (document.getElementById('tooltip'))
            document.body.removeChild(document.getElementById('tooltip'));

        obj.onmouseout = function () {
            if (document.getElementById('tooltip'))
                document.body.removeChild(document.getElementById('tooltip'));
        };

        var oldTop = tooltip.getPosition(obj).y;
        var oldLeft = tooltip.getPosition(obj).x;
        var objWidth = obj.offsetWidth;
        var objHeight = obj.offsetHeight;

        if (document.getElementById('tooltip')) {
            document.body.removeChild(document.getElementById('tooltip'));
        }

        if (document.getElementById('contextmenu')) {
            document.body.removeChild(document.getElementById('contextmenu'));
        }

        var newDiv = document.createElement('div');
        newDiv.setAttribute("id", "tooltip");
        newDiv.setAttribute("class", "tooltip");
        if (tooltip.position == "top") newDiv.innerHTML = '<div class="inner">' + text + '</div><div class="arrow IS_18 IS_18_ArrowRight"></div>';
        if (tooltip.position == "bottom") newDiv.innerHTML = '<div class="arrowBottom IS_18 IS_18_ArrowRight"></div><div class="inner">' + text + '</div>';
        document.body.appendChild(newDiv);

        var newTooltip = document.getElementById('tooltip');
        if (tooltip.position == "top") newTooltip.style.top = ((oldTop - newTooltip.offsetHeight)) + 'px';
        if (tooltip.position == "bottom") newTooltip.style.top = ((oldTop + objHeight)) + 'px';
        newTooltip.style.left = (oldLeft + (objWidth / 2) - (newTooltip.offsetWidth / 2)) + 'px';
    },
    mouseX: function (evt) {
        if (evt.pageX) return evt.pageX;
        else if (evt.clientX)
            return evt.clientX + (document.documentElement.scrollLeft ?
            document.documentElement.scrollLeft :
            document.body.scrollLeft);
        else return null;
    },
    mouseY: function (evt) {
        if (evt.pageY) return evt.pageY;
        else if (evt.clientY)
            return evt.clientY + (document.documentElement.scrollTop ?
           document.documentElement.scrollTop :
           document.body.scrollTop);
        else return null;
    },
    getPosition: function (element) {
        var elem = element, tagname = "", x = 0, y = 0;

        while ((typeof (elem) == "object") && (typeof (elem.tagName) != "undefined")) {
            y += elem.offsetTop;
            x += elem.offsetLeft;
            tagname = elem.tagName.toUpperCase();

            if (tagname == "BODY")
                elem = 0;

            if (typeof (elem) == "object")
                if (typeof (elem.offsetParent) == "object")
                    elem = elem.offsetParent;
        }

        position = new Object();
        position.x = x;
        position.y = y;
        return position;
    }
}

/*TRICKY, THIS IS FOR MULTIPLE WINDOW ONLOADS, e.g. TAB2 AND BBC*/
if (window.addEventListener) // W3C standard
{
    window.addEventListener('load', tooltip.init, false);   // NB **not** 'onload'
    window.addEventListener('mouseover', tooltip.clear, false);
}
else if (window.attachEvent) // Microsoft
{
    window.attachEvent('onload', tooltip.init);
    window.attachEvent('onmouseover', tooltip.clear);
}
