var HIDE_SUBMENU_TIMEOUT = 200; 
var DEFAULT_SUBMENU_ZINDEX = 1000;
var ACTIVE_SUBMENU_ZINDEX = 1001;
var SHOW_SUBMENU_DURATION = 400;
var HIDE_SUBMENU_DURATION = 0;

$(function()
{	
	initNavigationMenu();

});

function initNavigationMenu()
{
    $('.navigation .item').each(
    function()
    {    	
    	var menuItem = $(this);
        var menuItemId = menuItem.attr('id');

        var title = menuItem.find('a');       

    	var subMenuId = menuItemId + '_sub';    	
    	var subMenu = $('#' + subMenuId);
    	
    	menuItem.data('hide_timeout', null);

    	var titleOffset = title.offset();    	
		subMenu.css('left', titleOffset.left);
        subMenu.css('top', titleOffset.top + title.height() + 2);

        menuItem.title = title;
        menuItem.subMenu = subMenu;

    	menuItem.mouseenter(function() {
			onMenuItemOver(menuItem)
    	});
		menuItem.mouseleave(function() {
			onMenuItemOut(menuItem)
		});

    	subMenu.mouseenter(function() {
   			onSubMenuOver(menuItem)
   		});
		subMenu.mouseleave(function() {
			onSubMenuOut(menuItem)
		});		
    });
}

function onMenuItemOver(menuItem)
{
	cancelSubMenuHiding(menuItem);

	menuItem.title.addClass('over');
	menuItem.data('mouseover', true);

	menuItem.subMenu.css('z-index', ACTIVE_SUBMENU_ZINDEX);
	menuItem.subMenu.animate({opacity: 'show', height: 'show'}, SHOW_SUBMENU_DURATION);
}

function onMenuItemOut(menuItem)
{
	menuItem.data('mouseover', false);
	menuItem.subMenu.css('z-index', DEFAULT_SUBMENU_ZINDEX);

	var hideSubMenuTimeout = setTimeout(function(){tryToHideSubMenu(menuItem);}, HIDE_SUBMENU_TIMEOUT);
	menuItem.data('hide_timeout', hideSubMenuTimeout);
}

function onSubMenuOver(menuItem)
{
	cancelSubMenuHiding(menuItem);

	menuItem.subMenu.css('z-index', ACTIVE_SUBMENU_ZINDEX);
	menuItem.subMenu.data('mouseover', true);
}

function onSubMenuOut(menuItem)
{
	menuItem.subMenu.data('mouseover', false);
	menuItem.subMenu.css('z-index', DEFAULT_SUBMENU_ZINDEX);

	var hideSubMenuTimeout = setTimeout(function(){tryToHideSubMenu(menuItem);}, HIDE_SUBMENU_TIMEOUT);
	menuItem.data('hide_timeout', hideSubMenuTimeout);
}

function tryToHideSubMenu(menuItem)
{
	if (!menuItem.data('mouseover') && !menuItem.subMenu.data('mouseover'))
	{
		menuItem.title.removeClass('over');
		menuItem.subMenu.animate({opacity: 'hide', height: 'hide'}, HIDE_SUBMENU_DURATION);
	}
}

function cancelSubMenuHiding(menuItem)
{
	var hideSubMenuTimeout = menuItem.data('hide_timeout');
	if (hideSubMenuTimeout != null)
	{
		clearTimeout(hideSubMenuTimeout);
		menuItem.data('hide_timeout', null);
	}
}
