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)
        });

        $(this).bind("click",function(){
            onMenuItemOut(menuItem)
        });

        $('.menu_link').bind("click",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);
    }
}
