$.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/json; charset=utf-8", cache:false});

/*
 CSS Browser Selector v0.4.0 (Nov 02, 2010)
 Rafael Lima (http://rafael.adm.br)
 http://rafael.adm.br/css_browser_selector
 License: http://creativecommons.org/licenses/by/2.5/late
 Contributors: http://rafael.adm.br/css_browser_selector#contributors
 */
function css_browser_selector(u) {
    var ua = u.toLowerCase(),is = function(t) {
        return ua.indexOf(t) > -1
    },g = 'gecko',w = 'webkit',s = 'safari',o = 'opera',m = 'mobile',h = document.documentElement,b = [(!(/opera|webtv/i.test(ua)) && /msie\s(\d)/.test(ua)) ? ('ie ie' + RegExp.$1) : is('firefox/2') ? g + ' ff2' : is('firefox/3.5') ? g + ' ff3 ff3_5' : is('firefox/3.6') ? g + ' ff3 ff3_6' : is('firefox/3') ? g + ' ff3' : is('gecko/') ? g : is('opera') ? o + (/version\/(\d+)/.test(ua) ? ' ' + o + RegExp.$1 : (/opera(\s|\/)(\d+)/.test(ua) ? ' ' + o + RegExp.$2 : '')) : is('konqueror') ? 'konqueror' : is('blackberry') ? m + ' blackberry' : is('android') ? m + ' android' : is('chrome') ? w + ' chrome' : is('iron') ? w + ' iron' : is('applewebkit/') ? w + ' ' + s + (/version\/(\d+)/.test(ua) ? ' ' + s + RegExp.$1 : '') : is('mozilla/') ? g : '',is('j2me') ? m + ' j2me' : is('iphone') ? m + ' iphone' : is('ipod') ? m + ' ipod' : is('ipad') ? m + ' ipad' : is('mac') ? 'mac' : is('darwin') ? 'mac' : is('webtv') ? 'webtv' : is('win') ? 'win' + (is('windows nt 6.0') ? ' vista' : '') : is('freebsd') ? 'freebsd' : (is('x11') || is('linux')) ? 'linux' : '','js'];
    c = b.join(' ');
    h.className += ' ' + c;
    return c;
}
css_browser_selector(navigator.userAgent);
var DOMReady = (function() {
    var fns = [],isReady = false,errorHandler = null,getFunc = function(fn) {
        if (typeof fn == 'string')return function() {
            eval(fn);
        };
        return fn;
    },ready = function() {
        isReady = true;
        for (var x = 0; x < fns.length; x++) {
            try {
                fns[x]();
            } catch(err) {
                if (errorHandler)errorHandler(err);
            }
        }
    };
    this.setOnError = function(fn) {
        errorHandler = getFunc(fn);
        return this;
    };
    this.add = function(fn) {
        fn = getFunc(fn);
        if (isReady) {
            fn();
        } else {
            fns[fns.length] = fn;
        }
        return this;
    };
    if (window.addEventListener) {
        document.addEventListener('DOMContentLoaded', function() {
            ready();
        }, false);
    } else {
        (function() {
            if (!document.uniqueID && document.expando)return;
            var tempNode = document.createElement('document:ready');
            try {
                tempNode.doScroll('left');
                ready();
            } catch(err) {
                setTimeout(arguments.callee, 0);
            }
        })();
    }
    return this;
})();

function appendDotsToSearchText() {
    $('.searchText span').ellipsis();
}

// dots (...) in end of title
// TODO should be replaced by jquery.text-overflow.js
(function($) {
    $.fn.ellipsis = function() {
        return this.each(function() {
            var el = $(this);

            if (el.css("overflow") == "hidden") {
                var text = el.html();
                var multiline = el.hasClass('multiline');
                var t = $(this.cloneNode(true))
                        .hide()
                        .css('position', 'absolute')
                        .css('overflow', 'visible')
                        .width(multiline ? el.width() : 'auto')
                        .height(multiline ? 'auto' : el.height());
                el.after(t);

                function height() {
                    return t.height() > el.height();
                }

                ;
                function width() {
                    return t.width() > el.width();
                }

                ;

                var func = multiline ? height : width;

                while (text.length > 0 && func()) {
                    text = text.substr(0, text.length - 1);
                    t.html(text + "...");
                }

                el.html(t.html());
                t.remove();
            }
        });
    };
})(jQuery);

