function dropMenu(id, autoclose)
{
    dropMenu.init(document.getElementById(id), id, autoclose);
    dropMenu.root[id] = true;
}

dropMenu.count = 0;

dropMenu.root = new Array();

dropMenu.links = new Array();

dropMenu.timers = new Array();

dropMenu.init = function (oRoot, prefix, autoclose) {

    for(var i = 0, len = oRoot.childNodes.length; i < len; i++)
    {
        var oItem = oRoot.childNodes[i];

        if(oItem.nodeType != 1 || oItem.nodeName != "LI") continue;

        for(var j = 0, clen = oItem.childNodes.length; j < clen; j++)
        {
            var oChild = oItem.childNodes[j];

            if(oChild.nodeType != 1 || oChild.nodeName != "UL") continue;

            oItem.id = prefix + "_" + (dropMenu.count++).toString();
            oItem.onmouseover = dropMenu.open;
            oChild.onmouseover = dropMenu.open;

            if(autoclose)
            {
                oItem.onmouseout = dropMenu.close;
                oChild.onmouseout = dropMenu.close;
            }

            oChild.id = prefix + "_" + (dropMenu.count++).toString();
            dropMenu.links[oItem.id] = oChild;

            dropMenu.init(oChild, prefix);
        }
    }
}

dropMenu.close = function (e) {

    dropMenu.display(e, false);
}

dropMenu.open = function (e) {

    for(var id in dropMenu.links)
    {
        if(dropMenu.links[id].style)
           dropMenu.links[id].style.display = "none";
    }

    dropMenu.display(e, true);
}

dropMenu.display = function (e, display) {

    var oItem = (!e ? window.event.srcElement : e.target);
    var found = false;

    while(oItem.nodeType == 1)
    {
        if(oItem.id != "")
        {
            var id = oItem.id;

            if(!found && oItem.nodeName == "LI")
            {
                var root_id = dropMenu.links[id].id;

                dropMenu.deleteTimer(root_id);

                if(display === false)
                {
                    dropMenu.timeClose(root_id, false);
                }
                else
                {
                    dropMenu.links[id].style.display = "block";
                }

                found = true;
            }
            else if(oItem.nodeName == "UL")
            {
                dropMenu.deleteTimer(id);

                if(dropMenu.root[id] != undefined) break;
            }
        }

        oItem = oItem.parentNode;
    }
}

dropMenu.deleteTimer = function (id) {

    if(dropMenu.timers[id] !== undefined)
    {
        clearTimeout(dropMenu.timers[id]);
        delete(dropMenu.timers[id]);
    }
}

dropMenu.timeClose = function (id, close) {

    if(close)
    {
        document.getElementById(id).style.display = "none";
    }
    else
    {
        dropMenu.timers[id] = setTimeout('dropMenu.timeClose("' + id + '", true)', 100);
    }
}
