var SEARCH_FIELD_HINT = 'search...';
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;

var g_topMenuExpand = true;

$(function()
{
    initNavigationMenu();
    initLoginFancyBox();
    //initSearchClearButton();
});

function initLoginFancyBox()
{
    if ( typeof(initFormFancyBox) == 'function' )
    {
        initFormFancyBox();
        var loginRequired = $('#loginRequired').val();

        if ( loginRequired == '1' )
        {
            $('#loginPopupLink').trigger('click.fb');
        }
    }
}

function getTitleOffset(title)
{
    return title.position();
}

$(window).resize(function(){
    initNavigationMenu();
});

function initSearchFiled( searchField, searchFieldText )
{
    searchField.blur();
    searchField.val( searchFieldText );
    onSearchFieldBlur(searchField, searchFieldText);

    searchField.focus(function() {
        onSearchFieldFocus(searchField, searchFieldText);
    });
    searchField.blur(function() {
        onSearchFieldBlur(searchField, searchFieldText);
    });
}

function initNavigationMenu()
{
    //initSearchFiled( $('#input_search'), SEARCH_FIELD_HINT );

    var topMenuExpandField = $('#top_menu_expand');
    if( topMenuExpandField.length >0 )
    {
        g_topMenuExpand = topMenuExpandField.val() == 1;
    }

    $('.navigation .item').each(function(){

        var menuItem = $(this);
        var menuItemId = menuItem.attr('id');

        var title = menuItem.find('a');
        if ( !title )
        {
            return;
        }

        var subMenuId = menuItemId + '_sub';
        var subMenu = $('#' + subMenuId);
        if ( !subMenu )
        {
            return;
        }

        menuItem.data('hide_timeout', null);

        var titleOffset = getTitleOffset(title);
        if ( !titleOffset )
        {
            return;
        }
        if (menuItem.find('.menu_left').length)
        {
            titleOffset.left -= 5;
        }
        
        subMenu.css('left', titleOffset.left);
        subMenu.css('top', titleOffset.top + title.height());

        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);
        });
    });

    fixHidingMenuWithBackspacePressed();
}

function fixHidingMenuWithBackspacePressed()
{
    $(window).keydown(function(event)
    {
        if ( event.keyCode == 8 ) //backspace
        {
            $('.navigation .item a').css( "background", "none" );
            $('.navigation .item a').css( "color", "252A2E" );
            $('.submenu_container').css( "display", "none" );

            $('.navigation .item a').data('mouseover', false);
            $('.submenu_container').data('mouseover', false);

            $('.navigation .item').mouseleave();
            $('.submenu_container').mouseleave();
        }
    });
}

function onSearchFieldFocus(searchField, searchFileldText)
{
    searchField.removeClass('search_hint');
    if (searchField.attr('value') == searchFileldText)
    {
        searchField.val('');
    }
}

function onSearchFieldBlur(searchField, searchFileldText)
{
    if ($.trim(searchField.attr('value')) == '')
    {
        searchField.val(searchFileldText);
    }
    if ($.trim(searchField.attr('value')) == searchFileldText)
    {
        searchField.addClass('search_hint');
    }
}

function onMenuItemOver(menuItem)
{
    cancelSubMenuHiding(menuItem);

    menuItem.title.addClass('over');
    menuItem.data('mouseover', true);

    if ( g_topMenuExpand )
    {
        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);
    }
}

/**
 * initializes search input clear button.
 */
function initSearchClearButton()
{
    var clearSearchButton = $( "#search_clear_button_container" );
    var searchInput = $( "#input_search" );
    initInputClearButton( $( "#input_search" ), clearSearchButton,
        function(){
            searchInput.val( "" );
            checkSearchInput( searchInput, clearSearchButton, SEARCH_FIELD_HINT );
            searchInput.blur();
        },
        function(){
            checkSearchInput( searchInput, clearSearchButton, SEARCH_FIELD_HINT );
        }
    );
}
