﻿var search = new Object();
/* code by Richard Apelgren, Zooma By Semcon 2010 */
/* handles suggestion on both top/finder and on the search page */
search.allPages = null;
search.isLoaded = false;
search.isBusy = false;

search.finderBoxSelector = '.finder .bg input.box';
search.finderBoxActive = false;
search.finderSuggestionsBoxSelector = '#FinderSuggestionsBox .__items';

search.searchPageBoxSelector = '.search-page .bg input.box';
search.searchPageBoxActive = false;
search.searchPageSuggestionsBoxSelector = '#SearchSuggestionsBox .__items';

search.reset = function() {
    $(search.finderSuggestionsBoxSelector).parent().hide();
    $(search.searchPageSuggestionsBoxSelector).parent().hide();
}
search.renderSuggestions = function() {
    if (!search.finderBoxActive && !search.searchPageBoxActive) {
        search.reset();
        return;
    }

    var strAll = '';
    var strSearchFor;
    var strCurrentSuggestionSelector = (search.finderBoxActive) ? search.finderSuggestionsBoxSelector : search.searchPageSuggestionsBoxSelector;

    if (search.finderBoxActive) {
        strSearchFor = $(search.finderBoxSelector).attr('value').toLowerCase();
    }
    else {
        strSearchFor = $(search.searchPageBoxSelector).attr('value').toLowerCase();
    }

    if (strSearchFor == '' || strSearchFor.length < 2) {
        $(strCurrentSuggestionSelector).html('');
    }
    else {
        var pageCount = 0, maxCount = 20;
        for (var i = 0; i < search.allPages.length; i++) {
            if (search.allPages[i].PageName.toLowerCase().indexOf(strSearchFor) > -1) {
                var strRel = search.allPages[i].Type != '' ? 'rel="' + search.allPages[i].Type + '"' : '';
                strAll += '<a ' + strRel + ' class="__suggestion" href="' + search.allPages[i].LinkUrl + '">' + search.allPages[i].PageName + '</a>';
                pageCount++;
            }
            if (pageCount >= maxCount) {
                break;
            }
        }
        $(strCurrentSuggestionSelector).html(strAll);
    }

    $(strCurrentSuggestionSelector).parent().css('display', strAll == '' ? 'none' : '');
}
search.execSuggestions = function() {
    if (search.isLoaded) {
        search.renderSuggestions();
        return false;
    }
    if (search.isBusy) {
        return false;
    }
    if (!search.isBusy) {
        search.isBusy = true;
    }
    $.ajax({
        type: "POST",
        url: common.miscServiceUrl + '/SitePages',
        processData: false,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: '{"strLanguageBranch":"' + EPI_CURRENT_LANG_CODE + '","intSearchRoot":"' + THIS_SEARCH_ROOT + '"}',
        timeout: common.ajaxTimout,
        success: function(response) {
            // we just want to talk to the server one time, cache everything in the browser
            var res = (typeof response.d == 'string') ? eval(response.d) : response.d;
            search.allPages = res;
            search.isLoaded = true;
            search.isBusy = false;
        },
        error: function(msg) {
            search.isBusy = false;
            //alert('Error, please reload the page or try again later.');
        }
    });
    return false;
}
search.setupCurrent = function(objBox, bIsFinder) {
    objBox
    .bind('focus', function() {
        if (bIsFinder) {search.finderBoxActive = true;}
        else {search.searchPageBoxActive = true;}

        search.searchPageBoxActive = !search.finderBoxActive;
        $(this).bind('keyup', function(e) {
            search.execSuggestions();
        });
    })
    .bind('blur', function() {
        search.finderBoxActive = false;
        search.searchPageBoxActive = false;
        $(this).unbind('keyup');
    });
}
$(document).ready(function() {

    search.execSuggestions(); // make it load pages
    search.setupCurrent($(search.finderBoxSelector), true);

    if ($(search.searchPageBoxSelector).length > 0) {
        search.setupCurrent($(search.searchPageBoxSelector), false);
    }

    $(document).bind('click', function() {
        search.reset();
    });
});

