﻿$(document).ready(function() {
    var mainmenu = $(".mainmenu > ul");
    var mainmenuitems = mainmenu.find("> li.dropdownexpand");
    var mainmenuanchors = mainmenuitems.find("> a");
    var mainmenupanelscontainer = $(".mainmenuhover");
    var mainmenupanels = mainmenupanelscontainer.find("> div");

    var _hoverMenu = false;
    var _hoverPanel = false;
    var _fadeSpeed = 10;
    var _intentSpeed = 50;
    var _enableDropdown = false;

    init();

    mainmenuitems.hover(enterItem, leaveItem);
    mainmenuanchors.hoverIntent({
        interval: _intentSpeed,
        over: enterAnchor,
        timeout: _intentSpeed,
        out: leaveAnchor
    });
    mainmenu.mouseleave(function() { _hoverMenu = false; tryClose(); });

    mainmenuanchors.mouseleave(function() { _enableDropdown = true; });
    setTimeout(function() { _enableDropdown = true; }, 1000);

    function activateItem(active) {
        var activeid = active.attr("id");
        var openpanel = mainmenupanels.filter("." + activeid).fadeIn(_fadeSpeed);
        mainmenupanels.not(openpanel).fadeOut(_fadeSpeed);
        active.addClass("hover");
        mainmenuitems.not(active).removeClass("hover");
    }

    function enterItem() {
        _hoverMenu = true;
    }

    function leaveItem() {
        _hoverMenu = false;
    }

    function enterAnchor() {
        if (!_enableDropdown) return;
        activateItem($(this).parent());
    }

    function leaveAnchor() {
        tryClose();
    }

    mainmenupanels.hover(enterPanel, leavePanel);
    function enterPanel() {
        _hoverPanel = true;
    }

    function leavePanel() {
        _hoverPanel = false;
        tryClose();
    }

    var _hoverInput = false;
    mainmenupanels.find("input,select,option").focus(inputEnter).blur(inputLeave);
    function inputEnter() { _hoverInput = true; }
    function inputLeave() { _hoverInput = false; }

    function hidePanel() {
        if (!_hoverPanel && !_hoverMenu && !_hoverInput) {
            mainmenupanels.fadeOut(_fadeSpeed);
            mainmenuitems.removeClass("hover");
        }
    }

    function tryClose() {
        setTimeout(hidePanel, 500);
    }

    function init() {
        var position = mainmenu.offset();
        if (position != null) {
            var top = position.top + mainmenu.height();
            var left = position.left;
            mainmenupanelscontainer.css({ "top": top });
            mainmenupanels.each(function() { initPanel($(this)); });
        }
    }

    function initPanel(panel) {
        var submenu = panel.find(".submenu");
        submenu.hover(function() { $(this).toggleClass("hover") });
        var tabs = submenu.find("> ul > li");
        var flips = panel.find("> div").not(submenu);
        tabs.click(tabClick);
        tabs.hoverIntent({
            interval: _intentSpeed,
            over: tabClick,
            timeout: _intentSpeed,
            out: function() { }
        });
        tabs.eq(0).click();

        function tabClick() {
            var tab = $(this);
            var index = tab.index();
            tab.addClass("active");
            tabs.not(tab).removeClass("active");
            var flip = flips.eq(index).show();
            flips.not(flip).hide();
        }
    }
});

