var mapping = new Object();
var hideQueue = new Array();
var cursorOnMenuFlag = false;
var currentSubMenu = null;

function map(topMenuItem,subMenuDiv)
{
    if (mapping[topMenuItem.id] == null || mapping[topMenuItem.id] == undefined)
    {                
        mapping[topMenuItem.id] = subMenuDiv;                               
    }
}

function $get(id)
{
    return document.getElementById(id);
}

function showMenuItems(topMenuItem)
{
    hideAll(true);
        
    if (mapping[topMenuItem.id] == null || mapping[topMenuItem.id] == undefined)
        return;

    cursorOnMenuFlag = true;
    kickHide(topMenuItem);
    var pos = getPos(topMenuItem);
    var submenuDiv = mapping[topMenuItem.id];    
    submenuDiv.style.top = pos.posY + 41;
    submenuDiv.style.left = pos.posX;
    submenuDiv.style.display = "block";  
	currentSubMenu = submenuDiv;  
}

function kickHide(topMenuItem)
{
    if (hideMenuItems[topMenuItem] != null && hideMenuItems[topMenuItem] != undefined)
        window.clearTimeout(hideMenuItems[topMenuItem]); 
}

function getPos( oElement )
{
    var posX = null;
    var posY = null;
    while( oElement != null ) 
    {
        posY += oElement.offsetTop;
        posX += oElement.offsetLeft;
        oElement = oElement.offsetParent;
    }
    return {posY:posY,posX:posX};
}

function hideMenuItems(topMenuItem)
{
    if (mapping[topMenuItem.id] == null || mapping[topMenuItem.id] == undefined)
        return;

    var submenuDiv = mapping[topMenuItem.id];
    hideQueue.push(submenuDiv);
    var index = hideQueue.length-1;
    hideMenuItems[topMenuItem] = window.setTimeout("hide(" + index +");",100);
}

function hide(index)
{
    hideQueue[index].style.display = "none";
    cursorOnMenuFlag = false;	
}

function hideAll(force)
{
    if (!cursorOnMenuFlag || force)
    for (var i=0;i<hideQueue.length;i++)
    {
        var s = hideQueue[i];
        if (currentSubMenu != s)   
            s.style.display = "none";
    }
}

document.onmousemove = hideAll;