/** Parse url params substring to object. */
function parseUrlParams(paramsString) {
    var urlParams = {};
    (function () {
      var e,
          a = /\+/g,  // Regex for replacing addition symbol with a space
          r = /([^&=]+)=?([^&]*)/g,
          d = function (s) { return decodeURIComponent(s.replace(a, " ")); };

      while (e = r.exec(paramsString))
        urlParams[d(e[1])] = d(e[2]);
    })();
    return urlParams;
}

/** Creates params substring from object. */
function joinUrlParams(params) {
    var result = '';
    for (var i in params) {
        if(result.length > 0) {
            result = result + '&';
        }
        result = result + i + '=' + params[i];
    }

    return result;
}

/**
 * Sets cookie value
 * @param c_name cookie name
 * @param value cookie value
 * @param exdays expire date
 */
function setCookie(c_name, value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = c_name + "=" + c_value + "; path=/";
}

/**
 * Returns cookie value
 * @param c_name cookie name
 */
function getCookie(c_name) {
    var i,x,y,ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == c_name) {
            return unescape(y);
        }
    }
}

/**
 * Return scope status: ja, en or null for no restrictions.
 */
function getScopeCookie() {
    var scope = getCookie('scope');
    if (scope === 'all') {
        return null;
    } else if (scope === 'en') {
        return 'en'
    } else {
        return 'ja'
    }
}

/**
 * Set scope status: ja, en or null for no restrictions.
 */
function setScopeCookie(scope) {
    if (scope !== 'ja' && scope !== 'en') {
        setCookie('scope', 'all', 360);
    } else {
        setCookie('scope', scope, 360)
    }
}

/**
 * Init result scope switcher.
 */
function initScopeSwitcher() {
    $('#ScopeJa').click(function() {
        var scope = getScopeCookie();
        if (scope !== 'ja') {
            setScopeCookie(scope === 'en' ? null : 'en');
            location.reload(true)
        }
    });
    $('#ScopeEn').click(function() {
        var scope = getScopeCookie();
        if (scope !== 'en') {
            setScopeCookie(scope === 'ja' ? null : 'ja');
            location.reload(true)
        }
    });
}

/**
 * Init search term text field.
 */
function initSearchTerm() {
    $('#SearchTerm').focus(function(e) {
        this.select();
        e.preventDefault();
    })
}

function runAutoComplete() {
    $("#SearchTerm").autocomplete({
        source: function(request, response) {
            $.ajax({
                url: $('#link_auto').text(),
                data: {q:request.term},
                type: 'GET',
                success: function(data) {
                    response(data);
                }
            });
        },
        minLength: 2,
        max: 8,
        select: function(event, ui) {
            $("#SearchTerm").change().autocomplete("close");
            $('#SearchMenuFull .submit').click();
        }
    });
    $('#SearchMenuFull .submit').click(function() {
        $("#SearchTerm").autocomplete("close").autocomplete("disable");
        if (!$('#SearchMenuFull').hasClass('Loading')) {
            return true;
        } else {
            return false;
        }
    });
}

function initLanguageSwitcher() {
    $('.language a').click(function() {
        $.ajax({
            context: this,
            data: {'locale':$(this).attr('rel')},
            type: 'POST',
            dataType: 'text',
            url: $(this).attr('href'),
            contentType: 'application/x-www-form-urlencoded',
            success: function() {
                //// todo reload page content
                $('#SearchMenu').unbind('mouseenter');
                $('#SearchMenuFull').unbind('mouseleave');
                checkTextInputHelpers();
                window.location.reload();
            }
        });
        return false;
    });
}

