﻿var MenuHideDelay = 500;
var MenuEntryCount = 3;
var timerID = null;
var MenuIsIE = window.navigator && window.navigator.appName == "Microsoft Internet Explorer" && !window.opera;
var MenuSelectedItems = new Array(MenuEntryCount);
var MenuItemSyles = new Array();

MenuItemSyles[0] = MenuItemStyle('mainNormal', 'mainHover');
MenuItemSyles[1] = MenuItemStyle('dynamicNormal', 'dynamicHover', 'dynamicNormalChild', 'dynamicHoverChild');
MenuItemSyles[2] = MenuItemStyle('dynamicNormal', 'dynamicHover');

function MenuItemStyle(unhover, hover, unhoverHasChild, hoverHasChild)
{
    if(unhoverHasChild == null)unhoverHasChild = unhover;
    if(hoverHasChild == null) hoverHasChild = hover;
    
    var style = new Object();
    style.Hover = hover;
    style.Unhover = unhover;
    style.HoverHasChild = hoverHasChild;
    style.UnhoverHasChild = unhoverHasChild;
    return style;
}

function MenuSelectedItem(item, child)
{
    var selectedItem = new Object();
    selectedItem.Parent = item;
    selectedItem.VisibleMenu = child;
    return selectedItem;
}

function Menu_Show(parent, id, vertical, level, X_add, Y_add)
{
    if(vertical == null) vertical = true;
    if(X_add == null) X_add = 0;
    if(Y_add == null) Y_add = 0;
    if(level == null) level = 0;
    
    var sub_elem = null;
    if(id != null)
    {
        sub_elem = document.getElementById(id);
        
        if(MenuSelectedItems[level] != null &&
            MenuSelectedItems[level].VisibleMenu == sub_elem)
        {
            MenuHideItem(level + 1);
        }
    }
    if(MenuSelectedItems[level] != null && 
            MenuSelectedItems[level].VisibleMenu != null &&
            MenuSelectedItems[level].VisibleMenu != sub_elem)
    {
        MenuHideItem(level);
    }
    if(MenuSelectedItems[level] != null && 
            MenuSelectedItems[level].Parent != null &&
            MenuSelectedItems[level].Parent != parent)
    {
        MenuHideItem(level);
    }
    MenuSelectedItems[level] = MenuSelectedItem(parent, sub_elem);
    
    
    if(sub_elem != null)
    {
        parent.className = MenuItemSyles[level].HoverHasChild;
    }
    else
    {
        parent.className = MenuItemSyles[level].Hover;
    }
    
    

    if( sub_elem == null) return;

    
    sub_elem.style.visibility = "visible"
    sub_elem.style.position="absolute";
    
    var pos = MenuGetObjectPosition(parent);
    var HeightParent = pos.Height;
    var WidthParent = pos.Width;
    if(!vertical) HeightParent = 0;
    if(vertical) WidthParent = 0;

    sub_elem.style.left = (pos.X + WidthParent + X_add) +  'px';
    sub_elem.style.top = (pos.Y + HeightParent + Y_add) + 'px';
    sub_elem.style.width = pos.Width + 'px';
    sub_elem.style.height = pos.Height + 'px';
    sub_elem.style.display = "block";
    if(MenuIsIE)
    {
        MenuDisplayIFrame(sub_elem);
    }
    
    
}

function MenuHideItem(level)
{
    for(var i = level; i < MenuSelectedItems.length; i++)
    {
        if(MenuSelectedItems[i] != null)
        {
            if(MenuSelectedItems[i].VisibleMenu != null)
            {
                MenuSelectedItems[i].VisibleMenu.style.display = "none";
                MenuSelectedItems[i].VisibleMenu.style.visibility = "hidden"
                var frame = document.getElementById("MenuIFrameHolder_" + MenuSelectedItems[i].VisibleMenu.id);
                if(frame != null)
                {
                    frame.style.display = "none";
                }
    
                MenuSelectedItems[i].Parent.className = MenuItemSyles[i].UnhoverHasChild;
            }
            else
            {
                MenuSelectedItems[i].Parent.className = MenuItemSyles[i].Unhover;
            }
            
            MenuSelectedItems[i] = null;
        }
    }
}

