﻿if (typeof Array.prototype.indexOf == 'undefined')
{
    Array.prototype.indexOf = function(s)
    {
        for (var i = 0; i < this.length; i++)
            if (this[i] === s)
                return (i);
        return (-1);
    }
}
var menu = new menu ();
function menu ()
{
    this.timers = new Array();
    this.toHide = new Array();
}
function menuAbsolutPosition(element)
{
    var left = element.offsetLeft;
    var top  = element.offsetTop;
    var e = element.offsetParent;
    while (e)
    {
        left += e.offsetLeft;
        top  += e.offsetTop;
	    e     = e.offsetParent;
    }
    return {left:left, top:top};
}
function menuDebug(text, append)
{
    if (e == null)
    {
        e = document.createElement ('div');
        e.id='menuDivDebug';
        document.body.appendChild (e);
        e.style.position='absolute';
        e.style.left = 100;
        e.style.top = 100;
    }
    e.innerHTML = ((append) ? e.innerHTML : '') + text;
}
function menuHide(id)
{
    var m = document.getElementById(id);
    if (m != null && !m.menuIs2show)
        m.style.visibility='hidden';
    var i = menu.toHide.indexOf (id);
    if (i >= 0)
        menu.toHide.splice (i, 1);
}
function menuHideAll2 ()
{
    while (menu.timers.length > 0)
        window.clearTimeout (menu.timers.pop());
    while (menu.toHide.length > 0)
        menuHide(menu.toHide[0]);
}
function menuOver(source, id)
{
    var m = document.getElementById(id);
    if (m != null)
    {
        m.onmouseover=function() { menuSet2show(this); };
        m.onmouseout=function(){menuOut(this.id);};
        m.menuIsContainer = true;
        if (typeof (source.menuContainer) == 'undefined')
        {
            for (var c = source ; c != null ; c = c.parentNode)
                if (typeof (c.menuIsContainer) != 'undefined')
                {
                    source.menuContainer = c;
                    break;
                }
        }            
        if (typeof (m.menuParent) == 'undefined')
            m.menuParent = source;
        var s = '';
        menuSet2show (m);
        menuHideAll2();
        var pSource = menuAbsolutPosition(source);
        var pos = menuAbsolutPosition(m.offsetParent);
        m.style.visibility='visible';
        m.style.position='absolute';
        m.style.zIndex=10;
        var n = (typeof (source.menuContainer) == 'undefined')
            ? ((typeof (menuOffsetTop) == 'undefined') ? 0 : menuOffsetTop)
            : ((typeof (menuOffsetTopSubmenu) == 'undefined') ? 0 : menuOffsetTopSubmenu);
        m.style.top=(pSource.top - pos.top + n)+'px';
        n = (typeof (source.menuContainer) == 'undefined')
            ? ((typeof (menuOffsetLeft) == 'undefined') ? 0 : menuOffsetLeft)
            : ((typeof (menuOffsetLeftSubmenu) == 'undefined') ? 0 : menuOffsetLeftSubmenu);
        var l = (pSource.left - pos.left + n + ((menuSubDirection == 'left') ? -m.offsetWidth : source.offsetWidth))+'px';
        m.style.left=l;
        
    }
}
function menuOut(id)
{
    var m = document.getElementById(id);
    if (m != null)
    {
        for (var p = m ; typeof (p) != 'undefined' &&  p != null && p.menuParent != null ; p = p.menuParent.menuContainer)
        {
            p.menuIs2show = false;
            p.menuParent.className = 'menuItemNotSelected';
            menu.toHide.push(p.id);
            menu.timers.push (window.setTimeout ('menuHide(\''+p.id+'\');', 500));
        }
    }
}
function menuSet2show (element)
{
    for (var p = element ; typeof (p) != 'undefined' &&  p != null && p.menuParent != null ; p = p.menuParent.menuContainer)
    {
        p.menuParent.className='menuItemSelected';
        p.menuIs2show = true;
    }
}