function initTagsGallery() {
    $('#SearchMenuFull .tag .selection .clearSelection').click(function(e) {
        clearTagSelection();
        e.preventDefault();
        return false;
    });
    var tagsTemplate = $("#TagTemplate").template();
    var tagsGalleryTemplate = $("#TagGalleryTemplate").template();
    var tags = $('#Tags');
    var searchLink = tags.attr('_searchLink');
    searchLink = searchLink + (searchLink.indexOf('?') < 0 ? '?' : '&');

    $.ajax({
        async: true,
        url: tags.attr('_source'),
        type: 'GET',
        dataType: 'json',
        cache:false,
        success: function(data) {
            var tagsGallery = $('#SearchMenuFull .tag .gallery ul');
            tags.empty();
            tagsGallery.empty();

            $.each(data, function(key, array) {
                array.url = searchLink + 'tag=' + array.id;
                if (key < 10) {
                    tags.append($.tmpl(tagsTemplate, array));
                }
                tagsGallery.append($.tmpl(tagsGalleryTemplate, array));
            });


            $('#SearchMenuFull .tag .gallery li a').click(function(e) {
                $('#SearchMenuFull .tag .selection .name').text($(this).text());
                $('#SearchMenuFull .tag .selection').attr('_value', $(this).attr('_value'));
                $('#SearchMenuFull .tag .selection > div').show();
                e.preventDefault();
                return false;
            });
        }
    });
}


function initActorsGallery() {
    $('#SearchMenuFull .actor .selection .clearSelection').click(function(e) {
        clearActorSelection();
        e.preventDefault();
        return false;
    });
    var actorsGalleryTemplate = $("#ActorGalleryTemplate").template();
    var actorsGalleryTemplateJa = $("#ActorGalleryTemplateJa").template();
    var actorsTemplate = $("#ActorTemplate").template();
    var actors = $('#Actors');
    var searchLink = actors.attr('_searchLink');
    searchLink = searchLink + (searchLink.indexOf('?') < 0 ? '?' : '&');
    $.ajax({
        async: true,
        url: actors.attr('_source'),
        type: 'GET',
        dataType: 'json',
        cache:false,
        success: function(data) {
            var actorsGallery = $('#SearchMenuFull .actor .gallery ul');
            actors.empty();
            actorsGallery.empty();

            $.each(data, function(key, array) {
                array.url = searchLink + 'actor=' + array.id;
                if (key < 10) {
                    actors.append($.tmpl(actorsTemplate, array));
                }
                actorsGallery.append(array.firstName ? $.tmpl(actorsGalleryTemplateJa, array) : $.tmpl(actorsGalleryTemplate, array));
            });

            $('#SearchMenuFull .actor .gallery img').click(function(e) {
                $('#SearchMenuFull .actor .selection img').attr('src', $(this).attr('src'));
                $('#SearchMenuFull .actor .selection img').attr('alt', $(this).parent().find('a').text());
                $('#SearchMenuFull .actor .selection .name').html($(this).parent().find('a').html());
                $('#SearchMenuFull .actor .selection').attr('_value', $(this).attr('_value'));
                $('#SearchMenuFull .actor .selection > div').show();
                e.preventDefault();
                return false;
            });

            $('#SearchMenuFull .actor .gallery a').click(function(e) {
                $('#SearchMenuFull .actor .selection img').attr('src', $(this).parent().parent().find('img').attr('src'));
                $('#SearchMenuFull .actor .selection .name').html($(this).html());
                $('#SearchMenuFull .actor .selection img').attr('alt', $(this).parent().find('a').text());
                $('#SearchMenuFull .actor .selection').attr('_value', $(this).attr('_value'));
                $('#SearchMenuFull .actor .selection > div').show();
                e.preventDefault();
                return false;
            });
        }
    });
}

function refreshRecentTerms(data) {
    var termsTemplate = $("#TermTemplate").template();
    var terms = $('#RecentTerms');

    var maxHeight = terms.css('max-height');
    maxHeight = parseInt(maxHeight.substr(0, maxHeight.indexOf('px')));
    var myOffset = terms.offset().top;

    // Find out where visible area ends.
    var currentTerms = terms.children('a');
    var pos = 0;
    for (; pos < currentTerms.length; pos++) {
        var term = $(currentTerms[pos]);
        if ((term.offset().top - myOffset) >= maxHeight) {
            // outside.
            term.remove();
        }
    }

    if (pos == currentTerms.length) {
        // everything is visible. do something?
    }

    // Append to the end of visible area.
    for (var i = 0; i < data.length; i++) {
        terms.append($.tmpl(termsTemplate, data[i]));
    }
}

