﻿var menu = {
    delay: 300,
    hideDelay: 300,
    curMenuId: null,
    timerMenuRef: null,
    timerHideMenuRef: null,
    initiallySelectedMenuId: null,
    initiallySelectedSubMenuId: null,
    curSubMenuId: null,
    mainMenuHolderId: null,
    reset: function() {
        jQuery(menu.mainMenuHolderId + " a").removeClass("select");
        jQuery("div.mainSubMenu").hide();
    },
    hide: function() {
        menu.reset();
        menu.curMenuId = null;
        menu.curSubMenuId = null;
    },
    show: function() {
        menu.reset();
        jQuery(menu.curMenuId + " a").addClass("select");
        jQuery(menu.curSubMenuId).show()
    },
    clearMenuTimer: function() {
        if (menu.timerMenuRef != null) {
            clearTimeout(menu.timerMenuRef);
            menu.timerMenuRef = null;
        }
    },
    clearHideMenuTimer: function() {
        if (menu.timerHideMenuRef != null) {
            clearTimeout(menu.timerHideMenuRef);
            menu.timerHideMenuRef = null;
        }
    },
    handleTopMenuMouseEnter: function(evt) {
        var selMenuId = "#" + evt.target.parentNode.id;

        if (menu.curMenuId === selMenuId) {
            return;
        }

        menu.curSubMenuId = "#" + evt.target.parentNode.submenuid;

        menu.curMenuId = selMenuId;
        menu.clearMenuTimer();
        menu.timerMenuRef = setTimeout(menu.show, menu.delay);
    },
    handleTopMenuMouseOut: function(evt) {
        menu.timerHideMenuRef = setTimeout(menu.hide, menu.delay);
    },
    handleSubmenuMouseEnter: function(evt) {
        menu.clearMenuTimer();
    },
    handleMenuMouseEnter: function(evt) {
        menu.clearHideMenuTimer();
    },
    handleMenuMouseExit: function(evt) {
        menu.timerHideMenuRef = setTimeout(menu.hideMenu, menu.hideDelay);
    },
    hideMenu: function(evt) {
        menu.hide();
        if (menu.initiallySelectedMenuId !== null) {
            jQuery(menu.initiallySelectedMenuId + " a").addClass("select");
            jQuery(menu.initiallySelectedSubMenuId).show();

            menu.curMenuId = menu.initiallySelectedMenuId;
            menu.curSubMenuId = menu.initiallySelectedSubMenuId;
        }
    },
    init: function(menuContainer, mainMenuId) {
        menu.mainMenuHolderId = "#" + mainMenuId;

        var m = jQuery(menu.mainMenuHolderId + " a.select");
        if (m !== null && m.length > 0) {
            var li = m[0].parentNode;
            menu.initiallySelectedMenuId = "#" + li.id;
            menu.initiallySelectedSubMenuId = "#" + li.submenuid;
            jQuery(menu.initiallySelectedSubMenuId).show();
        }
        jQuery(menu.mainMenuHolderId + " a").mouseenter(menu.handleTopMenuMouseEnter);
        var s = jQuery("div.mainSubMenu");
        if (s !== null) s.mouseenter(menu.handleSubmenuMouseEnter);
        jQuery("#" + menuContainer).hover(menu.handleMenuMouseEnter, menu.handleMenuMouseExit);
    }
}
