
var Menu = {
	SUB_MENU_SLIDE_DOWN_DELAY:  100, // miliseconds
	SUB_MENU_SLIDE_UP_DELAY:  500, // miliseconds
	
	SUB_MENU_MIN_LEFT_OFFSET:  10, // pixels
	
	SUB_MENU_LEFT_OFFSET_CORRECTION: 2, // pixels
	
	__slideDownTimeoutHandler:  null,
	__slideUpTimeoutHandler:  null,
	
	__currentMenuItem:  null,
	__currentSubMenu:  null,
	
	menuItemOver: function(menuItem, subMenuID, event)
	{
		if ( Util.isOwnMouseOverEventOf(menuItem, event) )
		{
			this.hideCurrentSubMenu();
			this.setCurrentMenuItem(menuItem);
			this.showSubMenu(subMenuID, menuItem);
		}
	},
	
	menuItemOut: function(element, event)
	{
		if ( Util.isOwnMouseOutEventOf(element, event) )
		{
			this.slideSubMenuUp();
		}
	},
	
	subMenuOver: function()
	{
		if ( this.__currentSubMenu )
		{
			this.slideSubMenuDown();
		}
	},
	
	subMenuOut: function()
	{
		this.slideSubMenuUp();
	},
	
	showSubMenu: function(subMenuID, menuItem)
	{
		var subMenuContainer = document.getElementById('top-sub-menu-' + subMenuID);
		if ( !subMenuContainer )
		{
			return;
		}
		
		var offsetLeft = $(menuItem).offset().left - $('div#menu').offset().left;
		offsetLeft += this.SUB_MENU_LEFT_OFFSET_CORRECTION;
		if ( offsetLeft < this.SUB_MENU_MIN_LEFT_OFFSET )
		{
			offsetLeft = this.SUB_MENU_MIN_LEFT_OFFSET;
		}
		subMenuContainer.style.left = offsetLeft + 'px';
		
		this.slideSubMenuDown();
		
		if ( subMenuContainer.style.display == "" )
		{
			subMenuContainer.style.display = "none";
		}
		
		var isClosed = subMenuContainer.style.display == "none";
		subMenuContainer.style.display = isClosed ? "block" : "none";
		this.__currentSubMenu = subMenuContainer;
	},
	
	hideCurrentSubMenu: function()
	{
		if ( this.__currentSubMenu )
		{
			this.__currentSubMenu.style.display = 'none';
			this.__currentSubMenu = null;
		}
	},
	
	setCurrentMenuItem: function(menuItem)
	{
		this.clearCurrentMenuItem();
		this.__currentMenuItem = menuItem;
		$(this.__currentMenuItem).addClass('hover');
	},
	
	clearCurrentMenuItem: function()
	{
		if ( this.__currentMenuItem )
		{
			$(this.__currentMenuItem).removeClass('hover');
			this.__currentMenuItem = null;
		}
	},
	
	slideSubMenuDown: function()
	{
		this.cancelSlideUp();
		this.cancelSlideDown();
		this.__slideDownTimeoutHandler = setTimeout(
			function()
			{
				$("div#top-sub-menu-container").slideDown("normal");
			},
			this.SUB_MENU_SLIDE_DOWN_DELAY
		);
	},
	
	slideSubMenuUp: function()
	{
		this.cancelSlideUp();
		this.cancelSlideDown();
		var self = this;
		this.__slideUpTimeoutHandler = setTimeout(
			function()
			{
				self.clearCurrentMenuItem();
				$("div#top-sub-menu-container").slideUp("fast");
			},
			this.SUB_MENU_SLIDE_UP_DELAY
		);
	},
	
	cancelSlideUp: function()
	{
		if ( this.__slideUpTimeoutHandler )
		{
			clearTimeout(this.__slideUpTimeoutHandler);
			this.__slideUpTimeoutHandler = null;
		}
	},
	
	cancelSlideDown: function()
	{
		if ( this.__slideDownTimeoutHandler )
		{
			clearTimeout(this.__slideDownTimeoutHandler);
			this.__slideDownTimeoutHandler = null;
		}
	}
};

