//! cd.scripts.search.debug.js
//

(function() {
function executeScript() {

Type.registerNamespace('CD');

////////////////////////////////////////////////////////////////////////////////
// CD.Search

CD.Search = function CD_Search() {
    /// <field name="_hasFocusDataKey" type="String" static="true">
    /// </field>
    /// <field name="_hasMouseDataKey" type="String" static="true">
    /// </field>
    /// <field name="_instantSearchQueries" type="Array" static="true">
    /// </field>
    /// <field name="_instantSearchCenterColumnId" type="String" static="true">
    /// </field>
    /// <field name="_instantSearchOldCenterColumnId" type="String" static="true">
    /// </field>
    /// <field name="_instantSearchResultsId" type="String" static="true">
    /// </field>
}
CD.Search.setup = function CD_Search$setup(rootContainerSelector, defaultPromptText, searchPageUrl, ajaxSearch, instantSearch, languageId) {
    /// <summary>
    /// Setup the search form
    /// </summary>
    /// <param name="rootContainerSelector" type="String">
    /// ID of the root container
    /// </param>
    /// <param name="defaultPromptText" type="String">
    /// Default prompt text to be shown in the input box
    /// </param>
    /// <param name="searchPageUrl" type="String">
    /// Url of the search page
    /// </param>
    /// <param name="ajaxSearch" type="Boolean">
    /// Whether ajax search is enabled
    /// </param>
    /// <param name="instantSearch" type="Boolean">
    /// Whether instant search is enabled
    /// </param>
    /// <param name="languageId" type="String">
    /// Language ID
    /// </param>
    CD.Search._setupFocusHandlers(rootContainerSelector, defaultPromptText);
    if (ajaxSearch) {
        CD.Search._setupAjaxSearch(rootContainerSelector, searchPageUrl, languageId);
    }
    if (instantSearch) {
        CD.Search._setupInstantSearch(rootContainerSelector, searchPageUrl, languageId);
    }
}
CD.Search._setupFocusHandlers = function CD_Search$_setupFocusHandlers(rootContainerSelector, defaultPromptText) {
    /// <summary>
    /// Sets up focus &amp; mouse handling
    /// </summary>
    /// <param name="rootContainerSelector" type="String">
    /// ID of the root container
    /// </param>
    /// <param name="defaultPromptText" type="String">
    /// Default prompt text to be shown in the input box
    /// </param>
    var searchInput = $(rootContainerSelector + ' .search_input');
    var mouseFocusTargetObj = $(rootContainerSelector + ' .search_input' + ', ' + rootContainerSelector + ' .search_submit');
    searchInput.focus(function(evt) {
        var target = $(evt.target);
        if (target.val() === defaultPromptText) {
            target.val('');
        }
    });
    searchInput.blur(function(evt) {
        var target = $(evt.target);
        if (String.isNullOrEmpty(target.val())) {
            target.val(defaultPromptText);
        }
    });
    mouseFocusTargetObj.focus(function(evt) {
        var target = $(evt.target);
        target.data(CD.Search._hasFocusDataKey, true);
        CD.Search._updateSearchShadow(target);
    });
    mouseFocusTargetObj.blur(function(evt) {
        var target = $(evt.target);
        target.data(CD.Search._hasFocusDataKey, false);
        CD.Search._updateSearchShadow(target);
    });
    mouseFocusTargetObj.mouseenter(function(evt) {
        var target = $(evt.target);
        target.data(CD.Search._hasMouseDataKey, true);
        CD.Search._updateSearchShadow(target);
    });
    mouseFocusTargetObj.mouseleave(function(evt) {
        var target = $(evt.target);
        target.data(CD.Search._hasMouseDataKey, false);
        CD.Search._updateSearchShadow(target);
    });
}
CD.Search._updateSearchShadow = function CD_Search$_updateSearchShadow(target) {
    /// <summary>
    /// Updates search shadow based on the focus state
    /// </summary>
    /// <param name="target" type="jQueryObject">
    /// Target element
    /// </param>
    if (target.data(CD.Search._hasFocusDataKey) || target.data(CD.Search._hasMouseDataKey)) {
        target.closest('.search_focus').children('.search_focus_shadow').show(0);
    }
    else {
        target.closest('.search_focus').children('.search_focus_shadow').hide(0);
    }
}
CD.Search._setupAjaxSearch = function CD_Search$_setupAjaxSearch(rootContainerSelector, searchPageUrl, languageId) {
    /// <summary>
    /// Setup ajax search functionality
    /// </summary>
    /// <param name="rootContainerSelector" type="String">
    /// ID of the root container
    /// </param>
    /// <param name="searchPageUrl" type="String">
    /// Url of the search page
    /// </param>
    /// <param name="languageId" type="String">
    /// Language ID
    /// </param>
    var autoCompleteConfig = {};
    var autoCompleteConfigExtraParams = {};
    autoCompleteConfig['minChars'] = 3;
    autoCompleteConfig['max'] = 10;
    autoCompleteConfig['width'] = 500;
    autoCompleteConfig['selectFirst'] = false;
    autoCompleteConfig['scroll'] = false;
    autoCompleteConfig['dataType'] = 'json';
    autoCompleteConfig['formatItem'] = function(data, i, max, value, term) {
        return value;
    };
    autoCompleteConfig['parse'] = function(data) {
        var myTabs = [];
        for (var i = 0; i < data.length; i++) {
            var temp = {};
            temp['data'] = data[i];
            temp['value'] = data[i]['cname'] + ' > ' + data[i]['pname'];
            myTabs.add(temp);
        }
        return myTabs;
    };
    autoCompleteConfigExtraParams['ajaxSearch'] = 1;
    autoCompleteConfigExtraParams['id_lang'] = languageId;
    autoCompleteConfig['extraParams'] = autoCompleteConfigExtraParams;
    $(function() {
        var searchInput = $(rootContainerSelector + ' .search_input');
        var resultHandler = function(evt, data, formatted) {
            searchInput.val(data['pname']);
            document.location.href = data.product_link;
        };
        searchInput.autocomplete (searchPageUrl, autoCompleteConfig).result (resultHandler);
    });
}
CD.Search._setupInstantSearch = function CD_Search$_setupInstantSearch(rootContainerSelector, searchPageUrl, languageId) {
    /// <summary>
    /// Setup instant search functionality
    /// </summary>
    /// <param name="rootContainerSelector" type="String">
    /// ID of the root container
    /// </param>
    /// <param name="searchPageUrl" type="String">
    /// Url of the search page
    /// </param>
    /// <param name="languageId" type="String">
    /// Language ID
    /// </param>
    var searchInput = $(rootContainerSelector + ' .search_input');
    searchInput.keyup(function(evt) {
        var target = $(evt.target);
        if (!String.isNullOrEmpty(target.val())) {
            CD.Search._stopInstantSearchQueries();
            var ajaxOptions = {};
            ajaxOptions.url = searchPageUrl;
            ajaxOptions.data = 'instantSearch=1&id_lang=' + languageId + '&q=' + target.val();
            ajaxOptions.dataType = 'html';
            ajaxOptions.success = function(data, textStatus, request) {
                CD.Search._tryToCloseInstantSearch();
                if (!String.isNullOrEmpty(target.val())) {
                    $(rootContainerSelector + ' #' + CD.Search._instantSearchCenterColumnId).attr('id', CD.Search._instantSearchOldCenterColumnId);
                    $(rootContainerSelector + ' #' + CD.Search._instantSearchOldCenterColumnId).after('<div id=\"' + CD.Search._instantSearchCenterColumnId + '\">' + data + '</div>');
                    $(rootContainerSelector + ' #' + CD.Search._instantSearchResultsId + ' a.close').click(function(evt1) {
                        target.val('');
                        return CD.Search._tryToCloseInstantSearch();
                    });
                    return false;
                }
            };
            CD.Search._instantSearchQueries.add($.ajax(ajaxOptions));
        }
        else {
            CD.Search._tryToCloseInstantSearch();
        }
    });
}
CD.Search._tryToCloseInstantSearch = function CD_Search$_tryToCloseInstantSearch() {
    /// <summary>
    /// Closes instant search results element
    /// </summary>
    /// <returns type="Boolean"></returns>
    if ($('#' + CD.Search._instantSearchOldCenterColumnId).length > 0) {
        $('#' + CD.Search._instantSearchCenterColumnId).remove();
        $('#' + CD.Search._instantSearchOldCenterColumnId).attr('id', CD.Search._instantSearchCenterColumnId);
        return false;
    }
    return undefined;
}
CD.Search._stopInstantSearchQueries = function CD_Search$_stopInstantSearchQueries() {
    /// <summary>
    /// Stops all pending instant search queries
    /// </summary>
    var $enum1 = ss.IEnumerator.getEnumerator(CD.Search._instantSearchQueries);
    while ($enum1.moveNext()) {
        var query = $enum1.get_current();
        query.abort();
    }
    CD.Search._instantSearchQueries.clear();
}


CD.Search.registerClass('CD.Search');
CD.Search._hasFocusDataKey = 'CD_Search_HasFocus';
CD.Search._hasMouseDataKey = 'CD_Search_HasMouse';
CD.Search._instantSearchQueries = [];
CD.Search._instantSearchCenterColumnId = 'center_column';
CD.Search._instantSearchOldCenterColumnId = 'old_center_column';
CD.Search._instantSearchResultsId = 'instant_search_results';

}
ss.loader.registerScript('cd.scripts.search', [], executeScript);
})();

//! This script was generated using Script# v0.6.3.0

