PageSourceSearch

https://www.drevo-spas.ru/frontend/js/main.js?v10

js drevo-spas.ru collected 2026-10-02 10:23:58 UTC 46,631 bytes, 1,388 lines download raw bytes

1$(document).on('click', '[data-event="clickDefault"]', function(e) {
2	e.preventDefault()
3});
4
5// Подгрузить ajax блоки
6var dybl = $('[data-dyna-block]');
7if (dybl.length) {
8	var dbL = {block_path:[]}; 
9	dybl.each(function(i, b) {
10		dbL.block_path[i] = JSON.stringify($(b).data('dyna-block'));
11	});
12	dynaFrontExecute(dbL).done(function(j){
13		var resJson = JSON.parse(j);
14		dybl.each(function(i, b) {
15			if(resJson[i].substring(0,15) == 'alias_location:'){
16				location = resJson[i].substring(15);
17			}else if(resJson[i].search(/data\-domain\-map/)>-1){
18				var d = $(resJson[i]).data('domain-map');
19				try{
20					ymaps.ready(function(){
21						var myMap = new ymaps.Map("map", {
22							center: d[0].c.split(/,\s*/),
23							zoom: 9
24						});
25						for(var a=0;a<d.length;a++){
26							myMap.geoObjects.add(
27								new ymaps.Placemark(d[a].c.split(/,\s*/), {
28									balloonContent: d[a].t
29								}, {
30									preset: 'islands#icon',
31									iconColor: '#f28300'
32								})
33							)
34						}
35						if(d.length>1)myMap.setBounds(myMap.geoObjects.getBounds());
36					})
37				}catch(e){console.log(e)}
38			}
39			$(b).html($(resJson[i]).html())
40		});
41		$('#mob_menu_city').html($('[data-geo-city]').html());
42		$('[data-remodal-id="short-login"]').remodal();
43		basketsMarkUpd();
44		//initPlugins();
45	});
46}
47
48// Мобильная навигация
49try {
50	var $mainNav = $('[data-menumobile="treeProp"]').clone(), $catalog, $topNav = $('[data-menumobile="treeTop"]').clone(), $topExtra;
51	$catalog = $mainNav.find('[data-menumobile="catFirst"]'); $mainNav.find('[data-menumobile="catFirst"]').remove();
52	$topExtra = $topNav.find('[data-menumobile="catExtraFirst"]'); $topNav.find('[data-menumobile="catExtraFirst"]').remove();
53	$('[data-menumobile="append"]').prepend(
54		'<button type="button" class="is-hide-btn" data-event="showMobNav">Меню</button>',
55		$catalog.html(),
56		$topExtra.each(function(){$(this).html()}),
57		$mainNav.html(), 
58		$topNav.html(),
59		`<div class="nav-prop-item nav-prop-top" style="background-color:#e4e4e4">
60			<button type="button" class="btn-geo" data-fancybox-set-geo>
61				<svg class="svg svg-inline"><use xlink:href="#i-location" /></svg>
62				<span id="mob_menu_city">${window.siter_geo_city}</span>
63			</button>
64		</div>`
65	);
66	
67	/* $('.mob-nav-scr [data-menumobile="catKidFirst"]').insertAfter('.mob-nav-scr [data-event="showMobNav"]')
68	$('.mob-nav-scr [data-menumobile="catKidSec"]').insertAfter('.mob-nav-scr [data-menumobile="catKidFirst"]') */
69}catch(e){console.log(e)}
70function mm(e) {
71	e.preventDefault();
72	$(this).removeClass('on-mob-nav')
73}
74$(document).on('click', '[data-event="showMobNav"]', function() {
75	$(document).off('click','.l-wrapper.on-mob-nav',mm);
76	$('.mob-nav-hidden, .l-wrapper').toggleClass(function() {
77		if ($(this).is('on-mob-nav')) {
78			return ''
79		} else {
80			setTimeout(function(){$(document).on('click','.l-wrapper.on-mob-nav',mm)}, 5);
81			return 'on-mob-nav'
82		}
83	})
84});
85
86$.fn.hasAttr = function(name) {
87   return this.attr(name) !== undefined;
88};
89
90$(document).on('click', '.mob-nav-hidden a.is-grow, .mob-nav-hidden span.is-grow', function(e) {
91	if (e.offsetX > 233) {
92		e.preventDefault();
93		$(this).addClass('is-open');
94		$('.mob-nav-scr').addClass('is-scroll-fix');
95	} else if ($(e.target).hasAttr('data-onclick-redirect') || $(e.target).parent().hasAttr('data-onclick-redirect')){
96		var redirectLocation = $(e.target).data('onclick-redirect') || $(e.target).parent().data('onclick-redirect');
97		location.href = redirectLocation;
98	}
99});
100$(document).on('click','.mob-nav-hidden button',function(e){
101	$(this).closest('.nav-prop-item').children('.is-open').removeClass('is-open');
102	$('.mob-nav-scr').toggleClass('is-scroll-fix',$('.mob-nav-hidden .is-open').length>0)
103});
104
105// проверка форм, маски ввода 
106$('input[type="tel"]').mask(window.siterPhoneMask || '+7 (000) 000-0#');
107$('[data-event="typeNumber"]').mask("99999_99", { // Маска для числа > 0 и дробь через точку
108	'translation': {
109		'_': {
110			pattern: /[.,]/,
111			optional: true
112		}
113	},
114	onKeyPress: function(cep, event, field) {
115		cep = cep.replace(/^0+(\d+)/g, '$1').replace(/,/g, '.');
116		field.val(cep);
117	}
118});
119$(document).on('blur.mask', '[data-event="typeNumber"]', function() {
120	var val = $(this).val();
121	val = val.replace(/^0+(\d+)/g, '$1').replace(/,/g, '.').replace(/\.0*$/g, '');
122	$(this).val(val);
123});
124// Это событие возникает раньше чем submit, если в форме есть не валидные поля с "required" то submit не наступит. Тут мы добавляем класс форме чтобы стилизовать его по своему, но после клика.
125$(document).on('click', 'form [type="submit"]', function() {
126	$(this).closest('form').addClass('is-submitted')
127});
128var chbxReqTimer = setInterval(function() { // checkbox required fix
129	var siterMultiNotRequred = $('input[data-required]:checked').closest('.input, .input-select-checkbox');
130	$('input[data-required]').prop('required', true);
131	$('[data-event="orgFields"] [data-required]').prop('required', false); // Скрытые поля юр лица - не required, иначе форма не отправится
132	$.each(siterMultiNotRequred, function() {
133		$(this).find('input').prop('required', false);
134	});
135}, 300);
136$(document).on('click', function(e) {
137	if ($(e.target).closest('.input-select-checkbox').length == 0) $('.input-select-checkbox-toggle').prop('checked', false);
138});
139// Проверка E-mail при изменении, сказать что не прав или согласиться
140$(document).on('change', '[data-event="check_email"],[data-event="check_phone"]', checkField);
141
142// отправка общих форм, отзывы, обратн.связь ... 
143$(document).on('submit', '[data-event="formSubmit"]', formSubmit);
144$(document).on('change', '[name="autogen"]', function() {
145	$(this).closest('form').find('[data-event="autogen"]').toggle(!$(this).is(':checked'));
146});
147$(document).on('change', '[name="info_is_org"], [name="edit_info_is_org"]', function() {
148	var $orgFields = $(this).closest('form').find('[data-event="orgFields"],[data-event="orgFields-open"]'),
149		state = $(this).is(':checked');
150	$orgFields.toggle(state).toggleClass('is-open-js', state);
151	$orgFields.find('[data-required]').prop('required', state);
152	$orgFields.attr('data-event', 'orgFields' + (state ? '-open' : ''));
153});
154
155$(document).on('submit', '[data-type="subscribe"]', function() {
156	try {
157		VK.Goal('subscribe');
158	} catch (error) {
159		console.log(error);
160	}
161});
162
163$(document).on('click', '[data-event="radioUncheck"] [type="radio"]', function(e) { // отжать звездочки
164	var $dataCheckParent = $(this).closest('[data-event="radioUncheck"]');
165	if ($dataCheckParent.data('prev') == $(this).val()) {
166		$(this).prop('checked', false);
167		$dataCheckParent.removeData('prev');
168		return;
169	};
170	$dataCheckParent.data('prev', $(this).val());
171});
172
173$(document).on('change', '[type="text"], [type="email"], [type="tel"], textarea', function() { // Trim()
174	var val = $(this).val();
175	if (val) $(this).val(val.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''));
176});
177$(window).scroll(function() {
178	if ($(window).scrollTop() > 50) $('.header').addClass('header-fixed');
179	else $('.header').removeClass('header-fixed');
180});
181// Форма поиска по товарам 
182$('[data-event="formSearch"]').on('submit', function(e) {
183	if (!$(this).find('input[type="text"]').val()) e.preventDefault();
184});
185
186// Манипуляции с товарами
187basketsMarkUpd();
188$(document).on('click', '[data-event="addToDelay"]', function(e){// отложить
189	$(this).toggleClass('is-on');//.prop('disabled',true);
190	if ($(this).hasClass('is-on')) {
191		addToBasket(e); 
192		$(this).attr('title','Удалить избранное');
193		try {
194			VK.Goal('add_to_wishlist');
195		} catch (error) {
196			console.log(error);
197		}
198	} else {
199		removeDelay(e); 
200		$(this).attr('title','Добавить в избранное')
201	}
202});
203//$(document).on('click', '[data-event="addToBasket"]', addToBasket); // добавить в корзину обычная всплывашка
204$(document).on('click', '[data-event="addToBasket"]', addBasketWithModal); // добавить в корзину - уведомление в окне
205$(document).on('click', '[data-event="addToBasketQty"]', function(e){ // добавить в корзину с кол-вом
206	var extData = $(this).data('add-basket');
207	extData.qty = $('#count_' + $(this).data('nom-id')).val() || extData.qty; // как то указать input с кол-вом товаров относительно кнопки "добавить в корзину". Зависит от верстки.
208	addBasketWithModal(e, extData);
209	try {
210		VK.Goal('add_to_cart');
211	} catch (error) {
212		console.log(error);
213	}
214});
215
216function addBasketWithModal(e, extData){
217	if($('[data-remodal-id="addBasketModal"]').length == 0){
218		$('body').append(
219			'<div class="remodal" data-remodal-id="addBasketModal">'+
220				'<button data-remodal-action="close" class="btn remodal-close"><svg class="svg"><use xlink:href="#i-close" /></svg></button>'+
221				'<div class="h3">Ваша корзина:</div>'+
222				'<div class="add-basket-modal-noms">'+($('[data-event="shortBasketNoms"]').html() || '')+'</div>'+
223			'</div>'
224		);
225	}
226	var 
227		$modalContent = $('.add-basket-modal-noms'),
228		$remodalNotify = $('[data-remodal-id="addBasketModal"]').remodal({hashTracking:false}),
229		remodalNotifyState = $remodalNotify.getState(),
230		promise = addToBasket(e, extData);
231		
232	$modalContent.addClass('is-preloaded-md');
233	if(remodalNotifyState == 'closed' || remodalNotifyState == 'closing') $remodalNotify.open();
234	promise.done(function(res){
235		$modalContent.removeClass('is-preloaded-md');
236		$modalContent.html($(res).find('[data-event="shortBasketNoms"]').html() || '');
237		try {
238			VK.Goal('add_to_cart');
239			checkWebinar();
240		} catch (error) {
241			console.log(error);
242		}
243	});
244}
245
246$(document).on('click', '[data-event="availNotify"]', function(e) { // сообщить о наличии
247	e.preventDefault();
248	if ($('#nom-notify').length == 0)
249		$('body').append(
250			'<div class="remodal" data-remodal-id="nom-notify">' +
251			'<button data-remodal-action="close" class="btn remodal-close"><svg class="svg"><use xlink:href="#i-close" /></svg></button>' +
252			'<div id="nom-notify"></div>' +
253			'</div>'
254		);
255	var data = {
256			par: "notify",
257			nom_id: $(this).data('add-notify')
258		},
259		promise = dynaFrontExecute(data);
260	promise.done(function(res) {
261		var resJson = JSON.parse(res);
262		if (resJson.error) $('#nom-notify').html('<div class="h-text-warn">' + resJson.text + '</div>')
263		else $('#nom-notify').html('<div class="h-text-succ">' + resJson.text + '</div>');
264		$('[data-remodal-id="nom-notify"]').remodal({
265			hashTracking: false
266		}).open();
267	});
268});
269$(document).on('click', '[data-event="callorderNomId"]', function() { // подсунуть nom_id в callorder 
270	$('#callorder_nom_id').val($(this).data('callorder-nom-id') || '');
271});
272$(document).on('change', '[data-mult-basket]', multBasket); // кол-во товара в input при добавлении кратно data-mult-basket
273$(document).on('click', '[data-event="qtyDec"]', function() { // "-" кол-во товаров
274	var
275		min = parseInt(($(this).data('mult') || 1)),
276		inpTarget = $(this).next('input'),
277		val = parseInt(inpTarget.val());
278	if (isNaN(val)) {
279		inpTarget.val(min);
280		$(this).prop('disabled', true);
281		return
282	}
283	if (val - min <= min || val <= min) {
284		inpTarget.val(min);
285		$(this).prop('disabled', true)
286	} else inpTarget.val(val - min);
287});
288$(document).on('click', '[data-event="qtyInc"]', function() { // "+" кол-во товаров
289	var
290		min = parseInt(($(this).data('mult') || 1)),
291		inpTarget = $(this).prev('input'),
292		val = parseInt(inpTarget.val()),
293		decBtn = $(this).parent().children('[data-event="qtyDec"]');
294	if (isNaN(val)) {
295		inpTarget.val(min);
296		return
297	}
298	if (val < min) {
299		inpTarget.val(min);
300		decBtn.prop('disabled', true)
301	} else {
302		inpTarget.val(val + min);
303		decBtn.prop('disabled', false)
304	}
305});
306
307$(document).on('click', '.basket-button', function() {
308	try {
309		VK.Goal('initiate_checkout');
310	} catch (error) {
311		console.log(error);
312	}
313});
314
315// Корзина 
316$(document).on('keydown', '[data-event="basketForm"]', function(e){ if(e.keyCode==13) e.preventDefault() });
317$(document).on('submit', '[data-event="basketForm"]', basketSubmit);  // нажали "Оформить заказ"
318
319$(document).on('keyup', '[data-event="authBasketEnter"]', function(e){ if(e.keyCode==13) authBasket(e) }); // авторизация в корзине Enter на поле ввода
320$(document).on('click', '[data-event="authBasket"]', authBasket) // авторизация в корзине Button
321function authBasket(e) {
322	e.preventDefault();
323	var
324		$form = $('[data-event="authBasketForm"]'),
325		data = {par:'loginsmall'};
326	$.each(($form.find('input').prop('disabled',false).serializeArray()||[]),function(){data[this.name.replace('_auth','')]=this.value});
327	$form.addClass('is-preloaded');
328	dynaFrontExecute(data).done(function(res){
329		var resJson = JSON.parse(res);
330		if(resJson.success) resJson.location ? window.location=resJson.location : window.location.reload(true);
331		else resFormErrs($form, resJson);
332	})
333}
334
335$(document).on('change', '[data-event="bonusSpend"]', function() {
336	var $targetBox = $('[data-event="bonusSpendTarget"]');
337	$targetBox.toggle($(this).val() ? true : false);
338	$targetBox.find('[name="bonuses"]').prop('disabled', $(this).val() ? false : true);
339});
340$(document).on('click', '[data-event="promoSend"]', function(e) {
341	e.preventDefault();
342	var inputPromo = $(this).closest('form').find('[name="promocode"]');
343	if (inputPromo.val() != inputPromo.data('prev')) basketSubmit();
344});
345// При изменении некоторых полей адреса обновить корзину.
346$(document).on('change', '[data-event="basketForm"] [name="addr_zip"], [data-event="basketForm"] [name="addr_distance"]', basketSubmit);
347$(document).on('click', '[data-event="onom-behs"]', function(e) {
348	e.preventDefault();
349	$(this).toggleClass('is-active');
350	$(this).next().slideToggle();
351})
352// jQuery UI в корзине
353try {
354	var
355		dataCities = $('[data-autocomplete-city]').data('autocomplete-city'),
356		basketParamStorage = {}; // тут хранить параметры корзины чтобы после ajax восстановить вид/скрипты
357	if (dataCities) {
358		$.each(dataCities, function(i, v) {
359			v.label = v.city;
360			v.value = v.city
361		});
362		if (dataCities.length) {
363			basketParamStorage.uiAutocompleteOpt = {
364				delay: 0,
365				minLength: 2,
366				autoFocus: true,
367				source: dataCities,
368				select: function(event, ui) {
369					$(this).val(ui.item.value);
370					if (ui.item.code) $('[name="city_id"]').val(ui.item.code);
371					else $('[name="city_id"]').val('');
372					basketSubmit();
373				},
374				focus: function(event, ui) {
375					window.uiAutocompleteStoredItem = ui.item;
376				},
377				change: function(event, ui) {
378					if (ui.item) {
379						$(this).val(ui.item.value);
380						if (ui.item.code) $('[name="city_id"]').val(ui.item.code);
381						else $('[name="city_id"]').val('');
382						basketSubmit();
383					} else if (!ui.item && window.uiAutocompleteStoredItem.value == $(this).val()) {
384						if (window.uiAutocompleteStoredItem.code) $('[name="city_id"]').val(window.uiAutocompleteStoredItem.code);
385						else $('[name="city_id"]').val('');
386						basketSubmit();
387					} else {
388						$(this).val('');
389						return false;
390					}
391				}
392			};
393		}
394		$.widget("custom.cityComplete", $.ui.autocomplete, {
395			_create: function() {
396				this._super();
397				this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)");
398			},
399			_renderMenu: function(ul, items) {
400				var
401					that = this,
402					reg = "";
403				$.each(items, function(index, item) {
404					if (item.reg != reg) {
405						ul.append("<li class='ui-autocomplete-category'>" + item.reg + "</li>");
406						reg = item.reg;
407					}
408					that._renderItemData(ul, item);
409				});
410			}
411		});
412		if (basketParamStorage.uiAutocompleteOpt) $('[name="addr_city"]').cityComplete(basketParamStorage.uiAutocompleteOpt);
413	}
414
415	function basketAfterLoad() { // при обновлении html корзины, переобъявить плагины	
416		if (basketParamStorage.uiAutocompleteOpt) {
417			dataCities = $('[data-autocomplete-city]').data('autocomplete-city'); // забрать новые города
418			$.each(dataCities, function(i, v) {
419				v.label = v.city;
420				v.value = v.city
421			});
422			basketParamStorage.uiAutocompleteOpt.source = dataCities;
423			if (dataCities.length) $('[data-event="basketForm"] [name="addr_city"]').cityComplete(basketParamStorage.uiAutocompleteOpt);
424		}
425	}
426}catch(e){console.warn(e)}
427
428// Корзина, Отложенные товары 
429$(document).on('click', '[data-event="delayBasketUpdate"] [type="submit"]', function(event) { // Узнать с какой кнопки сработал delayBasketSubmit ↓
430	window.delayBasketSubmitBtn = {
431		name: $(this).attr('name'),
432		value: $(this).val()
433	};
434});
435$(document).on('submit', '[data-event="delayBasketUpdate"]', delayBasketSubmit);
436
437// behcheckbox 
438$(document).on('click', '[data-event="alphabetType"]', function(e) {
439	e.preventDefault();
440	$('[data-alphabet]').removeClass('is-active');
441	$('[data-alphabet="' + $(this).attr('data-type') + '"]').addClass('is-active');
442	$('[data-event="alphabetType"]').removeClass('is-active');
443	$(this).addClass('is-active');
444	alphabetType = $(this).attr('data-type');
445});
446$(document).on('change.behcheckbox', '[data-event="behcheckboxForm"] input', behcheckboxSend);
447$(document).on('submit', '[data-event="behcheckboxForm"]', behcheckboxSend);
448$(document).on('reset', '[data-event="behcheckboxForm"]', behcheckboxSend);
449$(window).on('popstate', function(e) { // Пошли по истории...
450	if (e.originalEvent.state && e.originalEvent.state.search(/&from_behcheckbox=0/) != -1)
451		behcheckboxSend(e, e.originalEvent.state.replace(/&from_behcheckbox=0/g, ''));
452});
453
454$(document).on('click', '[data-event="behcheckboxSort"]', function(e) {
455	e.preventDefault();
456	var
457		$form = $('[data-event="behcheckboxForm"]'),
458		data = $(this).data('sort');
459	$form.find('input[name="o"]').val(data.o);
460	$form.find('input[name="oa"]').val(data.oa);
461	$form.find('input[name="p"]').val('');
462	behcheckboxSend(e);
463});
464$(document).on('click', '[data-event="listView"]', function(e) { // переключалка вида списка товаров
465	e.preventDefault();
466	if ($(this).data('view'))
467		setCookie('list_view', $(this).data('view'), {
468			expires: 31536000,
469			path: '/',
470			domain: window.siterDomain
471		});
472	else
473		setCookie('list_view', '', {
474			expires: -1,
475			path: '/',
476			domain: window.siterDomain
477		});
478	behcheckboxSend(e);
479});
480$(document).on('click', '[data-event="behcheckboxPagerAppend"]', function(e) {
481	e.preventDefault();
482	$('[data-event="behcheckboxForm"] input[name="p"]').val($(this).data('next-page') || 1);
483	behcheckboxSend(e, {
484		pagerAppend: 1
485	});
486});
487$(document).on('click', '[data-event="behcheckboxPager"] a', function(e) {
488	e.preventDefault();
489	var page = $(this).data('page') || 1;
490	$('[data-event="behcheckboxForm"] input[name="p"]').val(page);
491	var promise = behcheckboxSend(e);
492	promise.done(function() { // добавить прокрутку к началу списка.
493		$('body,html').animate({
494			scrollTop: $('[data-event="behcheckboxList"]').offset().top
495		}, 600);
496		
497		var $lastPath = $('.path_a .is-last'),
498			$lastPathBlock = $lastPath.parent(),
499			lastHref = $lastPath.data('href'),
500			lastName = $lastPath.text();
501		
502		if (page > 1) {
503			if ($lastPath.text().indexOf('Страница') != -1) {
504				$lastPath.text('Страница ' + page)
505			} else {
506				$lastPath.remove();
507				$lastPathBlock.append('<a href="' + lastHref + '"><span>' + lastName + '</span></a>');
508				$('.breadcrumbs').append('<span class="path_arr"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5 7"><path fill="none" stroke="#3e3f3e" d="M.8 6.5l3-3L.9.5"></path></svg></span><span class="path_a"><span class="is-last" >Страница ' + page + '</span>');
509			}
510		} else {
511			if ($lastPath.text().indexOf('Страница') != -1) {
512				$lastPathBlock.remove();
513				$('.breadcrumbs .path_arr:last').remove();
514			}
515		}
516	});
517});
518$(document).on('click', '[data-event="nomsLetter"]', function(e) {
519	e.preventDefault();
520	$('[data-event="behcheckboxForm"] input[name="letter"]').val($(this).data('letter') || '');
521	behcheckboxSend(e);
522});
523
524$(document).on('click', '#vk_goal_bsk', function() {
525	try {
526		VK.Goal('conversion');
527	} catch (error) {
528		console.log(error);
529	}
530});
531
532function initBehRangeSlider() {
533	var updTimerId;
534	try {
535		$('[data-event="uiSlider"]').slider({
536			range: true,
537			classes: {
538				"ui-slider": "custom-ui-slider",
539				"ui-slider-handle": ""
540			},
541			create: function(event, ui) {
542				var
543					data = $(this).data('beh-range'),
544					minRange = Number(data.min || 0),
545					maxRange = Number(data.max || 9999999),
546					minVal = Number(data.minVal || minRange),
547					maxVal = Number(data.maxVal || maxRange);
548				$(this).slider("option", {
549					min: minRange,
550					max: maxRange,
551					values: [minVal, maxVal]
552				});
553			},
554			slide: function(event, ui) {
555				$(this).siblings('[data-event="behMin"]').val(ui.values[0]);
556				$(this).siblings('[data-event="behMax"]').val(ui.values[1]);
557				var
558					data = $(this).data('beh-range'),
559					minRange = Number(data.min || 0),
560					maxRange = Number(data.max || 9999999);
561				if (minRange == ui.values[0] && maxRange == ui.values[1]) $(this).siblings('[data-range-target]').val('');
562				else $(this).siblings('[data-range-target]').val(ui.values[0] + '..' + ui.values[1]);
563				clearTimeout(updTimerId);
564			},
565			change: function(event, ui) {
566				var prevVals = $(this).data('uiprev');
567				if (prevVals !== undefined && (prevVals[0] != ui.values[0] || prevVals[1] != ui.values[1])) { // оно действительно изменилось, а то ведется на клик
568					updTimerId = setTimeout(function() {
569						behcheckboxSend(event)
570					}, 1500); // Ждем 1.5 сек подумать, изменить...
571				}
572				$(this).data({
573					uiprev: ui.values
574				});
575			}
576		});
577	}catch(e){console.warn(e)}
578}
579initBehRangeSlider();
580
581function behcheckboxAfterLoad() { // вызывается из siter.js после запроса товаров
582	initBehRangeSlider();
583	//var page = $('[data-event="behcheckboxForm"] input[name="p"]').val();
584	//document.title = document.title.replace(/^Страница \d+\. /, 'Страница '+page+'. ');
585}
586$(document).on('click', '[data-event="filter-toggle-mobile"]', function() {
587	$(this).toggleClass('is-open');
588	$('body').toggleClass('is-fix-height');
589	$('[data-event="behcheckboxForm"]').toggleClass('is-open');
590})
591
592// ajax для списка товаров 
593$(document).on('change', '[data-event="nomsSort"]', function(e) {
594	e.preventDefault();
595	var
596		$form = $('[data-event="nomsForm"]'),
597		//data = $(this).data('sort');
598		data = $(this).find('option:selected').data('sort');
599	$form.find('input[name="o"]').val(data.o);
600	$form.find('input[name="oa"]').val(data.oa);
601	$form.find('input[name="p"]').val('');
602	listAjax(e);
603});
604$(document).on('click', '[data-event="nomsPager"] a', function(e) {
605	e.preventDefault();
606	$('[data-event="nomsForm"] input[name="p"]').val($(this).data('page') || 1)
607	var promise = listAjax(e);
608	promise.done(function() { // добавить прокрутку к началу списка.
609		$('body,html').animate({
610			scrollTop: $('[data-event="listUpdate"]').offset().top
611		}, 600);
612	});
613});
614$(document).on('click', '[data-event="nomsPagerAppend"]', function(e) {
615	e.preventDefault();
616	$('[data-event="nomsForm"] input[name="p"]').val($(this).data('next-page') || 1);
617	listAjax(e, {
618		pagerAppend: 1
619	})
620});
621
622// навигация дерево 
623	$('[data-event="treeToggle"]').on('click', function(){
624		$(this).toggleClass('is-open-btn');
625		$(this).siblings('[data-event="treeToggleTarget"]').slideToggle(100);
626	});
627
628// Регистрация восстановление пароля 
629$(document).on('click', '[data-event="forgotPassModal"]', function(e) {
630	e.preventDefault();
631	$('[data-remodal-id="forgot-password"]:eq(0)').remodal().open();
632});
633
634// Вход на сайт и регистрация 
635$(document).on('submit', '[data-event="loginSmall"], [data-event="regLogin"], [data-event="register"]', function(e) {
636	var promise = formSubmit(e);
637	var from = $('[name="from"]').val(),
638		redirectLink = '/cabinet/index.html';
639		
640	promise.done(function(res) {
641		if (res.success && $(e.target).data('event') == 'loginSmall') {
642			window.location = window.location.href;
643		} else if (res.success) {
644			if (from) {
645				redirectLink = from;
646			}
647			window.location = redirectLink;
648		} else if (res.success && $(e.target).data('event') == 'register') {
649			try {
650				VK.Goal('complete_registration');
651			} catch (error) {
652				console.log(error)
653			};
654		}
655	});
656});
657
658// Партнёры пагер
659$(document).on('click', '[data-event="partnerPager"] button', function(e) {
660	e.preventDefault();
661	var block_name = $('[data-event="partnerPager"]').attr('data-block_name');
662	if (!block_name) return false;
663	var promise = $.when($.post('', {
664		ajax: 1,
665		ajax_block_name: block_name,
666		p: $(this).data('page') || 1
667	}, "html"));
668	promise.done(function(respHtml) {
669		$('[data-event="partnerList"]').html($(respHtml).filter('[data-event="partnerList"]').html())
670	});
671});
672$(document).on('click', '[data-event="partnerPagerAppend"]', function(e) {
673	e.preventDefault();
674	var block_name = $(this).attr('data-block_name'),
675		page = $(this).data('next-page');
676	if (!block_name && !page) return false;
677	var promise = $.when($.post('', {
678		ajax: 1,
679		ajax_block_name: block_name,
680		p: page
681	}, "html"));
682	promise.done(function(respHtml) {
683		$('[data-event="partnerAppendRemove"]').remove();
684		$('[data-event="partnerAppendList"]').append($(respHtml).find('[data-event="partnerAppendList"]').html()).after($(respHtml).find('[data-event="partnerAppendRemove"]').get(0).outerHTML);
685	});
686});
687// Отзывы пагер theme_id/2
688$(document).on('click', '[data-event="answersPager"] button', function(e) {
689	e.preventDefault();
690	var block_name = $('[data-event="answersPager"]').attr('data-block_name');
691	if (!block_name) return false;
692	var promise = $.when($.post('', {
693		ajax: 1,
694		ajax_block_name: block_name,
695		theme_id: 2,
696		p: $(this).data('page') || 1
697	}, "html"));
698	promise.done(function(respHtml) {
699		$('[data-event="answersList"]').html($(respHtml).filter('[data-event="answersList"]').html());
700		calcAnswersText();
701		$('body,html').animate({
702			scrollTop: $('.breadcrumbs').offset().top + 14
703		}, 600);
704	});
705});
706$(document).on('click', '[data-event="answersPagerAppend"]', function(e) {
707	e.preventDefault();
708	var block_name = $(this).attr('data-block_name'),
709		page = $(this).data('next-page');
710	if (!block_name && !page) return false;
711	var promise = $.when($.post('', {
712		ajax: 1,
713		ajax_block_name: block_name,
714		theme_id: 2,
715		p: page
716	}, "html"));
717	promise.done(function(respHtml) {
718		$('[data-event="answersAppendRemove"]').remove();
719		$('[data-event="answersAppendList"]').append($(respHtml).find('[data-event="answersAppendList"]').html()).after($(respHtml).find('[data-event="answersAppendRemove"]').get(0).outerHTML);
720		calcAnswersText();
721	});
722});
723// ajax пагер и НОВОСТИ и СТАТЬИ
724$(document).on('click', '[data-event="articlesPager"] button', function(e) {
725	e.preventDefault();
726	var block_name = $('[data-event="articlesPager"]').attr('data-block_name');
727	if (!block_name) return false;
728	var catId = $(this).closest('[data-event="articlesList"]').data('cat');
729	var promise = $.when($.post('', {
730		ajax: 1,
731		ajax_block_name: block_name,
732		p: $(this).data('page') || 1
733	}, "html"));
734	promise.done(function(respHtml) {
735		if (catId) {
736			$('[data-event="articlesList"][data-cat="' + catId + '"]').html($(respHtml).filter('[data-event="articlesList"][data-cat="' + catId + '"]').html());
737			var positionTop = $('[data-event="articlesList"][data-cat="' + catId + '"]').offset().top.toFixed();
738			$('body,html').animate({
739				scrollTop: positionTop
740			}, 600);
741
742		} else {
743			$('[data-event="articlesList"]').html($(respHtml).filter('[data-event="articlesList"]').html());
744			var positionTop = $('[data-event="articlesList"]').offset().top.toFixed();
745			$('body,html').animate({
746				scrollTop: positionTop
747			}, 600);
748		}
749	});
750});
751$(document).on('click', '[data-event="articlesPagerAppend"]', function(e) {
752	e.preventDefault();
753	var block_name = $(this).attr('data-block_name'),
754		page = $(this).data('next-page');
755	if (!block_name && !page) return false;
756	var catId = $(this).closest('[data-event="articlesList"]').data('cat');
757	var promise = $.when($.post('', {
758		ajax: 1,
759		ajax_block_name: block_name,
760		p: page
761	}, "html"));
762	promise.done(function(respHtml) {
763		if (catId) {
764			$('[data-event="articlesAppendRemove"][data-cat="' + catId + '"]').remove();
765			$('[data-event="articlesAppendList"][data-cat="' + catId + '"]').append($(respHtml).find('[data-event="articlesAppendList"][data-cat="' + catId + '"]').html()).after($(respHtml).find('[data-event="articlesAppendRemove"][data-cat="' + catId + '"]').get(0).outerHTML);
766		} else {
767			$('[data-event="articlesAppendRemove"]').remove();
768			$('[data-event="articlesAppendList"]').append($(respHtml).find('[data-event="articlesAppendList"]').html()).after($(respHtml).find('[data-event="articlesAppendRemove"]').get(0).outerHTML);
769		}
770	});
771});
772// Карт. товара питомники вкладки
773if (window.snomPitomnik && window.snomPitomnik.length) {
774	var tabWrap = $('[data-event="nomSiblingsTabs"]'),
775		siblTarget = $('[data-event="nomSiblings"]').children();
776	$.each(window.snomPitomnik, function(i, item) {
777		var
778			dataPar = $.map(item, function(val, key) {
779				return [val, key]
780			}),
781			tab = $('<button/>', {
782				class: 'btn siblings-tab-item',
783				text: dataPar[0],
784				type: 'button',
785				on: {
786					click: function(e) {
787						var pit = $(this).attr('data-tab') || '';
788						if (pit == 'ALL') pit = '';
789						$(this).siblings().removeClass('is-active');
790						$(this).addClass('is-active');
791						siblTarget.hide().removeClass('is-odd');
792						if (pit) siblTarget.filter('[data-snom-pitomnik="' + pit + '"]').show();
793						else siblTarget.show();
794						siblTarget.filter(function() {
795							return $(this).css("display") != "none"
796						}).each(function(i) {
797							$(this).toggleClass('is-even', i % 2 ? false : true);
798						});
799					}
800				}
801			}).attr({
802				'data-tab': dataPar[1]
803			});
804		if (dataPar[1] == 'ALL') tab.addClass('is-active');
805		tabWrap.append(tab);
806	});
807}
808
809
810try {
811	$('[data-event="answersslickDef"]').slick({
812		dots: false,
813		infinite: false,
814		arrows: true,
815		prevArrow: '<div class="slick-prev"><svg class="svg" viewBox="0 0 64 64"><path d="M 20.9,32 43.1,19.2 v 25.6 z" /></svg></div>',
816		nextArrow: '<div class="slick-next"><svg class="svg" viewBox="0 0 64 64"><path d="M 43.1,32 20.9,19.2 v 25.6 z" /></svg></div>',
817		slidesToShow: 4,
818		slidesToScroll: 1,
819		speed: 300,
820		responsive: [
821			{
822				breakpoint: 993,
823				settings: {
824					slidesToShow: 3,
825					slidesToScroll: 1,
826					infinite: false
827				}
828			},
829			{
830				breakpoint: 769,
831				settings: {
832					slidesToShow: 2,
833					slidesToScroll: 1,
834					infinite: false
835				}
836			},
837			{
838				breakpoint: 500,
839				settings: {
840					slidesToShow: 1,
841					slidesToScroll: 1,
842					infinite: false
843				}
844			},
845		]
846	});
847} catch (error) {
848	console.log(error);
849}
850
851// Настройка каруселей 
852try {
853	$('[data-event="slider-lk"]').slick({
854		dots: false,
855		infinite: false,
856		speed: 300,
857		prevArrow: '<div class="slick-prev"><svg class="svg" viewBox="0 0 64 64"><path d="M 20.9,32 43.1,19.2 v 25.6 z" /></svg></div>',
858		nextArrow: '<div class="slick-next"><svg class="svg" viewBox="0 0 64 64"><path d="M 43.1,32 20.9,19.2 v 25.6 z" /></svg></div>',
859		slidesToShow: 4,
860		slidesToScroll: 1,
861		responsive: [
862			{
863				breakpoint: 992,
864				settings: {
865					slidesToShow: 3,
866					slidesToScroll: 1,
867					infinite: false
868				}
869			},
870			{
871				breakpoint: 769,
872				settings: {
873					slidesToShow: 2,
874					slidesToScroll: 1,
875					infinite: false
876				}
877			},
878			{
879				breakpoint: 577,
880				settings: {
881					slidesToShow: 1,
882					slidesToScroll: 1,
883					infinite: false
884				}
885			}
886		]
887	});
888	$('[data-event="slickDef"]').slick({
889		dots: false,
890		infinite: false,
891		speed: 300,
892		prevArrow: '<div class="slick-prev"><svg class="svg" viewBox="0 0 64 64"><path d="M 20.9,32 43.1,19.2 v 25.6 z" /></svg></div>',
893		nextArrow: '<div class="slick-next"><svg class="svg" viewBox="0 0 64 64"><path d="M 43.1,32 20.9,19.2 v 25.6 z" /></svg></div>',
894		slidesToShow: 4,
895		slidesToScroll: 4,
896		responsive: [
897			{
898				breakpoint: 992,
899				settings: {
900					slidesToShow: 3,
901					slidesToScroll: 3,
902					infinite: false
903				}
904			},
905			{
906				breakpoint: 769,
907				settings: {
908					slidesToShow: 2,
909					slidesToScroll: 2,
910					infinite: false
911				}
912			},
913			{
914				breakpoint: 577,
915				settings: {
916					slidesToShow: 1,
917					slidesToScroll: 1,
918					infinite: false
919				}
920			}
921		]
922	});
923	$('[data-event="slickDef4"]').slick({
924		dots: false,
925		infinite: false,
926		speed: 300,
927		prevArrow: '<div class="slick-prev"><svg class="svg" viewBox="0 0 64 64"><path d="M 20.9,32 43.1,19.2 v 25.6 z" /></svg></div>',
928		nextArrow: '<div class="slick-next"><svg class="svg" viewBox="0 0 64 64"><path d="M 43.1,32 20.9,19.2 v 25.6 z" /></svg></div>',
929		slidesToShow: 4,
930		slidesToScroll: 4,
931		responsive: [{
932				breakpoint: 992,
933				settings: {
934					slidesToShow: 3,
935					slidesToScroll: 3,
936					infinite: false
937				}
938			},
939			{
940				breakpoint: 600,
941				settings: {
942					slidesToShow: 2,
943					slidesToScroll: 2,
944					infinite: false
945				}
946			}
947		]
948	});
949	$('[data-event="slickDef6"]').slick({
950		dots: false,
951		infinite: false,
952		speed: 300,
953		prevArrow: '<div class="slick-prev"><svg class="svg" viewBox="0 0 64 64"><path d="M 20.9,32 43.1,19.2 v 25.6 z" /></svg></div>',
954		nextArrow: '<div class="slick-next"><svg class="svg" viewBox="0 0 64 64"><path d="M 43.1,32 20.9,19.2 v 25.6 z" /></svg></div>',
955		slidesToShow: 6,
956		slidesToScroll: 6,
957		responsive: [{
958				breakpoint: 992,
959				settings: {
960					slidesToShow: 4,
961					slidesToScroll: 4
962				}
963			},
964			{
965				breakpoint: 600,
966				settings: {
967					slidesToShow: 2,
968					slidesToScroll: 2
969				}
970			}
971		]
972	});
973	$('[data-event="slickBig"]').slick({
974		slidesToShow: 1,
975		slidesToScroll: 1,
976		lazyLoad: 'ondemand',
977		arrows: false,
978		fade: true,
979		//adaptiveHeight: true,
980		asNavFor: '[data-event="slickBigRel"]'
981	});
982	$('[data-event="slickBigRel"]').slick({
983		slidesToShow: 5,
984		slidesToScroll: 1,
985		lazyLoad: 'ondemand',
986		asNavFor: '[data-event="slickBig"]',
987		prevArrow: '<div class="slick-prev"><svg class="svg" viewBox="0 0 64 64"><path d="M 20.9,32 43.1,19.2 v 25.6 z" /></svg></div>',
988		nextArrow: '<div class="slick-next"><svg class="svg" viewBox="0 0 64 64"><path d="M 43.1,32 20.9,19.2 v 25.6 z" /></svg></div>',
989		dots: false,
990		focusOnSelect: true
991	});
992	$('[data-event="slick-wide"]').slick({
993		dots: true,
994		infinite: true,
995		speed: 500,
996		prevArrow: '<div class="slick-prev"><svg class="svg" viewBox="0 0 64 64"><path d="M 20.9,32 43.1,19.2 v 25.6 z" /></svg></div>',
997		nextArrow: '<div class="slick-next"><svg class="svg" viewBox="0 0 64 64"><path d="M 43.1,32 20.9,19.2 v 25.6 z" /></svg></div>',
998		fade: true,
999		dots: false,
1000		cssEase: 'linear'
1001	});
1002	$('[data-event="nom-imgs-a-webinar"]').slick({
1003		infinite: false,
1004		slidesToShow: 1,
1005		slidesToScroll: 1,
1006		arrows: false,
1007		fade: true,
1008		asNavFor: '[data-event="nom-imgs-b"]',
1009		responsive: [{
1010				breakpoint: 768,
1011				settings: {
1012					arrows: true,
1013					asNavFor: false,
1014					prevArrow: '<div class="slick-prev"><img src="/img/design/back_arrow.png"></div>',
1015					nextArrow: '<div class="slick-next"><img src="/img/design/back_arrow.png"></div>',
1016				}
1017			}
1018		]
1019	});
1020	$('[data-event="nom-imgs-a"]').slick({
1021		infinite: false,
1022		slidesToShow: 1,
1023		slidesToScroll: 1,
1024		arrows: false,
1025		fade: true,
1026		asNavFor: '[data-event="nom-imgs-b"]'
1027	});
1028	$('[data-event="nom-imgs-b"]').slick({
1029		vertical: true,
1030		verticalSwiping: true,
1031		infinite: false,
1032		slidesToShow: 5,
1033		slidesToScroll: 1,
1034		prevArrow: '<div class="slick-prev"><svg class="svg" viewBox="5 5 54 54"><path d="M 32,20.9 19.2,43.1 h 25.6 z" /></svg></div>',
1035		nextArrow: '<div class="slick-next"><svg class="svg" viewBox="5 5 54 54"><path d="M32 43.1L19.2 20.9h25.6L32 43.1z" /></svg></div>',
1036		asNavFor: '[data-event="nom-imgs-a"]',
1037		focusOnSelect: true,
1038		responsive: [{
1039				breakpoint: 769,
1040				settings: {
1041					slidesToShow: 5,
1042					slidesToScroll: 1,
1043					vertical: false,
1044					verticalSwiping: false
1045				}
1046			},
1047			{
1048				breakpoint: 640,
1049				settings: {
1050					slidesToShow: 4,
1051					slidesToScroll: 1,
1052					vertical: false,
1053					verticalSwiping: false
1054				}
1055			}
1056		]
1057	});
1058	$('[data-event="nom-imgs-master"]').slick({
1059		infinite: false,
1060		slidesToShow: 1,
1061		slidesToScroll: 1,
1062		arrows: false,
1063		fade: true,
1064		asNavFor: '[data-event="nom-imgs-slave"]'
1065	});
1066	$('[data-event="nom-imgs-slave"]').slick({
1067		infinite: false,
1068		slidesToShow: 5,
1069		slidesToScroll: 1,
1070		prevArrow: '<div class="slick-prev"><svg class="svg" viewBox="0 0 64 64"><path d="M 20.9,32 43.1,19.2 v 25.6 z" /></svg></div>',
1071		nextArrow: '<div class="slick-next"><svg class="svg" viewBox="0 0 64 64"><path d="M 43.1,32 20.9,19.2 v 25.6 z" /></svg></div>',
1072		asNavFor: '[data-event="nom-imgs-master"]',
1073		focusOnSelect: true,
1074		responsive: [{
1075			breakpoint: 640,
1076			settings: {
1077				slidesToShow: 4,
1078				slidesToScroll: 1
1079			}
1080		}]
1081	});
1082}catch(e){console.warn(e)}
1083
1084// fancybox
1085$('[data-fancybox]').fancybox({
1086	closeExisting: true,
1087	buttons: [
1088		"fullScreen",
1089		"close"
1090	],
1091});
1092// #94893.22 дела шли хорошо, но неизвестно куда
1093var doAnswersCalc = $('[data-event="wrapTextCalc"]').length || 0,
1094	calcAnswersTimer;
1095if (doAnswersCalc) calcAnswersText();
1096window.onresize = function() {
1097	if (doAnswersCalc) {
1098		clearTimeout(calcAnswersTimer);
1099		calcAnswersTimer = setTimeout(calcAnswersText, 200)
1100	}
1101}
1102$(document).on('click', '[data-event="modalAnswerView"]', function(e) {
1103	e.preventDefault();
1104	if ($('[data-remodal-id="modalAnswerView"]').length == 0) {
1105		$('body').append(
1106			'<div class="remodal" data-remodal-id="modalAnswerView">' +
1107			'<button data-remodal-action="close" class="btn is-btn-transp remodal-close"><svg class="svg"><use xlink:href="#i-close"></use></svg></button>' +
1108			'<div class="modalAnswerView"></div>' +
1109			'</div>'
1110		);
1111	}
1112	var
1113		$modalContent = $modalContent || $('.modalAnswerView'),
1114		$remodalNotify = $('[data-remodal-id="modalAnswerView"]').remodal({
1115			hashTracking: false
1116		}),
1117		remodalNotifyState = $remodalNotify.getState(),
1118		$htmlAdd = $('[data-remodal-ob="' + $(this).attr('data-link') + '"]').clone();
1119	$htmlAdd.children('.answer-body').removeAttr('style');
1120	$htmlAdd.children('[data-event="modalAnswerView"]').remove();
1121	if (remodalNotifyState == 'closed' || remodalNotifyState == 'closing') $remodalNotify.open();
1122	$modalContent.html($htmlAdd.html());
1123});
1124
1125function choosePrice() {
1126	var dep = $('#depSel').val() || '',
1127		cat = $('#catSel').val() || '',
1128		pitomnik_name = {
1129			'Подмосковное отд': '_m',
1130			'Тульское отд': '_t',
1131			'Белгородское отд': '_b',
1132			'Единый прайс': '_tb'
1133		};
1134	if (dep) {
1135		$('#catSel option[data-price-avail]').prop('disabled', true);
1136		$('#catSel option[data-price-avail' + pitomnik_name[dep] + ']').prop('disabled', false);
1137	}
1138	if (!dep || !cat) {
1139		$('#getPriceLink').attr('href', '#').addClass('is-disabled');
1140	} else {
1141		cat = ' - ' + cat;
1142		if (cat == ' - #') cat = '';
1143		$('#getPriceLink').attr('href', '/prices/Прайс Питомника Савватеевых - ' + dep + cat + '.xls').removeClass('is-disabled');
1144		$('#vk_goal_price').click(function() {
1145			try {
1146				VK.Goal('submit_application');
1147			} catch (error) {
1148				console.log(error);
1149			}
1150		});
1151	}
1152}
1153
1154function cloneFooterMenu() {
1155	if ($('[data-function="mobileFooterNav"]').length && $('[data-function="footerMenu"]').length) {
1156		$('[data-function="footerMenu"] .footer-nav-link.is-top').each(function() {
1157			var $this = $(this);
1158			if ($this.text().indexOf('Контакты') == -1) {
1159				$this.clone().appendTo('[data-function="mobileFooterNav"]');
1160			}
1161		});
1162		$('.mobile-footer-nav .footer-nav-link.is-top:contains("О питомнике")').appendTo('.mobile-footer-nav');
1163		$('.mobile-footer-nav .footer-nav-link.is-top').wrap('<div class="mobile-footer-nav-item"></div>')
1164	}
1165}
1166
1167function findGetParameter(parameterName) {
1168    var result = null,
1169        tmp = [];
1170    location.search
1171        .substr(1)
1172        .split("&")
1173        .forEach(function (item) {
1174          tmp = item.split("=");
1175          if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
1176        });
1177    return result;
1178}
1179
1180function onLoadMail() {
1181	if (location.search.indexOf('create-mail') != -1) {
1182		var subject = findGetParameter('subject') || '',
1183			body = findGetParameter('body') || '',
1184			email = findGetParameter('mailto') || '';
1185
1186		if (!email) return false;	
1187		
1188		window.location.assign('mailto:' + email + '?subject=' + subject + '&body=' + body);
1189	}
1190}
1191
1192
1193$(document).on('change', '[data-event="selPrice"]', function() {
1194	choosePrice();
1195});
1196$(document).ready(function() {
1197	choosePrice();
1198	cloneFooterMenu();
1199	onLoadMail();
1200});
1201$(document).on('click', '#getPriceLink[href="#"]', function(e) {
1202	e.preventDefault()
1203});
1204// Кнопка наверх
1205function pageUpToggle() {
1206	if ($(this).scrollTop() >= 1000) $('.page-up').fadeIn();
1207	else $('.page-up').fadeOut(200);
1208}
1209$(document).on('click', '.page-up', function() {
1210	$('body,html').animate({
1211		scrollTop: 0
1212	}, 600);
1213});
1214$(window).on('scroll', pageUpToggle);
1215$(document).on('click', '[data-event="catLetterToggle"]', function() {
1216	$('.filter-beh-letter').toggleClass('is-show-all')
1217});
1218
1219$(document).on('click', '[data-event="changeCount"]', function() {
1220	var $this = $(this),
1221		type = $this.data('type'),
1222		$input = $this.parent().find('[data-event="nomCount"]'),
1223		val = Number($input.val()),
1224		step = Number($input.data('step'));
1225	
1226	if (type == 'plus') {
1227		$this.parent().find('[data-type="minus"]').prop('disabled', false);
1228		val += step;
1229	} else if (type == 'minus') {
1230		val -= step;
1231		if (val <= step) {
1232			val = step;
1233			$this.prop('disabled', true);
1234		}
1235	}
1236	
1237	$input.val(val);	
1238	return false;
1239});
1240
1241$(document).on('change', '[data-event="nomCount"]', function() {
1242	var $this = $(this),
1243		val = $this.val(),
1244		step = $this.data('step'),
1245		$minusBtn = $this.parent().find('[data-type="minus"]');
1246	
1247	if (val <= step || isNaN(val) || val % step > 0) {
1248		$this.val(step);
1249		$minusBtn.prop('disabled', true);
1250	} else {
1251		$minusBtn.prop('disabled', false);
1252	}
1253});
1254
1255
1256$(document).on('click', '.cozial > a', function() {
1257	try {
1258		VK.Goal('customize_product');
1259	} catch (error) {
1260		console.log(error);
1261	}
1262});
1263
1264$(document).on('click', 'a[href^="tel:"]', function() {
1265	try {
1266		VK.Goal('contact');
1267	} catch (error) {
1268		console.log(error);
1269	}
1270});
1271
1272function replaceSearch() {
1273	var $form = $('.search-form'),
1274		$mobileBlock = $('[data-function="staticSearchBlock"]');
1275	if ($mobileBlock.length && $form.length) {
1276		if ($mobileBlock.is(':visible') && !$mobileBlock.find($form).length) {
1277			$form.appendTo($mobileBlock);
1278		} else if (!$mobileBlock.is(':visible') && $mobileBlock.find($form).length) {
1279			$form.insertAfter('.nav-prop.is-top');
1280		}
1281	}
1282}
1283
1284replaceSearch();
1285
1286$(window).resize(function() {
1287	replaceSearch();
1288});
1289
1290function toggleText(value, textA, textB) {
1291	if (value == textA) {
1292		return textB;
1293	} else {
1294		return textA;
1295	}
1296}
1297
1298$(document).on('click', '[data-function="toggleTreeItems"]', function() {
1299	var $this = $(this);
1300	$this.closest('.tree-grow').toggleClass('is-active');
1301	$this.text(toggleText($this.text(), 'Показать все', 'Свернуть'));
1302	return false;
1303});
1304
1305function checkWebinar() {
1306	$('input[data-nom-inbasket]').each(function(count) {
1307		var nomsBsk = $(this).data('nom-inbasket');
1308		$('input[data-nom-basket]').each(function() {
1309			var nomID = $(this).data('nom-basket');
1310			if (nomsBsk == nomID) {
1311				$(this).next().replaceWith('<a href="/basket/index.html" class="btn is-btn-orange" title="Уже в корзине">Уже в корзине</a>');
1312			}
1313		});
1314	});
1315}
1316
1317$(document).ready(function() {
1318	checkWebinar();
1319});
1320
1321
1322// Top.Mail.Ru counter
1323$(document).on('click', '[data-pixel-click]', function() {
1324	var pixelTarget = $(this).data('pixel-click');
1325	try {
1326		_tmr.push({ type: 'reachGoal', id: 3306206, goal: pixelTarget});
1327	} catch (err) {console.log(err)}
1328});
1329
1330$(document).on('submit', '[data-pixel-submit]', function() {
1331	var pixelTarget = $(this).data('pixel-submit');
1332	try {
1333		_tmr.push({ type: 'reachGoal', id: 3306206, goal: pixelTarget});
1334	} catch (err) {console.log(err)}
1335});
1336
1337// YM
1338$(document).on('click', '[data-yandex-click]', function() {
1339	var yandexTarget = $(this).data('yandex-click');
1340	try {
1341		ym(15244201,'reachGoal', yandexTarget);
1342	} catch (err) {console.log(err)}
1343});
1344
1345$(document).on('submit', '[data-yandex-submit]', function() {
1346	var yandexTarget = $(this).data('yandex-submit');
1347	try {
1348		ym(15244201,'reachGoal', yandexTarget);
1349	} catch (err) {console.log(err)}
1350});
1351
1352$(document).on('click', '[data-onclick-redirect]', function(e) {
1353	var $this = $(this);
1354	if ($(window).width() > 993 || !$this.hasClass('is-grow')) {
1355		location.href = $this.data('onclick-redirect');
1356	}
1357});
1358
1359$(function () {
1360	const cookieAcept = localStorage.getItem('cookie');
1361	if (!cookieAcept) {
1362		let createModal = `
1363		<div class="cookie">
1364			<div class="cookie-title">Используем Cookies</div>
1365			<div class="cookie-desc">Наш сайт использует cookie. Продолжая им пользоваться, вы соглашаетесь на <a href="#" onclick="window.location='/soglasie-na-obrabotku-failov-cookie
1365s.html'">обработку файлов cookie</a> в соответствии с <a href="#" onclick="window.location='/confidential.html'">Политикой конфиденциальности</a></div>
1366			<button type="button" class="cookie-btn">Согласен</button>
1367		</div>`;
1368		$('body').append(createModal);
1369		setTimeout(() => {
1370			$('.cookie').animate({
1371				opacity: 1,
1372				left: "10px"
1373			}, 1500, function () {
1374				$(this).css({
1375					pointerEvents: "all",
1376				});
1377			});
1378		}, 1000);
1379	}
1380});
1381
1382$(document).on('click', '.cookie-btn', function () {
1383	localStorage.setItem('cookie', 'acept');
1384	$('.cookie').animate({
1385		opacity: 0,
1386		left: "-100%"
1387	}, 700);
1388});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.