function animateTerms() {
    var terms = $('#RecentTerms');
    // do not animate when less than 20 terms total.
    if (terms.children('a').length > 20) {
        terms.children('a:first').remove();
    }
    setTimeout(animateTerms, 1000);
}

function loadTerms() {
    var terms = $('#RecentTerms');
    $.ajax({
        async: true,
        url: terms.attr('_source'),
        type: 'GET',
        dataType: 'json',
        cache:false,
        success: function(data) {
            refreshRecentTerms(data);
            setTimeout(loadTerms, 5000);
        },
        error: function() {
            setTimeout(loadTerms, 60000);
        }
    });
}

function activateHelpers() {
    $('div.bl-helper').each(function() {
        var id = this.id;
        if (!$.cookie(id)) {
            $(this).show();
        }
        $(this).find('.clz').click(function() {
            $(this).parent().hide();
            $.cookie(id, 'yes');
        });
        var someTimer;
        $(this).parent().mouseenter(
                function() {
                    var el = $(this);
                    someTimer = setTimeout(function() {
                        el.find('.bl-helper').show();
                    }, 10000);
                }).mouseleave(function() {
                    clearTimeout(someTimer);
                });
    });

    if ($('#SearchTerm').val() != '') {
        $('#search-bl-helper .clz').click();
    }
}

function submitSearchForm(ajax) {

    beforeSubmitTextInputHelpers($('#SearchMenuFull'));
    beforeSubmitTextInputHelpers($('#SearchMenu'));

    var query = new Array();

    var scope = $('#SearchMenuFull .scope .check.on').size() === 2 ?
            'all' :
            ($('#SearchMenuFull .scope .check.on .scopeOthers').size() === 1 ? 'en' : 'ja');
    if (scope !== $('#SearchMenuFull .scope').attr('_value')) {
        query.push('scope=' + scope);
    }

    var q = $.trim($('#SearchTerm').val());
    if (q.length > 0) {
        query.push('q=' + q);
    }

    var site = $('#SearchMenuFull .site .check.on');
    site.each(function() {
        query.push('site=' + $(this).attr('_value'));
    });

    var tag = $('#SearchMenuFull .tag .selection').attr('_value');
    if (tag && tag.length > 0) {
        query.push('tag=' + tag);
    }

    var actor = $('#SearchMenuFull .actor .selection').attr('_value');
    if (actor && actor.length > 0) {
        query.push('actor=' + actor);
    }

    var location = query.join('&');

    var currentLocation = window.location.search.split('&');

    if (ajax) {
        $.ajax({
            url: $('#SearchMenuFull').attr('_settingsUrl'),
            data: location,
            type: 'POST',
            contentType: 'application/x-www-form-urlencoded',
            success: function() {
                var searchParams = parseUrlParams(window.location.search.substring(1));
                delete searchParams.site;
                delete searchParams.tag;
                delete searchParams.actor;
                delete searchParams.scope;
                delete searchParams.q;
                var newParams = joinUrlParams(searchParams);
                newParams = newParams + ((newParams.length > 0 && location.length > 0) ? '&' : '') + location;

                window.location.href = window.location.pathname + ((newParams.length > 0) ? ('?' + newParams) : '');
            }
        });
    } else {
        if (location.length > 0) {
            location = '?' + location
        }
        window.location.href = $('#SearchMenuFull').attr('_searchUrl') + location;
    }
}

