const sherlock_body = document.querySelector('body'),
sherlock_form = sherlock_input.parentNode;
var vy_iskali = [],
pop_tovary = [],
pop_cats = [],
found_cats = [],
found_prods = [],
all_search_results = [],
pristupaem_k_poisku = [];
let sherlock_root = document.documentElement;
sherlock_root.style.setProperty('--sherlock_accent_color', sherlock_accent_color);
vy_iskali['ru'] = 'Вы уже искали';
vy_iskali['ua'] = 'Ви вже шукали';
vy_iskali['en'] = 'You have already searched';
pop_tovary['ru'] = 'Популярные товары';
pop_tovary['ua'] = 'Популярні товари';
pop_tovary['en'] = 'Popular Products';
pop_cats['ru'] = 'Популярные категории';
pop_cats['ua'] = 'Популярні категорії';
pop_cats['en'] = 'Popular Categories';
found_cats['ru'] = 'Найденные категории';
found_cats['ua'] = 'Знайдені категорії';
found_cats['en'] = 'Found Categories';
found_prods['ru'] = 'Найденные товары';
found_prods['ua'] = 'Знайдені товари';
found_prods['en'] = 'Found Products';
all_search_results['ru'] = 'Все результаты поиска';
all_search_results['ua'] = 'Всі результати пошуку';
all_search_results['en'] = 'All Search Results';
pristupaem_k_poisku['ru'] = 'Приступаем к поиску';
pristupaem_k_poisku['ua'] = 'Приступаємо до пошуку';
pristupaem_k_poisku['en'] = 'Starting Search';
sherlock_input.type = 'search';
// sherlock_input.required = true;
sherlock_form.style.position = "relative";
var sherlock_overlay = document.createElement('div'),
sherlock_results = document.createElement('div'),
sherlock_results_left = document.createElement('div'),
sherlock_results_right = document.createElement('div'),
sherlock_results_footer = document.createElement('a'),
sherlock_results_loader = document.createElement('div'),
start_data_loaded = false;
sherlock_overlay.classList.add('sherlock_overlay');
sherlock_results.classList.add('sherlock_results');
sherlock_results_left.classList.add('sherlock_results_left');
sherlock_results_right.classList.add('sherlock_results_right');
sherlock_results_footer.classList.add('sherlock_results_footer');
sherlock_results_loader.classList.add('sherlock_results_loader');
// sherlock_results.style.top = (sherlock_input.offsetHeight+1)+'px';
sherlock_form.insertAdjacentElement('afterend',sherlock_overlay);
sherlock_form.insertAdjacentElement('beforeend',sherlock_results);
sherlock_results.insertAdjacentElement('beforeend',sherlock_results_left);
sherlock_results.insertAdjacentElement('beforeend',sherlock_results_right);
sherlock_results.insertAdjacentElement('beforeend',sherlock_results_footer);
sherlock_results.insertAdjacentElement('beforeend',sherlock_results_loader);
// sherlock_results_left.innerText = 'left column';
// sherlock_results_right.innerText = 'right column';
if (sherlock_swap_columns) {
sherlock_results.classList.add('swaped_columns');
}
var sherlock_popular_cats = document.createElement('div'),
sherlock_popular_prods = document.createElement('div'),
sherlock_results_cats = document.createElement('div'),
sherlock_results_prods = document.createElement('div'),
sherlock_history_div = document.createElement('div');
sherlock_history_div.classList.add('sherlock_history__wrapper');
sherlock_popular_cats.classList.add('sherlock_popular_cats');
sherlock_popular_cats.innerHTML = '
'+pop_cats[sherlock_lang]+'';
sherlock_results_left.insertAdjacentElement('afterbegin',sherlock_popular_cats);
sherlock_popular_prods.classList.add('sherlock_popular_prods');
sherlock_popular_prods.innerHTML = '
'+pop_tovary[sherlock_lang]+'
';
sherlock_results_right.insertAdjacentElement('afterbegin',sherlock_popular_prods);
sherlock_results_cats.classList.add('sherlock_results_cats');
sherlock_results_cats.classList.add('active');
sherlock_results_cats.innerHTML = '
'+found_cats[sherlock_lang]+'
';
sherlock_results_left.insertAdjacentElement('beforeend',sherlock_results_cats);
sherlock_results_prods.classList.add('.sherlock_results_prods');
sherlock_results_prods.innerHTML = '
'+found_prods[sherlock_lang]+'
';
sherlock_results_right.insertAdjacentElement('beforeend',sherlock_results_prods);
sherlock_show_popular();
sherlock_overlay.style.zIndex = 10000000;
sherlock_form.style.zIndex = 10010000;
function start_sherlock_loader() { sherlock_results.classList.add('loading'); }
function stop_sherlock_loader() { sherlock_results.classList.remove('loading'); }
function sherlock_show_popular() {
sherlock_results_cats.style.display = 'none';
sherlock_results_prods.style.display = 'none';
sherlock_popular_cats.style.display = 'block';
sherlock_popular_prods.style.display = 'block';
sherlock_history_div.style.display = 'block';
sherlock_results_cats.classList.remove('active');
sherlock_popular_cats.classList.add('active');
}
function sherlock_show_results() {
sherlock_results_cats.style.display = 'block';
sherlock_results_prods.style.display = 'block';
sherlock_popular_cats.style.display = 'none';
sherlock_popular_prods.style.display = 'none';
sherlock_history_div.style.display = 'none';
sherlock_results_cats.classList.add('active');
sherlock_popular_cats.classList.remove('active');
}
window.addEventListener('load', function(event) {
console.log('sherlock init');
}, false);
window.addEventListener('resize', function(event) {
window_risezed();
}, false);
window_risezed();
function window_risezed() {
var current_width = parseInt(document.body.clientWidth);
// console.log(current_width);
if (current_width < sherlock_mobile_width) {
sherlock_results.classList.add('sherlock_mobile_view');
} else {
sherlock_results.classList.remove('sherlock_mobile_view');
}
}
sherlock_overlay.addEventListener('click', function(event) {
sherlock_body.classList.remove('in_search');
}, false);
sherlock_input.addEventListener('focus', function(event) {
if (!start_data_loaded) {
load_start_data();
}
sherlock_body.classList.add('in_search');
search_results(this.value);
}, false);
sherlock_input.addEventListener('blur', function(event) {
// sherlock_body.classList.remove('in_search');
}, false);
sherlock_input.addEventListener('search', function(event) {
sherlock_input.blur();
sherlock_body.classList.remove('in_search');
// event.preventDefault();
}, false);
sherlock_input.addEventListener('keyup', function(event) {
var keypressed = event.key;
if (keypressed === 'ArrowDown' || keypressed === 'ArrowUp' || keypressed === 'ArrowLeft' || keypressed === 'ArrowRight') {
if (!!document.querySelector('.sherlock_selected')) {
var selected_element = document.querySelector('.sherlock_selected'),
par_sel_el = selected_element.parentNode;
if (keypressed === 'ArrowDown') {
selected_element.classList.remove('sherlock_selected');
if (!!par_sel_el.nextElementSibling) {
par_sel_el.nextElementSibling.querySelector('a').classList.add('sherlock_selected');
}
}
if (keypressed === 'ArrowUp') {
selected_element.classList.remove('sherlock_selected');
if (!!par_sel_el.previousElementSibling) {
par_sel_el.previousElementSibling.querySelector('a').classList.add('sherlock_selected');
}
}
} else {
if (!!sherlock_results_left.querySelector('.active ul li a')) {
sherlock_results_left.querySelector('.active ul li a').classList.add('sherlock_selected');
}
}
} else {
var og_val = this.value;
setTimeout(() => {
if (this.value === og_val) {
// console.log('start ajax');
search_results(this.value);
}
}, 500);
}
}, false);
sherlock_form.addEventListener('submit', function(event) {
var form_value = sherlock_input.value.toString().trim().toLowerCase();
event.preventDefault();
if (!!document.querySelector('.sherlock_selected')) {
var gotourl = document.querySelector('.sherlock_selected').href;
window.location.href = gotourl;
} else {
if (form_value.length > 0) {
add_search_to_cookies(form_value);
sherlock_results_footer.innerText = pristupaem_k_poisku[sherlock_lang]+'...';
sherlock_form.submit();
}
}
}, false);
sherlock_results_footer.addEventListener('click', function(event) {
var form_value = sherlock_input.value.toString().trim().toLowerCase();
add_search_to_cookies(form_value);
sherlock_results_footer.innerText = pristupaem_k_poisku[sherlock_lang]+'...';
// event.preventDefault();
}, false);
function search_results(value) {
if (!!document.querySelector('.sherlock_selected')) {
document.querySelector('.sherlock_selected').classList.remove('sherlock_selected');
}
thisval = value.toString().trim().toLowerCase();
if (thisval.length > 0) {
start_sherlock_loader();
sherlock_results.classList.remove('without_footer');
sherlock_results_footer.href = '/?search='+thisval;
sherlock_results_footer.innerText = all_search_results[sherlock_lang]+' «'+thisval+'»';
sherlock_results_footer.style.display = 'block';
const requrl = '/modules/sherlock.php?act=search&search='+thisval+'&lang='+sherlock_lang+'&max_products='+max_products+'&max_filters='+max_filters+'&rand='+Math.random();
/* console.log(requrl); */
const request = new XMLHttpRequest();
request.open('GET', requrl);
request.setRequestHeader('Content-Type', 'application/x-www-form-url');
request.addEventListener("readystatechange", () => {
if (request.readyState === 4 && request.status === 200) {
if (!!document.querySelector('.sherlock_results_cats_ul')) { document.querySelector('.sherlock_results_cats_ul').remove(); }
if (!!document.querySelector('.sherlock_results_prods_ul')) { document.querySelector('.sherlock_results_prods_ul').remove(); }
var otvet = JSON.parse(request.responseText),
res_products = otvet.products,
res_filters = otvet.filters;
// console.log(otvet);
var sherlock_results_prods_ul = document.createElement('ul');
sherlock_results_prods_ul.classList.add('sherlock_results_prods_ul');
res_products.forEach(element => {
// console.log(element);
sherlock_results_prods_ul.innerHTML += sherlock_prod_template(element.title,element.url,element.img,element.price,element.oldprice);
});
sherlock_results_prods.insertAdjacentElement('beforeend',sherlock_results_prods_ul);
var sherlock_results_cats_ul = document.createElement('ul');
sherlock_results_cats_ul.classList.add('sherlock_results_cats_ul');
res_filters.forEach(element => {
// console.log(element);
sherlock_results_cats_ul.innerHTML += '
'+element.title+'';
});
sherlock_results_cats.insertAdjacentElement('beforeend',sherlock_results_cats_ul);
stop_sherlock_loader();
sherlock_show_results();
}
});
request.send();
} else {
sherlock_results.classList.add('without_footer');
sherlock_results_footer.style.display = 'none';
sherlock_show_popular();
}
}
function load_start_data() {
start_sherlock_loader();
if (!!sh_getCookie('sherlock_history')) {
var sherlock_history = sh_getCookie('sherlock_history').toString().trim().split('|'),
sherlock_history_div_content = '
'+vy_iskali[sherlock_lang]+'
';
sherlock_history.forEach((element,i) => {
if (i'+element+'';
}
});
sherlock_history_div_content += '
';
sherlock_history_div.innerHTML = sherlock_history_div_content;
sherlock_results_left.insertAdjacentElement('afterbegin',sherlock_history_div);
document.querySelectorAll('.sherlock_history li').forEach(element => {
element.addEventListener('click', function(event) {
var tosearch = this.dataset.search;
sherlock_input.value = tosearch;
sherlock_input.focus();
}, false);
});
}
const requrl = '/modules/sherlock.php?act=getpopular&lang='+sherlock_lang+'&max_products='+popular_porducts+'&max_filters='+popular_filters+'&rand='+Math.random();
// console.log(requrl);
const request = new XMLHttpRequest();
request.open('GET', requrl);
request.setRequestHeader('Content-Type', 'application/x-www-form-url');
request.addEventListener("readystatechange", () => {
if (request.readyState === 4 && request.status === 200) {
var otvet = JSON.parse(request.responseText),
pop_products = otvet.products,
pop_filters = otvet.filters,
to_pop_prods = document.createElement('ul'),
to_pop_cats = document.createElement('ul');
to_pop_prods.classList.add('pop_prods');
pop_products.forEach(element => {
// console.log(element);
to_pop_prods.innerHTML += sherlock_prod_template(element.title,element.url,element.img,element.price,element.oldprice);
});
pop_filters.forEach(element => {
// console.log(element);
to_pop_cats.innerHTML += '
'+element.title+'';
});
sherlock_popular_cats.insertAdjacentElement('beforeend',to_pop_cats);
sherlock_popular_prods.insertAdjacentElement('beforeend',to_pop_prods);
stop_sherlock_loader();
start_data_loaded = true;
}
});
request.send();
}
function sherlock_prod_template(title,url,img,price,oldprice) {
var toreturn = '';
toreturn += '
'+title+'';
if (parseInt(oldprice) > 0) {
toreturn += ''+price+'';
toreturn += ''+oldprice+'';
} else {
toreturn += ''+price+'';
}
toreturn += '';
return toreturn
}
function add_search_to_cookies(word) {
var sherlock_history = [];
if (!!sh_getCookie('sherlock_history')) {
sherlock_history = sh_getCookie('sherlock_history').toString().trim().split('|');
}
sherlock_history.unshift(word);
sherlock_history = sherlock_unique_arr(sherlock_history);
sh_setCookie('sherlock_history',sherlock_history.join('|'));
}
function sherlock_unique_arr(arr) {
let result = []; for (let str of arr) { if (!result.includes(str)) { result.push(str); } }
return result;
}
/* cookies */
function sh_getCookie(e,t=!1){if(!e)return;let n=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([.$?*|{}()\[\]\\\/+^])/g,"\\$1")+"=([^;]*)"));if(n){let e=decodeURIComponent(n[1]);if(t)try{return JSON.parse(e)}catch(e){}return e}}
function sh_setCookie(e,t,n={path:"/"}){if(!e)return;(n=n||{}).expires instanceof Date&&(n.expires=n.expires.toUTCString()),t instanceof Object&&(t=JSON.stringify(t));let o=encodeURIComponent(e)+"="+encodeURIComponent(t);for(let e in n){o+="; "+e;let t=n[e];!0!==t&&(o+="="+t)}document.cookie=o}
function sh_deleteCookie(e){setCookie(e,null,{expires:new Date,path:"/"})}
/* cookies */