var SEARCH_FIELD_HINT = 'search...';
var HIDE_SUBMENU_TIMEOUT = 0; 
var DEFAULT_SUBMENU_ZINDEX = 1000;
var ACTIVE_SUBMENU_ZINDEX = 1001;
var SHOW_SUBMENU_DURATION = 400;
var HIDE_SUBMENU_DURATION = 0;

$(function()
{
    initNavigationMenu();

});

function getTitleOffset(title)
{
    
    return title.offset();
}

$(window).resize(function(){
    initNavigationMenu();
})

function initNavigationMenu()
{
    var searchField = $('#input_search');
    searchField.blur();
    onSearchFieldBlur(searchField);

    searchField.focus(function() {
        onSearchFieldFocus(searchField)
    });
    searchField.blur(function() {
        onSearchFieldBlur(searchField)
    });

    $('.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 = getTitleOffset(title);
        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 onSearchFieldFocus(searchField)
{
    searchField.removeClass('search_hint');
    if (searchField.attr('value') == SEARCH_FIELD_HINT)
    {
        searchField.val('');
    }
}

function onSearchFieldBlur(searchField)
{
    searchField.addClass('search_hint');
    if ($.trim(searchField.attr('value')) == '')
    {
        searchField.val(SEARCH_FIELD_HINT);
    }
}

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.subMenu.stop(true, true);
    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);
    }
}