function cancelSearchForm() {
    hideFullMenu();

    var scope = $('#SearchMenuFull .scope').attr('_value');
    $('#SearchMenuFull .scope .check .scopeJa').parent().removeClass('on off').addClass(scope === 'all' || scope === 'ja' ? 'on' : 'off');
    $('#SearchMenuFull .scope .check.on .scopeOthers').parent().removeClass('on off').addClass(scope === 'all' || scope === 'en' ? 'on' : 'off');

    $('#SearchTerm').val($('#SearchMenuFull .searchInput').attr('_value'));

    var site = $('#SearchMenuFull .site').attr('_value').split(',');
    $('#SearchMenuFull .site .check').each(function() {
        $(this).removeClass('on off').addClass((($.inArray($(this).attr('_value'), site) >= 0) || (site[0].length === 0)) ? 'on' : 'off');
    });

    var tag = $('#SearchMenuFull .tag').attr('_value').split(',');
    if (tag.length <= 1) {
        $('#SearchMenuFull .tag .selection > div').hide();
    }
    $('#SearchMenuFull .tag .selection').attr('_value', tag[0]);
    $('#SearchMenuFull .tag .selection .name').text(tag.length > 1 ? tag[1] : '');
    if (tag.length > 1) {
        $('#SearchMenuFull .tag .selection').show();
    }

    var actor = $('#SearchMenuFull .actor').attr('_value').split(',');
    if (actor.length <= 1) {
        $('#SearchMenuFull .actor .selection > div').hide();
    }
    $('#SearchMenuFull .actor .selection').attr('_value', actor[0]);
    $('#SearchMenuFull .actor .selection .name').text(actor.length > 1 ? actor[1] : '');
    $('#SearchMenuFull .actor .selection img').attr('alt', actor.length > 1 ? actor[1] : '');
    $('#SearchMenuFull .actor .selection img').attr('src', actor.length > 1 ? actor[2] : '');
    if (actor.length > 1) {
        $('#SearchMenuFull .actor .selection > div').show();
    }
    synchronizeMenuFromFull();
    checkTextInputHelpers();
}

function clearTagSelection() {
    $('#SearchMenuFull .tag .selection > div').hide();
    $('#SearchMenuFull .tag .selection').attr('_value', '');
    $('#SearchMenuFull .tag .selection .name').text('');
}

function clearActorSelection() {
    $('#SearchMenuFull .actor .selection > div').hide();
    $('#SearchMenuFull .actor .selection').attr('_value', '');
    $('#SearchMenuFull .actor .selection .name').text('');
    $('#SearchMenuFull .actor .selection img').attr('alt', '');
    $('#SearchMenuFull .actor .selection img').attr('src', '');
}

function clearSearchForm() {
    $('#SearchTerm').val('');
    $('#SearchMenu .searchInput input').val('');

    $('#SearchMenuFull .site .check').each(function() {
        $(this).removeClass('on off').addClass('on');
    });

    clearTagSelection();
    clearActorSelection();

    synchronizeMenuFromFull();
    checkTextInputHelpers();
}

function fixShortMenuTagTitle() {
    $('#SearchMenu .search .selector .tag').textOverflow();
}

/**
 * Synchronize short form menu values with full form.
 */
function synchronizeMenuFromFull() {
    $('#SearchMenu .scopeJa').parent().removeClass('on off').addClass($('#SearchMenuFull .scopeJa').parent().hasClass('on') ? 'on' : 'off');
    $('#SearchMenu .scopeOthers').parent().removeClass('on off').addClass($('#SearchMenuFull .scopeOthers').parent().hasClass('on') ? 'on' : 'off');

    $('#SearchMenu .site .check').each(function() {
        $(this).removeClass('on off').addClass($('#SearchMenuFull .site .check[_value=' + $(this).attr('_value') + ']').hasClass('on') ? 'on' : 'off');
    });

    if ($('#SearchMenuFull .tag .selection').attr('_value').length > 0) {
        $('#SearchMenu .tag').text($('#SearchMenuFull .tag .selection .name'));
        fixShortMenuTagTitle();
        $('#SearchMenu .tag').parent().show();
    } else {
        $('#SearchMenu .tag').parent().hide();
        $('#SearchMenu .tag').text('');
    }

    if ($('#SearchMenuFull .actor .selection').attr('_value').length > 0) {
        $('#SearchMenu .actor img').attr('src', $('#SearchMenuFull .actor .selection .selectedActor img').attr('src'));
        $('#SearchMenu .actor img').attr('alt', $('#SearchMenuFull .actor .selection .selectedActor img').attr('alt'));
        $('#SearchMenu .actor').show();
    } else {
        $('#SearchMenu .actor').hide();
        $('#SearchMenu .actor img').attr('src', '');
        $('#SearchMenu .actor img').attr('alt', '');
    }

    $('#SearchMenu .searchInput input').val($('#SearchTerm').val());
    if ($('#SearchTerm').hasClass('withHelperEnabled')) {
        $('#SearchMenu .searchInput input').addClass('withHelperEnabled');
    } else {
        $('#SearchMenu .searchInput input').removeClass('withHelperEnabled');
    }
}

