//anonymous function call to extend jQuery
(function($){
  if (!$.lleMenu)
  {
    $.lleMenu = {
      'MENU_WAIT_DURATION':0.25, //Units: seconds
      'current':null,
      'HOVER_CLASS':'hover',
      'timer':null
    };
    
    //clear the active menu timer
    $.lleMenu.clear = function ()
    {
      if ($.lleMenu.timer) clearTimeout($.lleMenu.timer);
    };
    
    $.lleMenu.enter = function(e)
    {
      //$.log('Secondary Item Hovered Over');
      //clear the timer
      $.lleMenu.clear();
      //set current target
      $.lleMenu.current = $(this);
      //creates a new timer to change the shown menus
      $.lleMenu.timer = setTimeout($.lleMenu.show, $.lleMenu.MENU_WAIT_DURATION * 200);
    };
    $.lleMenu.enterFirst = function (e)
    {
      //$.log('Primary Item Hovered Over');
      //clear the timer
      $.lleMenu.clear();
      //set current target
      $.lleMenu.current = $(this);
      //Doesn't swap the menus if the menu is being hovered over already.
      //This prevents the sub-sub menus from disappearing when re-hovered over.
      if (!$.lleMenu.current.hasClass($.lleMenu.HOVER_CLASS))
      {
        $.lleMenu.show();
      }
    };
    
    $.lleMenu.hide = function ()
    {
      //$.log('hidden');
      $('.menu-list-item').removeClass($.lleMenu.HOVER_CLASS);
      return true;
    };
    
    $.lleMenu.leave = function (e)
    {
      //$.log('Secondary Item Hovered Off');
      
    };
    $.lleMenu.leaveFirst = function (e)
    {
      //$.log('Primary Item Hovered Off');
      //clear the timer
      $.lleMenu.clear();
      //set current target
      $.lleMenu.current = $(this);
      
      $.lleMenu.timer = setTimeout($.lleMenu.hide, $.lleMenu.MENU_WAIT_DURATION * 2000);
    };
    $.lleMenu.show = function ()
    {
      //$.log('show');
      $('.menu-list-item').not($($.lleMenu.current).parents('.menu-list-item')).removeClass($.lleMenu.HOVER_CLASS);
      $($.lleMenu.current).addClass($.lleMenu.HOVER_CLASS);
    };
    
    $('#menu > .menu-list > .menu-list-item').live('mouseenter', $.lleMenu.enterFirst).live('mouseleave', $.lleMenu.leaveFirst);
    $('.menu-list-item .menu-list-item').live('mouseenter', $.lleMenu.enter).live('mouseleave', $.lleMenu.leave);
    
    //Hides the menus when the user clicks anywhere other than on the menu
		$(document).click($.lleMenu.hide);
		
		//Hides the menus when the user presses the -esc- or -alt- key
		$(document).keydown
		(
			//keydown
			function (event)
			{
				//checks if -esc- or -alt- are pressed and hides the menus
				switch (event.keyCode)
				{
					case 18: //-alt-
					case 27: //-esc-
					{
						$.lleMenu.hide();
					}	break;
					default:
					{
						//$.log(event.keyCode);
					}	break;
				}
			}
		);
    //$.log('LLE Menu Initialized');
  }
})(jQuery);
