Your IP : 3.135.223.175
/**
* Module provide global search
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.GlobalSearch = function(window, $, EventMgr, App) {
'use strict';
var timeoutId,
loaderTimeid,
elem = [],
emptyElem = [ { description: { $: pageInfo.notfound }, __empty__: true } ],
keys = {
'38': 'UPKEY',
'40': 'DOWNKEY',
'37': 'LEFTKEY',
'39': 'RIGHTKEY',
'13': 'ENTERKEY',
'9': 'TABKEY'
};
function $mountNode() {
return App.u.selectorCache('.i-gsearch');
}
function $body() {
return App.u.selectorCache('body');
}
function keyUpHandler(e) {
var key = e.which || e.keyCode,
searchString = this.value,
$selected = $('.b-gsearch__list-item_selected_yes');
if (keys[key] === 'UPKEY') {
var prev = $selected[0] ? $selected.prev() : $('.b-gsearch__list-item:first');
if (prev.length !== 0) {
$selected.removeClass('b-gsearch__list-item_selected_yes');
prev.addClass('b-gsearch__list-item_selected_yes');
}
e.preventDefault();
} else if (keys[key] === 'DOWNKEY') {
var next = $selected[0] ? $selected.next() : $('.b-gsearch__list-item:first');
if (next.length !== 0) {
$selected.removeClass('b-gsearch__list-item_selected_yes');
next.addClass('b-gsearch__list-item_selected_yes');
}
e.preventDefault();
} else if (keys[key] === 'ENTERKEY') {
if ($selected[0]) {
clickListHandler.apply($selected[0], [e]);
} else {
searchHandler(searchString);
}
e.preventDefault();
} else {
clearTimeout(timeoutId);
timeoutId = setTimeout(function() {
searchHandler(searchString);
}, 250);
}
if (searchString !== '') {
showSearchReset();
} else {
hideSearchReset();
}
}
function showSearchReset() {
var $crossBtn = $('.b-gsearch__close');
if (!$crossBtn.hasClass('b-gsearch__close_is_show')) {
$crossBtn.addClass('b-gsearch__close_is_show');
}
}
function hideSearchReset() {
$('.b-gsearch__close').removeClass('b-gsearch__close_is_show');
}
function searchFailHandler(e, data) {
unsetLoader();
}
function searchRespHandler(e, data) {
var doc = data.doc || {},
html = '';
if (doc.elem) {
elem = doc.elem;
if (elem.length > 20) {
elem.splice(20, elem.length - 1);
}
html = tempFunc({ elem: elem });
} else {
html = tempFunc({ elem: emptyElem });
}
$mountNode().html(html);
$body().on('click.globalSearch', closeList);
unsetLoader();
}
var template = '<div class="b-gsearch__list-wrapper b-select-ac__list-scroll-wrapper">' +
'<div class="b-select-ac__list-wrapper b-gsearch__list " style="display:block;">' +
'<ul class="b-select-ac__list">' +
'{{~it.elem :v :i}}' +
'<li class="b-gsearch__list-item i-gsearch__list-item b-select-ac__list-item" data-index="{{=i}}">{{=window.filterXSS(v.description.$)}}</li>' +
'{{~}}' +
'</ul>' +
'</div>' +
'</div>';
var tempFunc = window.doT.template(template);
function searchHandler(searchString) {
if (searchString !== '') {
var param = {
func: 'globalindex',
elid: searchString,
out: 'json'
};
EventMgr.trigger('ajaxRequest', {
param: param,
trfunc: 'globalSearchResponse',
failfunc: 'globalSearchFail',
outtype: 'json',
queue: 'noqueue'
});
setLoader();
}
}
function clickListHandler() {
var index = this.getAttribute('data-index');
if (elem && elem[index] && !elem[index].__empty__) {
var param = App.u.parseParams(elem[index].filter.$);
param.func = elem[index].func.$;
param.filter = 'on';
//var param = App.u.parseParams('func=paymethod&filter=on&name=rub');
EventMgr.trigger('ajaxRequest', {
param: param,
invar: {
newtab: true, __src: 'menuAction'
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failMenuAjaxResponse',
queue: 'noqueue' });
}
closeList();
}
function closeList() {
$mountNode().html('');
elem = [];
$body().off('click.globalSearch');
}
function setLoader() {
//clearTimeout(loaderTimeid);
loaderTimeid = setTimeout(function() {
$('.i-gsearch__input').addClass('b-gsearch__input_loading_yes');
}, 100);
}
function unsetLoader() {
clearTimeout(loaderTimeid);
$('.i-gsearch__input').removeClass('b-gsearch__input_loading_yes');
}
function resetHandler(e) {
e.preventDefault();
$('.i-gsearch__input').val('');
hideSearchReset()
}
function init() {
EventMgr.on($mainWrapper(), '.i-gsearch__input', 'keyup', keyUpHandler);
EventMgr.on($mainWrapper(), '.i-gsearch__input', 'focus', keyUpHandler);
EventMgr.on($mainWrapper(), '.i-gsearch__list-item', 'click', clickListHandler);
EventMgr.on($mainWrapper(), '.i-gsearch__close', 'click', resetHandler);
EventMgr.bind('globalSearchResponse', searchRespHandler);
EventMgr.bind('globalSearchFail', searchFailHandler);
}
function $mainWrapper() {
return App.u.selectorCache('#main-wrapper');
}
var api = {
init: init
};
return api;
} (window, $, EventMgr, App);