/**
 * Synchronize full form menu values with short form.
 */
function synchronizeMenuFromShort() {
    $('#SearchMenuFull .scopeJa').parent().removeClass('on off').addClass($('#SearchMenu .scopeJa').parent().hasClass('on') ? 'on' : 'off');
    $('#SearchMenuFull .scopeOthers').parent().removeClass('on off').addClass($('#SearchMenu .scopeOthers').parent().hasClass('on') ? 'on' : 'off');

    $('#SearchMenuFull .site .check').each(function() {
        $(this).removeClass('on off').addClass($('#SearchMenu .site .check[_value=' + $(this).attr('_value') + ']').hasClass('on') ? 'on' : 'off');
    });

    if ($('#SearchMenu .tag').text().length === 0) {
        clearTagSelection();
    }

    if ($('#SearchMenu .actor img').attr('src').length === 0) {
        clearActorSelection();
    }

    $('#SearchTerm').val($('#SearchMenu .searchInput input').val());
    if ($('#SearchMenu .searchInput input').hasClass('withHelperEnabled')) {
        $('#SearchTerm').addClass('withHelperEnabled');
    } else {
        $('#SearchTerm').removeClass('withHelperEnabled');
    }

}

function showFullMenu() {
    synchronizeMenuFromShort();
    $('#SearchMenuFull').css('top', '-310px');
    $('#SearchMenuFull').animate(
            {top: '-40px'},
            500,
            'easeOutBack'
    );
    $('#SearchTerm').focus().select();
}

function hideFullMenu() {
    $('#SearchMenuFull').animate(
            {top: '-1000px'},
            'fast'
    );
}

function initTopMenuAnimation() {
    $('#SearchMenu .extend').click(function() {
        showFullMenu();
    });
}

function ajaxRefreshSearchSettings() {
    synchronizeMenuFromShort();
    
}

function initTopMenu() {
    fixShortMenuTagTitle();
    $('#SearchMenu .site .check').click(function(event) {
        if ($(this).hasClass('off') || ($('#SearchMenu .site .check.on').size() > 1)) {
            $(this).toggleClass('on off');
            // Only need to update cookies and refresh.
            synchronizeMenuFromShort();
            submitSearchForm(true);
        }
        event.preventDefault();
        return false;
    });

    $('#SearchMenu .clearTag').click(function(event) {
        $('#SearchMenu .tag').parent().hide();
        $('#SearchMenu .tag').text('');
        synchronizeMenuFromShort();
        submitSearchForm(true);
        event.preventDefault();
        return false;
    });

    $('#SearchMenu .actor .clearSelection').click(function(event) {
        $('#SearchMenu .actor').hide();
        $('#SearchMenu .actor img').attr('src', '');
        $('#SearchMenu .actor img').attr('alt', '');
        synchronizeMenuFromShort();
        submitSearchForm(true);
        event.preventDefault();
        return false;
    });

    $('#SearchMenuFull .selector.filters .site .check').click(function(event) {
        if ($(this).hasClass('off') || ($('#SearchMenuFull .selector.filters .site .check.on').size() > 1)) {
            $(this).toggleClass('on off');
        }
        event.preventDefault();
        return false;
    });
    initTagsGallery();
    initActorsGallery();

    $('#SearchMenuFull .scope .check').click(function(event) {
        if ($(this).hasClass('off') || ($('#SearchMenuFull .scope .check.on').size() === 2)) {
            $(this).toggleClass('on off');
        }
        event.preventDefault();
        return false;
    });

    $('#SearchMenu .scope .check').click(function(event) {
        if ($(this).hasClass('off') || ($('#SearchMenu .scope .check.on').size() === 2)) {
            $(this).toggleClass('on off');
            synchronizeMenuFromShort();
            submitSearchForm(true);
        }
        event.preventDefault();
        return false;
    });

    $('#SearchMenuFull #SearchTerm').keyup(function() {
        $('#SearchMenu .searchInput input').val($(this).val());
    });

    $('#SearchMenu .submit').click(function() {
        synchronizeMenuFromShort();
        submitSearchForm();
    });
    $('#SearchMenu').keypress(function(e) {
        var code = (e.keyCode ? e.keyCode : e.which);
        if (code == 13) {
            synchronizeMenuFromShort();
            submitSearchForm();
            event.preventDefault();
            return false;
        }
    });
    $('#SearchMenuFull .submit').click(function(e) { submitSearchForm(); });
    $('#SearchMenuFull .cancel').click(cancelSearchForm);
    $('#SearchMenuFull .clear').click(clearSearchForm);
    $('#SearchMenuFull').keypress(function(e) {
        var code = (e.keyCode ? e.keyCode : e.which);
        if (code == 13) {
            submitSearchForm();
            event.preventDefault();
            return false;
        }
        if (code == 27) {
            cancelSearchForm();
            event.preventDefault();
            return false;
        }
    });

    initTopMenuAnimation();
}

