﻿var timerMenu;
var lastMenu;
var timerSubMenu;
var lastSubMenu;

(function($) {
    $.widget("ui.menu", {
        init: function() {
            var self = this;
            var options = this.options;
            if (!options.delay)
                options.delay = 500;

            $('body').mouseover(function(e) {
                clearTimeout(timerMenu);
                clearTimeout(timerSubMenu);
                timerMenu = setTimeout(function() {
                    $('ul', self.element).hide();
                }, options.delay);
                lastMenu = null;
                lastMenu = null;
                e.stopPropagation();
            });

            $('>li', this.element).mouseover(function(e) {
                var ele = $(this);
                clearTimeout(timerMenu);
                clearTimeout(timerSubMenu);
                if (lastMenu) {
                    timerMenu = setTimeout(function() {
                        self.showMenu(ele);
                    }, 0);
                }
                else {
                    self.showMenu(ele);
                }
                e.stopPropagation();
            });

            $('>li li', this.element).mouseover(function(e) {
                var ele = $(this);
                clearTimeout(timerMenu);
                clearTimeout(timerSubMenu);
                if (lastSubMenu) {
                    timerSubMenu = setTimeout(function() {
                        self.showSubMenu(ele);
                    }, 0);
                }
                else {
                    self.showSubMenu(ele);
                }
                e.stopPropagation();
            });
        },
        showMenu: function(ele) {
            $('li ul', this.element).hide();
            if ($('>ul', ele).length <= 0)
                return;
            $('>ul', ele).show();
            lastMenu = ele;
            lastSubMenu = null;
        },
        showSubMenu: function(ele) {
            $('ul>div', this.element).each(function() { $(this).height($(this).parent().height()); });
            $('ul', $(ele).parent()).hide();
            if ($('>ul', ele).length <= 0)
                return;
            var sele = $('>ul', ele);
            sele.parents('ul').show();
            sele.show();

            if (sele.offset().left + sele.width() + 5 >= $(window).width()) {
                sele.css('left', sele.parent().position().left - sele.width() + 5);
            }
            lastSubMenu = ele;
        }
    });
})(jQuery);