function MenuStaticHover(item, id)
{
    MenuClearTimer();
    
    test =  TestBrowser();
    if (test.Chrome == true)
    {
	Menu_Show(item, id, false, 0,  -121, 27); 
    }
    else
    {
        Menu_Show(item, id, true);        
    }


}
function MenuClearTimer()
{
    if(timerID != null)
    {
        window.clearTimeout(timerID);
        timerID = null;
    }
}

function MenuStatic_Unhover(root)
{
    timerID = window.setTimeout("MenuHideItem(" + root + ")", MenuHideDelay);
}


function DynamicMenuItemHover(item, id, level)
{
    MenuClearTimer();
//    Menu_Show(item, id, false, level,  4, -2);
    test =  TestBrowser();

    if (test.Chrome == true)
    {
	Menu_Show(item, id, false, level,  0, -3);
    }
    else if (test.Firefox == true || test.Mozilla == true)
    {
	Menu_Show(item, id, false, level,  -1, -4);
    }
    else
    {
	Menu_Show(item, id, false, level,  -1, -2);
    }
    
}


function MenuDisplayIFrame(item)
{
    
    var childFrameId = "MenuIFrameHolder_" + item.id;
    var childFrame = document.getElementById(childFrameId);
    var parent = item.offsetParent;
    if (!childFrame) 
    {
        childFrame = document.createElement("iframe");
        childFrame.id = childFrameId;
        childFrame.src = "about:blank";
        childFrame.style.position = "absolute";
        childFrame.style.display = 'none';
        childFrame.scrolling = "no";
        childFrame.frameBorder = "0";
        document.forms[0].appendChild(childFrame);
    }
    var menuPosition = MenuGetObjectPosition(item);
    var parentPos = MenuGetObjectPosition(parent);
    childFrame.style.left = (menuPosition.X -parentPos.X) + 'px';
    childFrame.style.top = (menuPosition.Y -parentPos.Y) + 'px';
    
    childFrame.style.width = menuPosition.Width + 'px';
    childFrame.style.height = menuPosition.Height + 'px';
    childFrame.style.display = 'block';
    if(item.style.zIndex != null && !isNaN(item.style.zIndex) && item.style.zIndex > 0)
    {
        childFrame.style.zIndex = item.style.zIndex - 1;
    }
    else
    {
        item.style.zIndex = 1001;
        childFrame.style.zIndex = 1000;
    }
    
}

function MenuGetObjectPosition(item)
{
    var position = new Object();
    
    position.X = 0;
    position.Y = 0;
    position.Width = 0;
    position.Height = 0;
    
    if(item.offsetParent != null)
    {
        position.X = item.offsetLeft;
        position.Y = item.offsetTop;
        
        var parentItem = item.offsetParent;
        while(parentItem != null)
        {
            position.X += parentItem.offsetLeft;
            position.Y += parentItem.offsetTop;
            
            var tagName =  parentItem.tagName.toLowerCase();
            if(tagName != "body" && tagName != "html" && 
                parentItem.clientTop != null && parentItem.clientLeft != null)
            {
                position.X += parentItem.clientLeft;
                position.Y += parentItem.clientTop;
            }
            parentItem = parentItem.offsetParent;
        }
    }
    else if(item.left != null && item.top != null)
    {
        position.X = item.left;
        position.Y = item.top;
    }
    else 
    {
        if (item.x != null) 
        {
            position.X = item.x;
        }
        if (item.y != null)
        {
            position.Y = item.y;
        }
    }
    if (item.offsetWidth && item.offsetHeight) 
    {
        position.Width = item.offsetWidth;
        position.Height = item.offsetHeight;
    }
    else if (item.style && item.style.pixelWidth && item.style.pixelHeight) 
    {
        position.Width = item.style.pixelWidth;
        position.Height = item.style.pixelHeight;
    }
    
    return position;
}