/** Resizes page to new window width. Supported width values: 500-1208. */
function resize() {
    var baseWidth = Math.max(500, Math.min(1208, $(window).width()));
    $('body').width(baseWidth - 30);
    $('#SearchMenu').width(baseWidth - 30);
    $('#SearchMenuFull').width(baseWidth - 30);
    $('#SearchMenuFull .searchIn').width(baseWidth - 70);
    $('#SearchMenuFull .search .selector.filters').width(baseWidth - 90);
    $('.colRightWrap').width(baseWidth - 238);
    $('.fixed-content').width(baseWidth - 240);

    if (baseWidth < 762) {
        $('#SearchMenu').addClass('short');
    } else {
        $('#SearchMenu').removeClass('short');
    }

    if ($('#SearchMenu').height() > 80) {
        $('body').addClass('short');
    } else {
        $('body').removeClass('short');
    }

}

function initMainLayout() {
    //runAutoComplete();
    loadTerms();
    initLanguageSwitcher();
    initScopeSwitcher();
    //activateHelpers();
    appendDotsToSearchText();

    initTopMenu();

    $(window).resize(function() {
        resize();
    });
    resize();

    setTimeout(animateTerms, 1000);
}

function applyTextInputHelpers() {
    $('input.withHelper').each(function(index, value) {
        if ($(this).val() == '') {
            $(value).val($(value).attr('helpervalue'));
            $(value).addClass('withHelperEnabled');
        }
    });
    $('input.withHelper').focus(function() {
        if ($(this).hasClass('withHelperEnabled')) {
            $(this).val('');
            $(this).removeClass('withHelperEnabled');
        }
    });
    $('input.withHelper').blur(function() {
        if ($(this).val() == '') {
            $(this).val($(this).attr('helpervalue'));
            $(this).addClass('withHelperEnabled');
        }
    });
    $('form').submit(function() {
        $(this).find('input.withHelperEnabled').each(function() {
            if ($(this).hasClass('withHelperEnabled')) {
                $(this).val('');
                $(this).removeClass('withHelperEnabled');
            }
        });
        return true;
    });
}

function checkTextInputHelpers() {
    $('input.withHelper').each(function(index, value) {
        if ($(this).val() == '') {
            $(value).val($(value).attr('helpervalue'));
            $(value).addClass('withHelperEnabled');
        }
    });
}

function beforeSubmitTextInputHelpers(el) {
    el.find('input.withHelperEnabled').each(function() {
        if ($(this).hasClass('withHelperEnabled')) {
            $(this).val('');
            $(this).removeClass('withHelperEnabled');
        }
    });
    return true;
}

jQuery(document).ready(function() {
    applyTextInputHelpers();
});

DOMReady.add(function() {
    initMainLayout();
});

