function menuItem_MouseOver(e) {
    this.showMenu();
}

function menuItem_MouseOut(e) {
    setMenuItemTimeout(this);
}

function setMenuItemTimeout(menuItem) {
    if(menuItem) {
        menuItem.timeout = window.setTimeout(function() {menuItem.hideMenu();}, 250);
    }
}

function clearMenuItemTimeout(menuItem) {
    if(menuItem && menuItem.timeout) {
        window.clearTimeout(menuItem.timeout);
        menuItem.timeout = null;
    }
}

function showMenuForItem() {
    clearMenuItemTimeout(this);
    if(this.parentMenu.parentMenuItem) {
        this.parentMenu.parentMenuItem.showMenu();
    }
    if(this.parentMenu.activeItem && (this.parentMenu.activeItem != this)) {
        this.parentMenu.activeItem.hideMenu();
    }

    this.className = this.originalClassName + " showingMenu";
        
    if(this.parentMenu.activeItem != this) {
        if(this.menu) {
            showItemMenu(this.menu);
        }
    }
    this.parentMenu.activeItem = this;
}

function hideMenuForItem() {
    clearMenuItemTimeout(this);
    this.className = this.originalClassName;

    if(this.menu) {
        hideItemMenu(this.menu);
        this.parentMenu.activeItem = null;
    }
}


function showItemMenu(menu) {
    var iframe = null;
    if(menu) {
        menu.style.display="block";
        menu.style.zIndex = 1000;
        
        iframe = menu.parentMenuItem.ieFixIFrame;
        
                    
        if(iframe) {
            iframe.style.display="block";
            iframe.style.top = menu.offsetTop + "px";
            iframe.style.left = menu.offsetLeft + "px";
            iframe.width = menu.offsetWidth;
            iframe.height = menu.offsetHeight;
            iframe.style.zIndex = 999;
        }
    }
}

function hideItemMenu(menu) {
    var iframe = null;
    if(menu) {
        if(menu.activeItem) {
            menu.activeItem.hideMenu();
        }
        menu.style.display="none";

        if(menu.parentMenuItem) {
            iframe = menu.parentMenuItem.ieFixIFrame;
        }
        if(iframe) {
            iframe.style.display="none";
        }
    }
}

function initializeMenuById(menuId) {
    initializeMenu(document.getElementById(menuId));
}

function initializeMenu(menu) {
    initializeMenu(menu, null);
}

function initializeMenu(menu, parentMenuItem, addIFrame) {
    var childNode = null;
    var iframe = null;
    if(menu) {
        menu.timeout = null;
        menu.parentMenuItem = parentMenuItem;
        menu.activeItem = null;
        
        if(parentMenuItem) {
            menu.level = parentMenuItem.parentMenu.level + 1;
        }
        else {
            menu.level = 1;
        }
        
        
        menu.className = menu.className + " dynaminMenu level" + menu.level;
        
        if(parentMenuItem && (navigator.appName == "Microsoft Internet Explorer")) {
            iframe = document.createElement("iframe");
            iframe.style.display = "none";
            iframe.style.position = "absolute";
            iframe.style.border = "none";
            iframe.frameBorder = 0;
            parentMenuItem.appendChild(iframe);
            parentMenuItem.ieFixIFrame = iframe;
        }
        
        for(var i = 0; i < menu.childNodes.length; i++) {
            childNode = menu.childNodes[i];
            if(childNode.nodeName == 'LI') {
                initializeMenuItem(childNode, menu);
            }
        }
    }
}

function initializeMenuItem(menuItem, parentMenu) {
    var subMenu = null;
    var childNode = null;
    
    menuItem.parentMenu = parentMenu;
    menuItem.onmouseover = menuItem_MouseOver;
    menuItem.onmouseout = menuItem_MouseOut;
    menuItem.showMenu = showMenuForItem;
    menuItem.hideMenu = hideMenuForItem;
    
    menuItem.className = menuItem.className + " menuItem";
    
    menuItem.timeout = null;
    for(var i=0; i < menuItem.childNodes.length; i++) {
        childNode = menuItem.childNodes[i];
        if(childNode.nodeName == "UL") {
            subMenu = childNode;
            initializeMenu(subMenu, menuItem);
            menuItem.className = menuItem.className + " parentSubMenuItem";
        }
    }
    menuItem.menu = subMenu;
    menuItem.originalClassName = menuItem.className;
}
