PageSourceSearch

https://horoshie-kraski.ru/bitrix/templates/dresscode/js/system.js

js horoshie-kraski.ru collected 2026-10-07 16:45:08 UTC 69,793 bytes, 2,399 lines download raw bytes

1var timeOutID;
2var intervalID;
3var flushTimeout;
4var lastAddCartText;
5var skuLoading = false;
6var fastBuyOpen = false;
7var fastViewOpen = false;
8var fastViewStoresOpen = false;
9var priceVariantOpen = false;
10var requestPriceOpen = false;
11var specialBlockMoved = false;
12var basketProductsNow = false;
13var oSkuDropdownOpened = false;
14var dropDownListOpened = false;
15
16var loadingPictureControl = function(imagePath, callBack){
17
18    if(typeof imagePath != "undefined" && imagePath != ""){
19
20        var newImage = new Image();
21        newImage.src = imagePath;
22
23		$(newImage).one("load", callBack).each(function(){
24			if(this.complete){
25				$(this).load();
26			}
27		});
28
29    }
30
31};
32
33var checkLazyItems = function(){
34	var $lazyItems = $(".lazy");
35	$.each($lazyItems, function(){
36		var $item = $(this);
37		var lazyPath = $item.data("lazy");
38		if(typeof lazyPath != "undefined" && lazyPath !=""){
39			loadingPictureControl(lazyPath, function(){
40				$item.attr("src", lazyPath);
41			});
42		}
43
44	});
45}
46
47var changeAddCartButton = function(jsonData){
48
49	//search addCart buttons
50	if(typeof jsonData["CATEGORIES"] != "undefined"){
51		if(typeof jsonData["CATEGORIES"]["READY"] != "undefined"){
52
53			//each basket elements
54			$.each(jsonData["CATEGORIES"]["READY"], function(index, nextElement){
55				if(typeof nextElement["PRODUCT_ID"] != "undefined"){
56					var $currentButton = $('.addCart[data-id="' + nextElement["PRODUCT_ID"] + '"]');
57					if(typeof $currentButton != "undefined"){
58						$currentButton.each(function(ii, nextButton){
59							updateAddCartButton($(nextButton));
60						});
61					}
62				}
63			});
64
65			//save current values
66			basketProductsNow = jsonData;
67
68		}
69	}
70
71};
72
73var updateAddCartButton = function($currentElement){
74	var $imageAfterLoad = $currentElement.find("img");
75	$currentElement.text(LANG["ADDED_CART_SMALL"])
76		.attr("href", SITE_DIR + "personal/cart/")
77		.prepend($imageAfterLoad.attr("src", TEMPLATE_PATH + "/images/added.png"))
78		.addClass("added");
79};
80
81var cartReload = function(){
82
83	if(typeof(window.topCartTemplate) == "undefined"){
84		window.topCartTemplate = "topCart";
85	}
86
87	if(typeof(window.wishListTemplate) == "undefined"){
88		window.wishListTemplate = ".default";
89	}
90
91	if(typeof(window.compareTemplate) == "undefined"){
92		window.compareTemplate = ".default";
93	}
94
95	$.get(ajaxPath + "?act=flushCart&topCartTemplate=" + window.topCartTemplate + "&wishListTemplate=" + window.wishListTemplate + "&compareTemplate=" + window.compareTemplate, function(data){
96
97		var $items = $(data).find(".dl");
98
99		$("#flushTopCart").html($items.eq(0).html());
100		$("#flushFooterCart").html($items.eq(1).html());
101		$("#flushTopwishlist").html($items.eq(2).html());
102		$("#flushTopCompare").html($items.eq(3).html());
103
104	});
105}
106
107$(function(){
108
109	$(".questions-answers-list .question").click(function(){
110		var par = $(this).parents(".question-answer-wrap");
111		par.toggleClass("active").find(".answer").slideToggle();
112	});
113
114	$(".banner-animated").addClass("banner-image-load");
115
116	// open tabs
117	$(".tab-link").click(function(){
118		if ( !$(this).hasClass("active") ) {
119			var par = $(this).parents(".tabs-wrap");
120			var index = $(this).index();
121
122			$(this).addClass('active').siblings().removeClass("active");
123			$('.tab-content:eq(' + index + ')', par).addClass("active").siblings().removeClass("active");
124		}
125	});
126
127	// call the modal window on the feedback block
128	$(".consultation-btn").click(function(){
129		$(".callBack").click();
130	});
131
132	if($("#footerTabs .tab").size() == 0){
133		$("#footerTabs, #footerTabsCaption").remove();
134	}else{
135		$("#footerTabsCaption .item").eq(0).find("a").addClass("selected");
136		$("#footerTabs .tab").eq(0).addClass("selected");
137	}
138
139	if($("#infoTabs .tab").size() == 0){
140		$("#infoTabs, #infoTabsCaption").remove();
141	}else{
142		$("#infoTabsCaption .item").eq(0).find("a").addClass("selected");
143		$("#infoTabs .tab").eq(0).addClass("selected");
144	}
145
146	var $upButton = $("#upButton");
147
148	$(window).on("ready scroll", function(event){
149		var curScrollValueY = (event.currentTarget.scrollY) ? event.currentTarget.scrollY : $(window).scrollTop()
150		if(curScrollValueY > 0){
151			$upButton.addClass("enb");
152		}else{
153			$upButton.removeClass("enb");
154		}
155
156	});
157
158	$upButton.on("click", function(event){
159
160		$("html,body").animate({
161			scrollTop: 0
162		}, 250);
163
164		return event.preventDefault();
165
166	});
167
168});
169
170$(window).on("ready", function(event){
171
172	//vars
173	var $topMenuContainer = $("#mainMenuContainer");
174	var $mainMenuStaticContainer = $("#mainMenuStaticContainer");
175	var $body = $("body").removeClass("loading"); // cache body
176	var $window = $(window);
177
178	if($("div").is(".global-block-container") && $("div").is(".global-information-block") && $("div").is(".global-information-block-cn")){
179
180		//disable fixed menu
181		_topMenuNoFixed = true;
182
183		//vars
184		var $globalBlockContainer = $body.find(".global-block-container");
185		var $globalInformationBlock = $globalBlockContainer.find(".global-information-block");
186		var $globalInformationBlockCntr = $globalInformationBlock.find(".global-information-block-cn");
187
188		//set height
189		$globalBlockContainer.css("min-height", $globalInformationBlock.height());
190
191		if(!$globalInformationBlock.hasClass("no-fixed")){
192			var informBlockOffset = $globalInformationBlock.offset();
193			var maxScrollHeight = $globalBlockContainer.height() + informBlockOffset.top - ($globalInformationBlockCntr.height() + 24); //24 padding top
194		}
195
196		var gbScrollCtr = function(event){
197
198			var $this = $(this);
199			var currentScrollValue = $this.scrollTop();
200
201			if(currentScrollValue >= informBlockOffset.top){
202				if(currentScrollValue >= maxScrollHeight){
203					$globalInformationBlock.addClass("max-scroll");
204				}else{
205					$globalInformationBlock.removeClass("max-scroll");
206				}
207				$globalInformationBlock.addClass("fixed");
208			}else{
209				$globalInformationBlock.removeClass("fixed");
210			}
211
212		};
213
214		var reCalcGbParams = function(){
215			informBlockOffset = $globalInformationBlock.offset();
216			maxScrollHeight = $globalBlockContainer.height() + informBlockOffset.top - ($globalInformationBlockCntr.height() + 24); //24 padding top
217		}
218
219		$(window).on("scroll", gbScrollCtr);
220		$(window).on("resize", reCalcGbParams);
221
222	}
223
224	var moveBlockToContainer = function(blockID, moveBlockID){
225
226		//set j vars
227		var $blockID = $(blockID);
228		var $moveBlockID = $(moveBlockID);
229
230		//move
231		$moveBlockID.append($blockID);
232
233		//set global flag var
234		return specialBlockMoved = true;
235
236	};
237
238	var setSpecialBlockPosition = function(){
239
240		if($("div").is("#specialBlock")){
241			if($(window).width() <= 1850){
242				moveBlockToContainer("#specialBlock", "#specialBlockMoveContainer");
243			}else if(specialBlockMoved === true && $(window).width() > 1600){
244				moveBlockToContainer("#specialBlock", "#promoBlock");
245			}
246		}
247	};
248
249	//start form load
250	setSpecialBlockPosition();
251
252	//resize events
253	$(window).on("resize", setSpecialBlockPosition);
254
255	var getRequestPrice = function(event){
256
257		var $this = $(this);
258		var $requestPrice = $("#requestPrice");
259		var $foundation = $("#foundation").addClass("blurred");
260
261		$("#requestPrice, #requestPrice .requstProductContainer").show();
262		$("#requestPriceResult").hide();
263
264		//clear form
265		$("#requestPriceForm").find('input[type="text"], textarea').val("");
266		$requestPrice.find(".requestPricePicture").attr("src", $requestPrice.data("load"));
267
268		var productID = $this.data("id");
269
270		$this.addClass("loading");
271
272		var gObj = {
273			id: productID,
274			act: "getRequestPrice"
275		};
276
277		$.getJSON(ajaxPath, gObj).done(function(jData){
278
279			$this.removeClass("loading");
280			$requestPrice.find(".requestPriceUrl").attr("href", jData["PRODUCT"]["DETAIL_PAGE_URL"]);
281			$requestPrice.find(".productNameBlock .middle").html(jData["PRODUCT"]["NAME"]);
282			$requestPrice.find("#requestPriceProductID").val(jData["PRODUCT"]["ID"]);
283			$requestPrice.find(".markerContainer").remove();
284
285			if(jData["PRODUCT"]["MARKER"] != undefined){
286
287				$requestPrice.find("#fastBuyPicture").prepend(
288					$("<div>").addClass("markerContainer")
289						.append(
290							jData["PRODUCT"]["MARKER"]
291						)
292
293				);
294			}
295
296			$requestPrice.show();
297
298			loadingPictureControl(jData["PRODUCT"]["PICTURE"]["src"], function(){
299				$requestPrice.find(".requestPricePicture").attr("src", jData["PRODUCT"]["PICTURE"]["src"]);
300			});
301
302			requestPriceOpen = true;
303
304		}).fail(function(jqxhr, textStatus, error){
305
306			$.get(ajaxPath, gObj).done(function(Data){
307				console.log(Data)
308			});
309
310			$this.removeClass("loading")
311						.addClass("error");
312
313		    console.error(
314		    	"Request Failed: " + textStatus + ", " + error
315		    );
316
317		});
318
319		return event.preventDefault();
320	};
321
322	var sendRequestPrice = function(event){
323
324		var $this = $(this).addClass("loading");
325		var $requestPriceForm = $("#requestPriceForm");
326		var $requestPriceFormTelephone = $requestPriceForm.find("#requestPriceFormTelephone").removeClass("error");
327
328		if($requestPriceFormTelephone.val() == ""){
329			$requestPriceFormTelephone.addClass("error");
330		}
331
332		var $personalInfo = $requestPriceForm.find("#personalInfoRequest");
333		if(!$personalInfo.prop("checked")){
334			$personalInfo.addClass("error");
335		}
336
337		if($requestPriceFormTelephone.val() !="" && $personalInfo.prop("checked")){
338
339			$.getJSON(ajaxPath + "?" + $requestPriceForm.serialize()).done(function(jData){
340
341				$("#requestPriceResultTitle").html(jData["heading"]);
342				$("#requestPriceResultMessage").html(jData["message"]);
343
344				$("#requestPrice .requstProductContainer").hide();
345				$("#requestPriceResult").show();
346
347				$this.removeClass("loading");
348
349			}).fail(function(jqxhr, textStatus, error){
350
351				$this.removeClass("loading").addClass("error");
352
353			    console.error(
354			    	"Request Failed: " + textStatus + ", " + error
355			    );
356
357			});
358
359		}else{
360			$this.removeClass("loading");
361		}
362
363		return event.preventDefault();
364	};
365
366
367	var closeRequestPrice = function(event){
368		var $appFastBuy = $("#requestPrice").hide();
369		var $foundation = $("#foundation").removeClass("blurred");
370		requestPriceOpen = false;
371		return event.preventDefault();
372	};
373
374	var getFastView = function(event){
375
376		var $this = $(this).addClass("loading");
377		var $productContainer = $this.parents(".item");
378		var productID = $this.data("id");
379		var productIblockID = $productContainer.data("product-iblock-id");
380
381		if(productID){
382			$.ajax({
383				url: ajaxPath + "?act=getFastView&product_id=" + productID + "&product_iblock_id=" + productIblockID + "&product_currency_id=" + $productContainer.data("currency-id") + "&product_convert_currency=" + $productContainer.data("convert-currency") + "&product_price_code=" + $productContainer.data("price-code") + "&product_hide_measures=" + $productContainer.data("hide-measure") + "&product_hide_not_available=" + $productContainer.data("hide-not-available"),
384				success: function(http){
385
386					//clear carousel cache vars
387					delete fastViewInitPictureCarousel;
388					delete fastViewInitPictureSlider;
389					delete initFastViewApp;
390					delete createFastView;
391
392					//remove fastview window
393					$("#appFastView").remove();
394
395					//append to body
396					$body.append(http);
397					$this.removeClass("loading");
398
399					//unbind last events
400					$(document).off("click", "#appFastView .appFastViewExit");
401					$(document).off("click", "#appFastView .appFastViewPictureCarouselItem");
402					$(document).off("click", "#appFastView .appFastViewPictureCarouselLeftButton");
403					$(document).off("click", "#appFastView .appFastViewPictureCarouselRightButton");
404					$(document).off("mousemove", "#appFastView .appFastViewPictureSliderItemLink");
405					$(document).off("mouseover", "#appFastView .appFastViewPictureSliderItemLink");
406					$(document).off("mouseleave", "#appFastView .appFastViewPictureSliderItemLink");
407
408					//start fastView scrips
409					initFastViewApp();
410					//reload addCart button
411					cartReload();
412					//subscribe button reload
413					subscribeOnline();
414
415				},
416				cache: false,
417				async: false
418			});
419			fastViewOpen = true;
420		}
421
422		return event.preventDefault();
423	}
424
425	var getStoresWindow = function(event){
426	
427		var $this = $(this).addClass("loading");
428		var productID = $this.data("id");
429
430		if(productID){
431			$.getJSON(ajaxPath + "?act=getAvailableWindow&product_id=" + productID, function(json){
432				if(typeof json["COMPONENT_DATA"] != "undefined"){
433					$("#fastViewStores").remove();
434					$body.append(json["COMPONENT_DATA"]);
435					$this.removeClass("loading");
436					fastViewStoresOpen = true;
437				}
438			});
439		}
440
441		return event.preventDefault();
442
443	};
444
445	var closeStoresWindow = function(event){
446		$("#fastViewStores").remove();
447		fastViewStoresOpen = false;
448		return event.preventDefault();
449	};
450
451	var getPricesWindow = function(event){
452
453		var $this = $(this).addClass("loading");
454		var $thisContainer = $this.parents(".item");
455		var productID = $this.data("id");
456
457		if(productID){
458			$.get(ajaxPath + "?act=getPricesWindow&product_id=" + productID + "&product_price_code=" + encodeURIComponent($thisContainer.data("price-code")) + "&product_currency=" + encodeURIComponent($thisContainer.data("currency")), function(http){
459
460				$("#appProductPriceVariant").remove();
461				$this.removeClass("loading");
462				$body.append(http);
463
464				var thisOffsetLeft = $this.offset().left;
465				var thisOffsetTop = $this.offset().top;
466
467				if(thisOffsetLeft + 320 > $(window).width()){
468					thisOffsetLeft = $(window).width() - 334;
469				}
470
471				if($this.data("fixed") == "Y"){
472					$("#appProductPriceVariant").css({
473						left: thisOffsetLeft,
474						top: thisOffsetTop - $(window).scrollTop(),
475						position: "fixed"
476					});
477				}else{
478					$("#appProductPriceVariant").css({
479						left: thisOffsetLeft,
480						top: thisOffsetTop
481					});
482				}
483				priceVariantOpen = true;
484			});
485		}
486
487		return event.preventDefault();
488
489	};
490
491	var closePricesWindow = function(event){
492		$("#appProductPriceVariant, .priceVariantStyles").remove();
493		priceVariantOpen = false;
494		return event.preventDefault();
495	};
496
497	var giftView = function($product, http){
498		var $namer = $product.find(".name");
499		var $nameMiddler = $namer.find(".middle");
500		var $elPicture = $product.find(".picture");
501		var $changeFastBack = $product.find(".fastBack").removeClass("disabled");
502
503		if($nameMiddler){
504			$namer.attr("href", http[0]["PRODUCT"]["DETAIL_PAGE_URL"]);
505			$nameMiddler.html(http[0]["PRODUCT"]["NAME"]);
506		}else{
507			$namer.attr("href", http[0]["PRODUCT"]["DETAIL_PAGE_URL"]).html(http[0]["PRODUCT"]["NAME"]);
508		}
509
510		$elPicture.attr("href", http[0]["PRODUCT"]["DETAIL_PAGE_URL"]);
511		$elPicture.html($("<img/>").attr("src", http[0]["PRODUCT"]["PICTURE"]));
512		$elPicture.append($("<span />", {class: "getFastView"}).data("id", http[0]["PRODUCT"]["ID"]).html(LANG["FAST_VIEW_PRODUCT_LABEL"]));
513
514		$product.find(".addCart, .fastBack, .addCompare").data("id", http[0]["PRODUCT"]["ID"]);
515
516		if(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
517			$product.find(".price").html(LANG["GIFT_PRICE_LABEL"] + " ").removeClass("getPricesWindow");
518			$product.find(".price").append(
519				$("<s/>").addClass("discount").html(
520					http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]
521				)
522			);
523		}else{
524			$product.find(".price").html(LANG["REQUEST_PRICE_LABEL"]).removeClass("getPricesWindow");
525		}
526
527		var $changeCart = $product.find(".addCart");
528
529		$changeCart.find("img").remove();
530		if(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
531			if($changeCart.hasClass("added")){
532				$changeCart.removeClass("disabled").removeClass("requestPrice")
533				.html($changeCart.data("cart-label"))
534				.prepend($("<img />").attr({src: TEMPLATE_PATH + "/images/added.png", class: "icon"}));
535			}else{
536				$changeCart.removeClass("disabled").removeClass("requestPrice")
537				.html($product.data("cart-label"))
538				.prepend($("<img />").attr({src: TEMPLATE_PATH + "/images/addGift.png", class: "icon"}))
539				.attr("href", "#");
540			}
541		}else{
542			$changeFastBack.addClass("disabled");
543			$changeCart.addClass("disabled").addClass("requestPrice")
544				.html(LANG["REQUEST_PRICE_BUTTON_LABEL"])
545				.prepend($("<img />").attr({src: TEMPLATE_PATH + "/images/request.svg", class: "icon"}))
546				.attr("href", "#");
547			http[0]["PRODUCT"]["CAN_BUY"] = "N";
548		}
549
550		if(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
551			if($product.data("hide-measure") != "Y" && http[0]["PRODUCT"]["MEASURE"] != undefined && http[0]["PRODUCT"]["MEASURE"]["SYMBOL_RUS"] != ""){
552				$product.find(".price").find(".discount").append(
553					$("<span/>").addClass("measure").html(
554						" / " + http[0]["PRODUCT"]["MEASURE"]["SYMBOL_RUS"] + " "
555					)
556				);
557			}
558		}
559
560		var $changeAvailable = $product.find(".changeAvailable");
561
562		$changeAvailable.removeClass("getStoresWindow");
563		$changeAvailable.removeClass("outOfStock");
564		$changeAvailable.removeClass("onOrder");
565		$changeAvailable.removeClass("inStock");
566		$changeAvailable.removeAttr("href");
567
568
569		if(http[0]["PRODUCT"]["CATALOG_QUANTITY"] > 0){
570			if(http[0]["PRODUCT"]["STORES_COUNT"] > 1){
571				$changeAvailable.html($("<span/>").html(LANG["CATALOG_AVAILABLE"])).addClass("inStock").attr("href", "#").addClass("getStoresWindow").data("id", http[0]["PRODUCT"]["ID"]);
572				$changeAvailable.prepend(
573					$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/inStock.png")
574				);
575			}else{
576				$changeAvailable.html(LANG["CATALOG_AVAILABLE"]).addClass("inStock");
577				$changeAvailable.prepend(
578					$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/inStock.png")
579				);
580			}
581		}else{
582			if(http[0]["PRODUCT"]["CAN_BUY"] != "Y"){
583				$changeAvailable.html(LANG["CATALOG_NO_AVAILABLE"]).addClass("outOfStock");
584				$changeFastBack.addClass("disabled");
585				$changeCart.addClass("disabled");
586				$changeAvailable.prepend(
587					$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/outOfStock.png")
588				);
589			}else{
590				$changeAvailable.html(LANG["CATALOG_ON_ORDER"]).addClass("onOrder");
591				$changeAvailable.prepend(
592					$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/onOrder.png")
593				);
594			}
595		}
596	};
597
598	var fastViewSku = function($product, http){
599		var $namer = $product.find(".appFastViewProductHeadingLink");
600		var $elPicture = $product.find(".picture");
601		var $changeFastBack = $product.find(".fastBack").removeClass("disabled");
602
603		$namer.attr("href", http[0]["PRODUCT"]["DETAIL_PAGE_URL"]).html(http[0]["PRODUCT"]["NAME"]);
604
605		$elPicture.attr("href", http[0]["PRODUCT"]["DETAIL_PAGE_URL"]);
606		$elPicture.html($("<img/>").attr("src", http[0]["PRODUCT"]["PICTURE"]));
607
608		$product.find(".addCart, .fastBack, .addCompare").data("id", http[0]["PRODUCT"]["ID"]).attr("data-id", http[0]["PRODUCT"]["ID"]);
609		if(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
610			$product.find(".price").html($("<span />", {class: "priceVal"}).html(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"] + " ")).removeClass("getPricesWindow");
611		}else{
612			$product.find(".price").html($("<span />", {class: "priceVal"}).html(LANG["REQUEST_PRICE_LABEL"])).removeClass("getPricesWindow").removeAttr("href");
613			http[0]["PRODUCT"]["CAN_BUY"] = "N";
614		}
615		if(http[0]["PRODUCT"]["RESULT_PROPERTIES"]){
616			$product.find(".changeProperties").html(http[0]["PRODUCT"]["RESULT_PROPERTIES"]);
617		}
618
619		var $changeCart = $product.find(".addCart").removeClass("subscribe unSub
619scribe");
620
621		$changeCart.find("img").remove();
622		if(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
623			$changeCart.removeClass("added").removeClass("disabled").removeClass("requestPrice")
624				.html(LANG["ADD_BASKET_DEFAULT_LABEL"])
625				.prepend($("<img />").attr({src: TEMPLATE_PATH + "/images/incart.svg", class: "icon"}))
626				.attr("href", "#");
627		}else{
628			$changeFastBack.addClass("disabled");
629			$changeCart.removeClass("added").addClass("disabled").addClass("requestPrice")
630				.html(LANG["REQUEST_PRICE_BUTTON_LABEL"])
631				.prepend($("<img />").attr({src: TEMPLATE_PATH + "/images/request.svg", class: "icon"}))
632				.attr("href", "#");
633		}
634
635		if(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
636			if($product.data("hide-measure") != "Y" && http[0]["PRODUCT"]["MEASURE"] != undefined && http[0]["PRODUCT"]["MEASURE"]["SYMBOL_RUS"] != ""){
637				$product.find(".price").append(
638					$("<span/>").addClass("measure").html(
639						" / " + http[0]["PRODUCT"]["MEASURE"]["SYMBOL_RUS"] + " "
640					)
641				);
642			}
643		}
644
645		if(http[0]["PRODUCT"]["PRICE"]["RESULT_PRICE"]["DISCOUNT"] > 0){
646			$product.find(".price").append(
647				$("<span/>").addClass("oldPriceLabel").html(CATALOG_LANG["FAST_VIEW_OLD_PRICE_LABEL"]).append(
648					$("<s/>").addClass("discount").html(
649						http[0]["PRODUCT"]["PRICE"]["RESULT_PRICE"]["BASE_PRICE"]
650					)
651				)
652			);
653		}
654
655		if(http[0]["PRODUCT"]["COUNT_PRICES"] > 1){
656			$product.find(".price").addClass("getPricesWindow").data("id", http[0]["PRODUCT"]["ID"]).prepend($("<span/>", {class: "priceIcon"})).attr("href", "#");
657		}else{
658			$product.find(".price").removeAttr("href").find(".priceIcon").remove();
659		}
660
661		var $changeAvailable = $product.find(".changeAvailable");
662
663		$changeAvailable.removeClass("getStoresWindow");
664		$changeAvailable.removeClass("outOfStock");
665		$changeAvailable.removeClass("onOrder");
666		$changeAvailable.removeClass("inStock");
667		$changeAvailable.removeAttr("href");
668
669
670		if(http[0]["PRODUCT"]["CATALOG_QUANTITY"] > 0){
671			if(http[0]["PRODUCT"]["STORES_COUNT"] > 1){
672				$changeAvailable.html($("<span/>").html(LANG["CATALOG_AVAILABLE"])).addClass("inStock").attr("href", "#").addClass("getStoresWindow").data("id", http[0]["PRODUCT"]["ID"]);
673				$changeAvailable.prepend(
674					$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/inStock.png")
675				);
676			}else{
677				$changeAvailable.html(LANG["CATALOG_AVAILABLE"]).addClass("inStock");
678				$changeAvailable.prepend(
679					$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/inStock.png")
680				);
681			}
682		}else{
683			if(http[0]["PRODUCT"]["CAN_BUY"] != "Y"){
684				$changeAvailable.html(LANG["CATALOG_NO_AVAILABLE"]).addClass("outOfStock");
685				$changeFastBack.addClass("disabled");
686
687				if(http[0]["PRODUCT"]["CATALOG_SUBSCRIBE"] == "Y" && http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
688					$changeCart.html(LANG["ADD_SUBSCRIBE_LABEL"])
689						.prepend($("<img />").attr({src: TEMPLATE_PATH + "/images/subscribe.svg", class: "icon"}))
690						.attr("href", "#").addClass("subscribe");
691				}
692
693				else{
694					$changeCart.addClass("disabled");
695				}
696
697				$changeAvailable.prepend(
698					$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/outOfStock.png")
699				);
700			}else{
701				$changeAvailable.html(LANG["CATALOG_ON_ORDER"]).addClass("onOrder");
702				$changeAvailable.prepend(
703					$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/onOrder.png")
704				);
705			}
706		}
707
708		//article
709
710		if(typeof(http[0]["PRODUCT"]["PROPERTIES"]["CML2_ARTICLE"]) != "undefined"){
711			if(typeof(http[0]["PRODUCT"]["PROPERTIES"]["CML2_ARTICLE"]["VALUE"]) != "undefined" && http[0]["PRODUCT"]["PROPERTIES"]["CML2_ARTICLE"]["VALUE"] !=""){
712				$product.find(".changeArticle").html(http[0]["PRODUCT"]["PROPERTIES"]["CML2_ARTICLE"]["VALUE"]).parents(".article").removeClass("hidden");
713			}else{
714				if($product.find(".changeArticle").data("first-value")){
715					$product.find(".changeArticle").html($product.find(".changeArticle").data("first-value"));
716				}else{
717					$product.find(".changeArticle").parents(".article").addClass("hidden");
718				}
719			}
720		}
721
722		//desc
723		var $productDescription = $product.find(".appFastViewDescription");
724		var $productDescriptionText = $productDescription.find(".appFastViewDescriptionText");
725		if(http[0]["PRODUCT"]["PREVIEW_TEXT"]){
726			$productDescription.addClass("visible");
727			$productDescriptionText.html(http[0]["PRODUCT"]["PREVIEW_TEXT"]);
728		}else{
729			$productDescription.removeClass("visible");
730		}
731
732
733		//QTY BOX
734
735		//get qty box ()
736		var $qtyBox = $product.find(".catalogQtyBlock .catalogQty");
737		$qtyBox.removeAttr("data-extended-price").removeData("extended-price");
738
739		//write values
740		$qtyBox.val(http[0]["PRODUCT"]["BASKET_STEP"]).data("max-quantity", http[0]["PRODUCT"]["CATALOG_QUANTITY"]).data("step", http[0]["PRODUCT"]["BASKET_STEP"]).removeClass("error");
741		$changeCart.data("quantity", http[0]["PRODUCT"]["BASKET_STEP"]);
742
743		if(typeof http[0]["PRODUCT"]["PRICE"]["EXTENDED_PRICES_JSON_DATA"] != "undefined"){
744			if(http[0]["PRODUCT"]["PRICE"]["EXTENDED_PRICES_JSON_DATA"] != ""){
745				$qtyBox.data("extended-price", http[0]["PRODUCT"]["PRICE"]["EXTENDED_PRICES_JSON_DATA"]);
746			}
747		}
748
749		if(http[0]["PRODUCT"]["CATALOG_QUANTITY_TRACE"] == "Y" && http[0]["PRODUCT"]["CATALOG_CAN_BUY_ZERO"] == "N"){
750			$qtyBox.data("enable-trace", "Y");
751		}else{
752			$qtyBox.data("enable-trace", "N");
753		}
754
755		if(http[0]["PRODUCT"]["IMAGES"]){
756			
757			var $appFastViewPictureSliderItems = $product.find(".appFastViewPictureSliderItems").css({left: 0});
758			var $appFastViewPictureCarouselItems = $product.find(".appFastViewPictureCarouselItems").css({left: 0});
759			
760			$appFastViewPictureSliderItems.empty();
761			$appFastViewPictureCarouselItems.empty();
762
763			$.each(http[0]["PRODUCT"]["IMAGES"], function(i, nextElement){
764				$appFastViewPictureSliderItems.append(
765					$("<div />", {class: "appFastViewPictureSliderItem"}).append(
766						$("<div />", {class: "appFastViewPictureSliderItemLayout"}).append(
767							$("<a />", {class: "appFastViewPictureSliderItemLink", href: http[0]["PRODUCT"]["DETAIL_PAGE_URL"]}).data("loupe-picture", nextElement["SUPER_LARGE_PICTURE"]["src"]).append(
768								$("<img />", {class: "appFastViewPictureSliderItemPicture", src: nextElement["LARGE_PICTURE"]["src"]})
769							)
770						)
771					)
772				);
773
774				$appFastViewPictureCarouselItems.append(
775					$("<div />", {class: "appFastViewPictureCarouselItem"}).append(
776						$("<a />", {class: "appFastViewPictureCarouselItemLink", href: "#"}).append(
777							$("<img />", {class: "appFastViewPictureCarouselItemPicture", src: nextElement["SMALL_PICTURE"]["src"]})
778						)
779					)
780				);
781
782			});
783
784			// //addCart button reload
785			// changeAddCartButton(basketProductsNow);
786			// //subscribe button reload
787			// subscribeOnline();
788
789			//sliders
790			fastViewInitPictureSlider();
791			fastViewInitPictureCarousel();
792
793		}
794	};
795
796	var selectSku = function(event){
797
798		if(skuLoading == true){
799			return false;
800		}
801
802		var _params = "";
803		var _props = "";
804		var _highload= "";
805		var _product_width = 200;
806		var _product_height = 180;
807
808		var $_this = $(this);
809		var $_mProductContainer = $_this.parents(".item");
810		var $_mProduct = $_this.parents(".sku");
811		var $_parentProp = $_this.parents(".skuProperty");
812		var $_propList = $_mProduct.find(".skuProperty");
813		var $_clickedProp = $_this.parents(".skuPropertyValue");
814
815		var _level = $_parentProp.data("level");
816
817		$_this.parents(".skuPropertyList").find("li").removeClass("selected");
818		$_clickedProp.addClass("selected loading");
819
820		skuLoading = true; //block
821
822		// set product image paramets
823		if($_mProduct.data("product-width") != undefined){
824			_product_width = $_mProduct.data("product-width");
825		}
826
827		if($_mProduct.data("product-height") != undefined){
828			_product_height = $_mProduct.data("product-height");
829		}
830
831		$_propList.each(function(i, prop){
832
833			var $_nextProp  = $(prop);
834			var $_nextPropList = $_nextProp.find("li");
835
836			var propName = $_nextProp.data("name");
837			var _used = false;
838
839			if($_nextProp.data("highload") == "Y"){
840				_highload = _highload + propName + ";"
841			}
842
843			$_nextPropList.each(function(io, obj){
844				var $_currentObj = $(obj);
845				_props = _props + propName + ":" + $_currentObj.data("value") + ";";
846				if($_currentObj.hasClass("selected")){
847					_params = _params + propName + ":" + $_currentObj.data("value") + ";";
848					return _used = true;
849				}
850			});
851
852			if(!_used){
853				_params = _params + propName + ":-forse;";
854			}
855
856		});
857
858		$.getJSON(ajaxPath + "?act=selectSku&props=" + encodeURIComponent(_props) + "&params=" + encodeURIComponent(_params) + "&level=" + _level + "&iblock_id=" + $_mProduct.data("iblock-id") + "&prop_id=" + $_mProduct.data("prop-id") + "&product_id=" + $_mProduct.data("product-id") + "&highload=" + encodeURIComponent(_highload) + "&product_width=" + _product_width + "&product_height=" + _product_height + "&product-change-prop=" + $_mProduct.data("change-prop") + "&product-more-pictures=" + $_mProduct.data("more-pictures") + "&price-code=" + encodeURIComponent($_mProductContainer.data("price-code")))
859		  .done(function(http){
860	  		$_propList.each(function(pI, pV){
861	  			var $_sf = $(pV);
862	  				$_sf.data("level") > _level && $_sf.find(".skuPropertyValue").removeClass("selected").addClass("disabled");
863	  		});
864			$.each(http[1]["PROPERTIES"], function(name, val){
865			  	var $_gPropList = $_propList.filter(function(){ return ($(this).data("name") == name); });
866			  	var $_gPropListValues = $_gPropList.find(".skuPropertyValue");
867				$_gPropListValues.each(function(il, element){
868					var $nextElement = $(element);
869					$.each(val, function(pVal, _selected){
870						if(pVal == $nextElement.data("value") && _selected != "D"){
871							(_selected == "Y") ? $nextElement.addClass("selected").removeClass("disabled").trigger("click") : $nextElement.removeClass("disabled");
872							return false;
873						}
874					});
875				});
876			});
877
878			if($_mProduct.data("cast-func")){
879				eval($_mProduct.data("castFunc"))($_mProduct,  http); // callback function for cast sku change.
880			}else{
881
882				var $namer = $_mProduct.find(".name");
883				var $nameMiddler = $namer.find(".middle");
884				var $elPicture = $_mProduct.find(".picture");
885				var $changeFastBack = $_mProduct.find(".fastBack").removeClass("disabled");
886				var $quantity = $_mProduct.find(".quantity");
887
888				if($nameMiddler){
889					$namer.attr("href", http[0]["PRODUCT"]["DETAIL_PAGE_URL"]);
890					$nameMiddler.html(http[0]["PRODUCT"]["NAME"]);
891				}else{
892					$namer.attr("href", http[0]["PRODUCT"]["DETAIL_PAGE_URL"]).html(http[0]["PRODUCT"]["NAME"]);
893				}
894
895				$elPicture.attr("href", http[0]["PRODUCT"]["DETAIL_PAGE_URL"]);
896				$elPicture.html($("<img/>").attr("src", http[0]["PRODUCT"]["PICTURE"]));
897				$elPicture.append($("<span />", {class: "getFastView"}).data("id", http[0]["PRODUCT"]["ID"]).html(LANG["FAST_VIEW_PRODUCT_LABEL"]));
898
899				$_mProduct.find(".addCart, .fastBack, .addCompare").data("id", http[0]["PRODUCT"]["ID"]).attr("data-id", http[0]["PRODUCT"]["ID"]);
900
901				if(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
902					$_mProduct.find(".price").html(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"] + " ").removeClass("getPricesWindow");
903				}else{
904					$_mProduct.find(".price").html(LANG["REQUEST_PRICE_LABEL"]).removeClass("getPricesWindow");
905				}
906
907				var $changeCart = $_mProduct.find(".addCart").removeClass("subscribe unSub
907scribe");
908
909				$changeCart.find("img").remove();
910				if(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
911					$changeCart.removeClass("added").removeClass("disabled").removeClass("requestPrice").html($("<span/>").html(LANG["ADD_BASKET_DEFAULT_LABEL"]).prepend($("<img />").attr({src: TEMPLATE_PATH + "/images/incart.svg", class: "icon"}))).attr("href", "#");
912				}else{
913					$changeFastBack.addClass("disabled");
914					$changeCart.removeClass("added").addClass("disabled").addClass("requestPrice").html($("<span/>").html(LANG["REQUEST_PRICE_BUTTON_LABEL"]).prepend($("<img />").attr({src: TEMPLATE_PATH + "/images/request.svg", class: "icon"}))).attr("href", "#");
915					http[0]["PRODUCT"]["CAN_BUY"] = "N";
916				}
917
918				if(http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
919					if($_mProduct.data("hide-measure") != "Y" && http[0]["PRODUCT"]["MEASURE"] != undefined && http[0]["PRODUCT"]["MEASURE"]["SYMBOL_RUS"] != ""){
920						$_mProduct.find(".price").append(
921							$("<span/>").addClass("measure").html(
922								" / " + http[0]["PRODUCT"]["MEASURE"]["SYMBOL_RUS"] + " "
923							)
924						);
925					}
926				}
927
928				var discountPrice = http[0]["PRODUCT"]["PRICE"]["RESULT_PRICE"]["DISCOUNT"] > 0 ? http[0]["PRODUCT"]["PRICE"]["RESULT_PRICE"]["BASE_PRICE"] : "";
929
930				$_mProduct.find(".price").append(
931					$("<s/>").addClass("discount").html(
932						discountPrice
933					)
934				);
935
936				if(http[0]["PRODUCT"]["COUNT_PRICES"] > 1){
937					$_mProduct.find(".price").addClass("getPricesWindow").data("id", http[0]["PRODUCT"]["ID"]).prepend($("<span/>", {class: "priceIcon"})).attr("href", "#");
938				}else{
939					$_mProduct.find(".price").find(".priceIcon").remove();
940				}
941
942				var $changeAvailable = $_mProduct.find(".changeAvailable");
943
944				$changeAvailable.removeClass("getStoresWindow");
945				$changeAvailable.removeClass("outOfStock");
946				$changeAvailable.removeClass("onOrder");
947				$changeAvailable.removeClass("inStock");
948				$changeAvailable.removeAttr("href");
949
950
951				if(http[0]["PRODUCT"]["CATALOG_QUANTITY"] > 0){
952					if(http[0]["PRODUCT"]["STORES_COUNT"] > 1){
953						$changeAvailable.html($("<span/>").html(LANG["CATALOG_AVAILABLE"])).addClass("inStock").attr("href", "#").addClass("getStoresWindow").data("id", http[0]["PRODUCT"]["ID"]);
954						$changeAvailable.prepend(
955							$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/inStock.png")
956						);
957					}else{
958						$changeAvailable.html(LANG["CATALOG_AVAILABLE"]).addClass("inStock");
959						$changeAvailable.prepend(
960							$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/inStock.png")
961						);
962					}
963				}else{
964					if(http[0]["PRODUCT"]["CAN_BUY"] != "Y"){
965
966						$changeAvailable.html(LANG["CATALOG_NO_AVAILABLE"]).addClass("outOfStock");
967						$changeFastBack.addClass("disabled");
968
969						if(http[0]["PRODUCT"]["CATALOG_SUBSCRIBE"] == "Y" && http[0]["PRODUCT"]["PRICE"]["DISCOUNT_PRICE"]){
970							$changeCart.html($("<span/>").html(LANG["ADD_SUBSCRIBE_LABEL"]).prepend($("<img />").attr({src: TEMPLATE_PATH + "/images/subscribe.svg", class: "icon"}))).attr("href", "#").addClass("subscribe");
971						}
972
973						else{
974							$changeCart.addClass("disabled");
975						}
976
977						$changeAvailable.prepend(
978							$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/outOfStock.png")
979						);
980
981					}else{
982						$changeAvailable.html(LANG["CATALOG_ON_ORDER"]).addClass("onOrder");
983						$changeAvailable.prepend(
984							$("<img/>").addClass("icon").attr("src", TEMPLATE_PATH + "/images/onOrder.png")
985						);
986					}
987				}
988
989				//check quantity field
990				if($quantity.length > 0){
991
992					//clear
993					$quantity.parents(".addCartContainer").removeClass("viewed").find(".minus, .plus").removeClass("error");
994
995					//set special attr
996					$quantity.data({
997						"enable-trace": http[0]["PRODUCT"]["CATALOG_QUANTITY_TRACE"],
998						"max-quantity": http[0]["PRODUCT"]["CATALOG_QUANTITY"],
999						"step": http[0]["PRODUCT"]["BASKET_STEP"]
1000					});
1001
1002					//set start value
1003					$quantity.val(http[0]["PRODUCT"]["BASKET_STEP"]);
1004
1005				}
1006
1007
1008			}
1009
1010			//addCart button reload
1011			changeAddCartButton(basketProductsNow);
1012			//subscribe button reload
1013			subscribeOnline();
1014
1015			$_clickedProp.removeClass("loading");
1016			skuLoading = false;
1017
1018		  }).fail(function(jqxhr, textStatus, error){
1019		  	$_clickedProp.removeClass("loading");
1020		  	skuLoading = false;
1021		    alert("Request Failed: " + textStatus + ", " + error);
1022		});
1023
1024		event.preventDefault();
1025
1026	}
1027
1028	var addSubscribe = function(event){
1029
1030		//j vars
1031		$body = $("body");
1032		$this = $(this);
1033
1034		//vars
1035		productId = $this.data("id");
1036
1037		//check id
1038		if(productId != ""){
1039
1040			//loader
1041			$this.addClass("loading");
1042
1043			//get subscribe window
1044			$.getJSON(ajaxPath + "?act=addSubscribe&id=" + productId + "&site_id=" + SITE_ID, function(jsonData){
1045
1046				if(jsonData["SUCCESS"] == "Y"){
1047
1048					//metrica
1049					if(typeof globalSettings != "undefined" && typeof globalSettings["TEMPLATE_METRICA_SUBSCRIBE"] != "undefined" && typeof globalSettings["TEMPLATE_METRICA_ID"] != "undefined" && typeof window["yaCounter" + globalSettings["TEMPLATE_METRICA_ID"]] != "undefined"){
1050						window["yaCounter" + globalSettings["TEMPLATE_METRICA_ID"]].reachGoal(globalSettings["TEMPLATE_METRICA_SUBSCRIBE"]);
1051					}
1052
1053					//show form
1054					if(jsonData["SUBSCRIBE_FORM"] != ""){
1055						$body.append(jsonData["SUBSCRIBE_FORM"]);
1056						$this.removeClass("loading");
1057					}
1058					
1059				}
1060
1061				else{
1062					console.error(jsonData);
1063				}
1064
1065			});
1066
1067		}
1068
1069		else{
1070			//show error
1071			console.error("product id not found");
1072
1073		}
1074
1075		//block action
1076		return event.preventDefault();
1077
1078	};
1079
1080	var unSubscribe = function(event){
1081
1082		//j vars
1083		$this = $(this);
1084		$thisImage = $this.find("img");
1085
1086		//vars
1087		subscribeId = $this.data("subscribe-id");
1088
1089		//check id
1090		if(subscribeId != ""){
1091
1092			//loader
1093			$this.addClass("loading");
1094
1095			//get subscribe window
1096			$.getJSON(ajaxPath + "?act=unSubscribe&subscribeId=" + subscribeId + "&site_id=" + SITE_ID, function(jsonData){
1097
1098				if(jsonData["SUCCESS"] == "Y"){
1099					$this.data("subscribe-id", "").text(LANG["ADD_SUBSCRIBE_LABEL"]).prepend($thisImage.attr({
1100						src: TEMPLATE_PATH + "/images/subscribe.svg",
1101					})).removeClass("unSubscribe");
1102				}
1103
1104				else{
1105					console.error(jsonData);
1106				}
1107
1108			});
1109
1110		}
1111
1112		else{
1113			//show error
1114			console.error("product id not found");
1115
1116		}
1117		return event.preventDefault();
1118	};
1119
1120	var addCart = function(event){
1121
1122		var $this = $(this);
1123		var $quantityContainer = $this.siblings(".quantityContainer");
1124		var $quantityField = $quantityContainer.find(".quantity");
1125		var productID = $this.data("id");
1126		var quantity = $this.data("quantity");
1127		var windowDisplay = $this.data("display-window");
1128		var refreshPage = $this.data("refresh-page");
1129		var addedLabel = $this.data("cart-label");
1130
1131		var _arID = [];
1132
1133		if(!$this.hasClass("disabled") && !$this.hasClass("subscribe")){
1134
1135			if($this.attr("href") === "#"){
1136
1137				//metrica
1138				if(typeof globalSettings != "undefined" && typeof globalSettings["TEMPLATE_METRICA_ADD_CART"] != "undefined" && typeof globalSettings["TEMPLATE_METRICA_ID"] != "undefined" && typeof window["yaCounter" + globalSettings["TEMPLATE_METRICA_ID"]] != "undefined"){
1139					window["yaCounter" + globalSettings["TEMPLATE_METRICA_ID"]].reachGoal(globalSettings["TEMPLATE_METRICA_ADD_CART"]);
1140				}
1141
1142				if($this.hasClass("multi")){
1143					if($this.data("selector") != "" && $this.attr("href") === "#"){
1144						$this.addClass("loading").text(LANG["ADD_CART_LOADING"]);
1145						var $addElements = $($this.data("selector")).filter(":not(.disabled)");
1146						var elementsQuantity = "";
1147						if($addElements.length > 0){
1148							$addElements.each(function(x, elx){
1149								var $elx = $(elx);
1150								if($elx.data("id") != ""){
1151									_arID[x] = $elx.data("id");
1152									if(parseFloat($elx.data("quantity")) != ""){
1153										elementsQuantity += $elx.data("id") + ":" + parseFloat($elx.data("quantity")) + ";";
1154									}
1155								}
1156							});
1157
1158							if(_arID != ""){
1159								$.getJSON(ajaxPath + "?act=addCart&id=" + _arID.join(";") + "&q="+ elementsQuantity +"&multi=1&site_id=" + SITE_ID, function(data) {
1160									var $imageAfterLoad = $this.find("img");
1161									$this.text(LANG["ADDED_CART_SMALL"])
1162										.attr("href", SITE_DIR + "personal/cart/")
1163										.prepend($imageAfterLoad.attr("src", TEMPLATE_PATH + "/images/added.png"))
1164										.removeClass("loading")
1165										.addClass("added");
1166									cartReload();
1167								});
1168							}else{
1169								alert("error (5)");
1170							}
1171						}else{
1172							alert("error(6)");
1173						}
1174						event.preventDefault();
1175					}
1176				}else{
1177
1178					if(parseInt(productID, 10) > 0){
1179
1180						//append loader
1181						$this.addClass("loading");
1182
1183						//check quantity fields
1184						if($quantityField.length > 0){
1185
1186							//get quantity from fields
1187							var quantityFromField = parseFloat($quantityField.val());
1188
1189							//reset quantity
1190							quantity = quantityFromField;
1191
1192						}
1193
1194						//send object
1195						var gObj = {
1196							act: "addCart",
1197							id: productID,
1198							site_id: SITE_ID
1199						};
1200
1201						if(quantity > 0){
1202							gObj["q"] = quantity;
1203						}
1204
1205						$.getJSON(ajaxPath, gObj).done(function(jData){
1206
1207							var reloadCart = cartReload();
1208
1209							//push window component
1210							if(typeof(windowDisplay) == "undefined" || typeof(windowDisplay) != "undefined" && windowDisplay == "Y"){
1211								if(typeof jData["status"] != "undefined" && jData["status"] == true && typeof jData["window_component"] != "undefined" && jData["window_component"] != ""){
1212									$body.append(jData["window_component"]);
1213								}
1214							}
1215
1216							//change add cart label
1217							LANG["BASKET_ADDED"] = typeof(addedLabel) == "undefined" ? LANG["BASKET_ADDED"] : addedLabel;
1218
1219							var $imageAfterLoad = $this.find("img");
1220
1221							$(".bwOpened").removeClass("bwOpened");
1222							lastAddCartText = $this.html();
1223
1224							$this.removeClass("loading")
1225								.addClass("added")
1226								.addClass("bwOpened")
1227								.html(LANG["BASKET_ADDED"])
1228								.prepend($imageAfterLoad.attr("src", TEMPLATE_PATH + "/images/added.png"))
1229								.attr("href", SITE_DIR + "personal/cart/");
1230
1231
1232							//reload page after add cart
1233							if(typeof(refreshPage) != "undefined" && refreshPage == "Y"){
1234								document.location.reload();
1235								window.scrollTo(0, 0);
1236							}
1237
1238						}).fail(function(jqxhr, textStatus, error){
1239
1240							$.get(ajaxPath, gObj).done(function(Data){
1241								console.log(Data);
1242							});
1243
1244							$this.removeClass("loading")
1245										.addClass("error");
1246
1247						    console.error(
1248						    	"Request Failed: " + textStatus + ", " + error
1249						    );
1250
1251						});
1252
1253					}
1254				}
1255			}else{
1256				return true;
1257			}
1258		}
1259
1260		return event.preventDefault();
1261
1262	}
1263
1264	var addCompare = function(event){
1265
1266		var $this = $(event.currentTarget);
1267		var $icon = $this.find("img");
1268		var productID = $this.data("id");
1269
1270		if($this.attr("href") == "#"){
1271
1272			if(parseInt(productID, 10) > 0 && !$this.hasClass("added")){
1273
1274				$this.addClass("loading");
1275
1276				var gObj = {
1277					id: productID,
1278					act: "addCompare"
1279				};
1280
1281				$.get(ajaxPath, gObj).done(function(hData){
1282					if(hData != ""){
1283						var reloadCart = cartReload();
1284						if($this.data("no-label") == "Y"){
1285							$this.removeClass("loading")
1286										.addClass("added")
1287											.attr("href", SITE_DIR + "compare/");
1288						}else{
1289							$this.removeClass("loading")
1290										.addClass("added")
1291											.html(LANG["ADD_COMPARE_ADDED"])
1292												.prepend($icon)
1293													.attr("href", SITE_DIR + "compare/");
1294						}
1295					}else{
1296						$this.removeClass("loading")
1297								.addClass("error");
1298					}
1299				}).fail(function(jqxhr, textStatus, error){
1300					
1301					$this.removeClass("loading")
1302								.addClass("error");
1303				   
1304				    console.error(
1305				    	"Request Failed: " + textStatus + ", " + error
1306				    );
1307
1308				});
1309			}
1310
1311			return event.preventDefault();
1312		}
1313	};
1314
1315	var addWishlist = function(event){
1316		
1317		var $this = $(event.currentTarget);
1318		var $icon = $this.find("img");
1319		var productID = $this.data("id");
1320
1321		if($this.attr("href") == "#"){
1322			if(parseInt(productID, 10) > 0 && !$this.hasClass("added")){
1323				
1324				$this.addClass("loading");
1325
1326				var gObj = {
1327					id: productID,
1328					act: "addWishlist"
1329				};
1330
1331				$.get(ajaxPath, gObj).done(function(hData){
1332					if(hData != ""){
1333						var reloadCart = cartReload();
1334						if($this.data("no-label") == "Y"){
1335							$this.removeClass("loading")
1336										.addClass("added")
1337											.attr("href", SITE_DIR + "wishlist/");
1338						}else{
1339							$this.removeClass("loading")
1340										.addClass("added")
1341											.html(LANG["WISHLIST_ADDED"])
1342												.prepend($icon)
1343													.attr("href", SITE_DIR + "wishlist/");
1344						}
1345					}else{
1346						$this.removeClass("loading")
1347									.addClass("error");
1348					}
1349				}).fail(function(jqxhr, textStatus, error){
1350					
1351					$this.removeClass("loading")
1352								.addClass("error");
1353				   
1354				    console.error(
1355				    	"Request Failed: " + textStatus + ", " + error
1356				    );
1357
1358				});
1359			}
1360
1361			return event.preventDefault();
1362		}
1363	};
1364
1365	var openFastBack = function(event){
1366
1367		var $this = $(this);
1368
1369		if(!$this.hasClass("disabled")){
1370
1371			var $appFastBuy = $("#appFastBuy");
1372			var $foundation = $("#foundation").addClass("blurred");
1373
1374			$("#fastBuyOpenContainer").show();
1375			$("#fastBuyResult").hide();
1376
1377			$("#fastBuyForm").find('input[type="text"], textarea').val("");
1378
1379			var productID = $this.data("id");
1380
1381			$this.addClass("loading");
1382
1383			var gObj = {
1384				id: productID,
1385				act: "getFastBuy"
1386			};
1387
1388			$.getJSON(ajaxPath, gObj).done(function(jData){
1389
1390				$this.removeClass("loading");
1391				$appFastBuy.find("#fastBuyPicture .url, #fastBuyName .url").attr("href", jData[0]["DETAIL_PAGE_URL"]);
1392				$appFastBuy.find("#fastBuyPicture .picture").attr("src", $appFastBuy.data("load"));
1393				$appFastBuy.find("#fastBuyPrice").html(jData[0]["PRICE"]["PRICE_FORMATED"]);
1394				$appFastBuy.find("#fastBuyFormName").val(jData[0]["USER_NAME"]);
1395				$appFastBuy.find("#fastBuyFormTelephone").val(jData[0]["USER_PHONE"]);
1396				$appFastBuy.find("#fastBuyName .middle").html(jData[0]["NAME"]);
1397				$appFastBuy.find("#fastBuyFormId").val(jData[0]["ID"]);
1398				$appFastBuy.find(".markerContainer").remove();
1399				if(jData[0]["MARKER"] != undefined){
1400
1401					$appFastBuy.find("#fastBuyPicture").prepend(
1402						$("<div>").addClass("markerContainer")
1403							.append(
1404								jData[0]["MARKER"]
1405							)
1406
1407					);
1408				}
1409
1410				$appFastBuy.show();	
1411
1412				loadingPictureControl(jData[0]["PICTURE"]["src"], function(){
1413					$appFastBuy.find("#fastBuyPicture .picture").attr("src", jData[0]["PICTURE"]["src"]);
1414				});
1415
1416			}).fail(function(jqxhr, textStatus, error){
1417				
1418				$.get(ajaxPath, gObj).done(function(Data){
1419					console.log(Data)
1420				});
1421
1422				$this.removeClass("loading")
1423							.addClass("error");
1424			   
1425			    console.error(
1426			    	"Request Failed: " + textStatus + ", " + error
1427			    );
1428
1429			});
1430
1431			fastBuyOpen = true;
1432		}
1433
1434		return event.preventDefault();
1435	};
1436
1437	var sendFastBack = function(event){
1438		
1439		var $this = $(this).addClass("loading");
1440		var $fastBuyForm = $("#fastBuyForm");
1441		var $fastBuyFormName = $fastBuyForm.find("#fastBuyFormName").removeClass("error");
1442		var $fastBuyFormTelephone = $fastBuyForm.find("#fastBuyFormTelephone").removeClass("error");
1443
1444		if($fastBuyFormName.val() == ""){
1445			$fastBuyFormName.addClass("error");
1446		}
1447
1448		if($fastBuyFormTelephone.val() == ""){
1449			$fastBuyFormTelephone.addClass("error");
1450		}
1451
1452		var $personalInfo = $fastBuyForm.find("#personalInfoFastBuy");
1453		if(!$personalInfo.prop("checked")){
1454			$personalInfo.addClass("error");
1455		}
1456
1457		if($fastBuyFormName.val() != "" && $fastBuyFormTelephone.val() !="" && $personalInfo.prop("checked")){
1458
1459			$.getJSON(ajaxPath + "?" + $fastBuyForm.serialize()).done(function(jData){
1460
1461				//metrica
1462				if(typeof globalSettings != "undefined" && typeof globalSettings["TEMPLATE_METRICA_FAST_BUY"] != "undefined" && typeof globalSettings["TEMPLATE_METRICA_ID"] != "undefined" && typeof window["yaCounter" + globalSettings["TEMPLATE_METRICA_ID"]] != "undefined"){
1463					window["yaCounter" + globalSettings["TEMPLATE_METRICA_ID"]].reachGoal(globalSettings["TEMPLATE_METRICA_FAST_BUY"]);
1464				}
1465				
1466				$("#fastBuyResultTitle").html(jData["heading"]);
1467				$("#fastBuyResultMessage").html(jData["message"]);
1468
1469				$("#fastBuyOpenContainer").hide();
1470				$("#fastBuyResult").show();
1471				
1472				$this.removeClass("loading");
1473
1474			}).fail(function(jqxhr, textStatus, error){
1475				
1476				$this.removeClass("loading").addClass("error");
1477			   
1478			    console.error(
1479			    	"Request Failed: " + textStatus + ", " + error
1480			    );
1481
1482			});
1483
1484		}else{
1485			$this.removeClass("loading");
1486		}
1487
1488		return event.preventDefault();
1489	};
1490
1491	var closeFastBack = function(event){
1492		var $appFastBuy = $("#appFastBuy").hide();
1493		var $foundation = $("#foundation").removeClass("blurred");
1494		return event.preventDefault();
1495	};
1496
1497	var removeFromWishlist = function(event){
1498		
1499		var $this = $(this);
1500		var $wishlist = $("#wishlist");
1501		var $parentThis = $(this).parents(".item");
1502		var productID = $this.data("id");
1503				$this.addClass("loading");
1504
1505		var gObj = {
1506			id: productID,
1507			act: "removeWishlist"
1508		};
1509
1510		$.get(ajaxPath, gObj).done(function(hData){
1511			if(hData != ""){
1512				if($wishlist.find(".product, .itemRow").length == 1){
1513					window.location.reload();
1514				}else{
1515					reloadCart = cartReload();
1516					$parentThis.remove();
1517				}
1518			}else{
1519				$this.removeClass("loading")
1520							.addClass("error");
1521			}
1522		}).fail(function(jqxhr, textStatus, error){
1523			
1524			$this.removeClass("loading")
1525						.addClass("error");
1526		   
1527		    console.error(
1528		    	"Request Failed: " + textStatus + ", " + error
1529		    );
1530
1531		});
1532
1533		return event.preventDefault();
1534	
1535	};
1536
1537    var slideCollapsedBlock = function(event){
1538    	var $collapsed =  $("#left").children(".collapsed");
1539		if(!$collapsed.is(":visible") || $collapsed.hasClass("toggled")){
1540	    	$collapsed.stop().slideToggle().addClass("toggled");
1541	    	return event.preventDefault();
1542	    }
1543    };
1544
1545    var openSmartFiler = function(event){
1546    	$smartFilterForm = $("#smartFilterForm");
1547    	if ( $(window).width() > 1024 ) {
1548	    	if($smartFilterForm.is(":visible")){
1549	    		$smartFilterForm.stop().slideUp("fast");
1550	    	}else{
1551	    		$smartFilterForm.stop().slideDown("fast");
1552	    	}
1553    	}
1554    };
1555
1556    var openSmartSections = function(event){
1557    	$smartSections = $("#nextSection ul");
1558    	if($smartSections.is(":visible")){
1559    		$smartSections.stop().slideUp("fast");
1560    	}else{
1561    		$smartSections.stop().slideDown("fast");
1562    	}
1563    };
1564
1565	var formatPrice = function(data) {
1566		var price = String(data).split('.');
1567		var strLen = price[0].length;
1568		var str = "";
1569
1570		for (var i = strLen; i > 0; i--) {
1571			str = str + ((!(i % 3) ? " " : "") + price[0][strLen - i]);
1572		}
1573
1574		return str + (price[1] != undefined ? "." + price[1] : "");
1575	}
1576
1577	//extented prices
1578	var catalogReCalcPrice = function($qtyBox, currentQuantity){
1579		if(currentQuantity > 0){
1580
1581			//price
1582			var $priceContainer = $qtyBox.parents(".item").find(".price");
1583			var $priceValContainer = $priceContainer.find(".priceVal");
1584
1585			//check for empty
1586			if($priceValContainer.length > 0){
1587				var $priceContainerStr = $priceValContainer.html().replace(/\d\.\d/g, '').replace(/[0-9]/g, '');
1588			}
1589
1590			//discount
1591			var $discountContainer = $priceContainer.find(".discount");
1592			if($discountContainer.length > 0){
1593				var $discountContainerStr = $discountContainer.html().replace(/\d\.\d/g, '').replace(/[0-9]/g, '');
1594			}
1595
1596			//get price object
1597			var obExtentedPrices = $qtyBox.data("extended-price");
1598
1599			if(typeof obExtentedPrices != "undefined"){
1600				if(typeof obExtentedPrices == "string"){
1601					obExtentedPrices = $.parseJSON(obExtentedPrices);
1602				}
1603			}
1604
1605			//check for empty object
1606			if(typeof obExtentedPrices == "object"){
1607
1608				//each prices
1609				$.each(obExtentedPrices, function(index, nextValue){
1610
1611					//check for empty quantity
1612					if(nextValue["QUANTITY_FROM"] != null || nextValue["QUANTITY_TO"] != null){
1613
1614						//check for current quantity
1615						if((nextValue["QUANTITY_FROM"] == null || nextValue["QUANTITY_FROM"] != "" && currentQuantity >= nextValue["QUANTITY_FROM"]) && (nextValue["QUANTITY_TO"] == null || nextValue["QUANTITY_TO"] != "" && currentQuantity <= nextValue["QUANTITY_TO"])){
1616							
1617							//write price
1618							if(typeof nextValue["DISCOUNT_PRICE"] != "undefined"){
1619								$priceValContainer.html(formatPrice(Number(nextValue["DISCOUNT_PRICE"]).toFixed(0)) + $priceContainerStr);
1620							}
1621
1622							//write discount
1623							if(typeof nextValue["OLD_PRICE"] != "undefined"){
1624								$discountContainer.html(formatPrice(Number(nextValue["OLD_PRICE"]).toFixed(0)) + $discountContainerStr);
1625							}	
1626
1627						}
1628					}
1629				});
1630			}
1631
1632		}
1633		return;
1634	};
1635
1636	var catalogAddCartPlus = function(event){
1637
1638		var $this = $(this);
1639		var $qtyBox = $this.siblings(".catalogQtyBlock .catalogQty");
1640		var $addCartBtn = $this.parent().siblings(".addCart");
1641
1642		var xCurrentQtyValue = Number($qtyBox.val());
1643		var xQtyStep = Number($qtyBox.data("step"));
1644		var xQtyExpression = Number((xCurrentQtyValue * 10 + xQtyStep * 10) / 10); //js magic .9999999
1645
1646		var _enableTrace = $qtyBox.data("enable-trace");
1647		var _maxQuantity = Number($qtyBox.data("max-quantity"));
1648
1649		var __qtyError = false;
1650		var xTmpExpression = 0;
1651
1652		if(_enableTrace == "Y"){
1653
1654			xTmpExpression = xQtyExpression;
1655			xQtyExpression = (xQtyExpression > _maxQuantity) ? _maxQuantity : xQtyExpression;
1656
1657			if(xTmpExpression != xQtyExpression){
1658				__qtyError = true;
1659			}
1660
1661		}
1662
1663		$qtyBox.val(xQtyExpression);
1664		$addCartBtn.data("quantity", xQtyExpression);
1665
1666		//extented prices
1667		catalogReCalcPrice($qtyBox, xQtyExpression);
1668
1669		//set or remove error
1670		__qtyError === true ? $qtyBox.addClass("error") : $qtyBox.removeClass("error");
1671
1672		return event.preventDefault();
1673
1674	};
1675
1676	var catalogAddCartMinus = function(event){
1677
1678		var $this = $(this);
1679		var $qtyBox = $this.siblings(".catalogQtyBlock .catalogQty");
1680		var $addCartBtn = $this.parent().siblings(".addCart");
1681
1682		var xCurrentQtyValue = Number($qtyBox.val());
1683		var xQtyStep = Number($qtyBox.data("step"));
1684		var xQtyExpression = Number((xCurrentQtyValue * 10 - xQtyStep * 10) / 10); //js magic .9999999
1685
1686		var _enableTrace = $qtyBox.data("enable-trace");
1687		var _maxQuantity = Number($qtyBox.data("max-quantity"));
1688
1689		var __qtyError = false;
1690		var xTmpExpression = 0;
1691
1692		xQtyExpression = xQtyExpression > xQtyStep ? xQtyExpression : xQtyStep;
1693
1694		if(_enableTrace == "Y"){
1695
1696			xTmpExpression = xQtyExpression;
1697			xQtyExpression = (xQtyExpression > _maxQuantity) ? _maxQuantity : xQtyExpression;
1698
1699			if(xTmpExpression != xQtyExpression){
1700				__qtyError = true;
1701			}
1702
1703		}
1704
1705		$qtyBox.val(xQtyExpression);
1706		$addCartBtn.data("quantity", xQtyExpression);
1707
1708		//extented prices
1709		catalogReCalcPrice($qtyBox, xQtyExpression);
1710
1711		//set or remove error
1712		__qtyError === true ? $qtyBox.addClass("error") : $qtyBox.removeClass("error");
1713
1714		return event.preventDefault();
1715
1716	};
1717
1718	var catalogAddCartChange = function(event){
1719
1720		var $this = $(this);
1721		var $addCartBtn = $this.parent().siblings(".addCart");
1722
1723		var xCurrentQtyValue = $this.val();
1724		var xQtyStep = Number($this.data("step"));
1725
1726		var _enableTrace = $this.data("enable-trace");
1727		var _maxQuantity = Number($this.data("max-quantity"));
1728
1729		var __qtyError = false;
1730		var xTmpExpression = 0;
1731
1732		if(xCurrentQtyValue.replace(/[^\d.]/gi, '') != xCurrentQtyValue){
1733			xCurrentQtyValue = xQtyStep;
1734		}else{
1735			xCurrentQtyValue = Number(xCurrentQtyValue);
1736		}
1737
1738		xQtyExpression = Math.ceil(xCurrentQtyValue / xQtyStep) * xQtyStep;
1739
1740		if(_enableTrace == "Y"){
1741
1742			xTmpExpression = xQtyExpression;
1743			xQtyExpression = (xQtyExpression > _maxQuantity) ? _maxQuantity : xQtyExpression;
1744
1745			if(xTmpExpression != xQtyExpression){
1746				__qtyError = true;
1747			}
1748
1749		}
1750
1751		$this.val(xQtyExpression);
1752		$addCartBtn.data("quantity", xQtyExpression);
1753
1754		//extented prices
1755		catalogReCalcPrice($qtyBox, xQtyExpression);
1756
1757		//set or remove error
1758		__qtyError === true ? $this.addClass("error") : $this.removeClass("error");
1759
1760	};
1761
1762	var closeElementsAfterClick = function(event){
1763
1764		if(fastBuyOpen === true){
1765			$("#appFastBuy").hide();
1766			$("#foundation").removeClass("blurred");
1767			fastBuyOpen = false;
1768		}
1769
1770		if(fastViewOpen === true){
1771			$("#appFastView").remove();
1772			fastViewOpen = false;
1773		}
1774
1775		if(fastViewStoresOpen === true){
1776			$("#fastViewStores").remove();
1777			fastViewStoresOpen = false;
1778		}
1779
1780		if(priceVariantOpen === true){
1781			$("#appProductPriceVariant").remove();
1782			priceVariantOpen = false;
1783		}
1784
1785		if(requestPriceOpen === true){
1786			$("#foundation").removeClass("blurred");
1787			$("#requestPrice").hide();
1788			requestPriceOpen = false;
1789		}
1790
1791	};
1792
1793	$(document).on("click", "#footerTabsCaption .item", function(event){
1794		$(this).find("a").addClass("selected");
1795		$(this).siblings(".item").find("a").removeClass("selected");
1796		$("#footerTabs").find(".tab").hide().eq($(this).index()).show();
1797		event.stopImmediatePropagation();
1798		return event.preventDefault();
1799	});
1800
1801	$(document).on("click", "#infoTabsCaption .item", function(event){
1802		$(this).find("a").addClass("selected");
1803		$(this).siblings(".item").find("a").removeClass("selected");
1804		$("#infoTabs").find(".tab").hide().eq($(this).index()).show();
1805		return event.preventDefault();
1806	});
1807
1808	//check checkbox by class name on label
1809	$(".label-class").on("click", function(){
1810
1811		var $this = $(this);
1812		var $cTarget = $this.attr("for");
1813		var $parentForm = $this.parents("form");
1814		var $cCheckBox = $parentForm.find("." + $cTarget);
1815
1816		if($cCheckBox.prop("checked")){
1817			$cCheckBox.prop("checked", false).focus();
1818		}
1819
1820		else{
1821			$cCheckBox.prop("checked", "checked").focus();
1822		}
1823
1824		return event.preventDefault();
1825
1826	});
1827
1828	//check checkbox by data-for label
1829	$(".label-for").on("click", function(){
1830
1831		var $this = $(this);
1832		var $cTarget = $this.data("for");
1833		var $parentForm = $this.parents("form");
1834		var $cCheckBox = $parentForm.find("." + $cTarget);
1835
1836		if($cCheckBox.prop("checked")){
1837			$cCheckBox.prop("checked", false).focus();
1838		}
1839
1840		else{
1841			$cCheckBox.prop("checked", "checked").focus();
1842		}
1843
1844		return event.preventDefault();
1845
1846	});
1847
1848	var openSkuDropDown = function(event){
1849
1850		//vars
1851		var $this = $(this);
1852		var $dropList = $this.siblings(".oSkuDropdownList");
1853
1854		//show list
1855		$dropList.toggleClass("opened");
1856
1857		//opened flag
1858		oSkuDropdownOpened = $dropList.hasClass("opened");
1859
1860		return event.preventDefault();
1861
1862	};
1863
1864	var selectSkuDropDownValue = function(event){
1865
1866		//vars
1867		var $this = $(this);
1868		var $dropList = $this.parents(".oSkuDropdownList");
1869		var $dropListItems = $dropList.find(".oSkuDropdownListItem").removeClass("selected");
1870		var $checkedItem = $dropList.siblings(".oSkuCheckedItem");
1871
1872		if(!$checkedItem.hasClass("noHideChecked")){
1873
1874			//hide list
1875			$dropList.removeClass("opened");
1876
1877			//opened flag
1878			oSkuDropdownOpened = false;
1879
1880		}
1881
1882		//active
1883		$this.addClass("selected");
1884
1885		//write value
1886		$checkedItem.html($this.text());
1887
1888		//
1889		return event.preventDefault();
1890
1891	};
1892
1893	var closeSkuDropDown = function(event){
1894
1895		//if opened
1896		if(oSkuDropdownOpened){
1897			//block trigger events
1898			if(typeof event.isTrigger == "undefined"){
1899				//close
1900				$(".oSkuDropdownList").removeClass("opened");
1901
1902				//opened flag
1903				oSkuDropdownOpened = false;
1904			}
1905		}
1906
1907	};
1908
1909	//fix top menu
1910	if($topMenuContainer.length > 0 && $topMenuContainer.hasClass("auto-fixed")){
1911
1912		//vars
1913		var scrollUnbind = false;
1914		var topMenuFixed = false;
1915		var menuStartOffset = 0;
1916		var menuStartHeight = 0;
1917		var menuStartbackground = 0;
1918
1919		//check disable flag
1920		if(typeof _topMenuNoFixed == "undefined"){
1921
1922			//functions
1923			var calcPosFixTopMenu = function(event){
1924
1925				//to default
1926				$topMenuContainer.removeClass("fixed");
1927				$mainMenuStaticContainer.css("height", "auto");
1928
1929				//get offset & css value
1930				menuStartOffset = $topMenuContainer.offset().top;
1931				menuStartHeight = $topMenuContainer.height();
1932				menuStartbackground = $topMenuContainer.css("background-color");
1933
1934				//set flag
1935				topMenuFixed = false;
1936
1937				//unbind
1938				if($window.width() <= 1024){
1939
1940					//bind off
1941					$window.off("scroll", scrollFixTopMenu);
1942
1943					//set flag
1944					scrollUnbind = true;
1945
1946				}
1947
1948				else{
1949
1950					//check flag
1951					if(scrollUnbind){
1952
1953						//bind on
1954						$window.on("scroll", scrollFixTopMenu);
1955
1956						//set flag
1957						scrollUnbind = false;
1958
1959					}
1960
1961					//check
1962					scrollFixTopMenu();
1963
1964				}
1965
1966			};
1967
1968			var scrollFixTopMenu = function(event){
1969
1970				//vars
1971				var currentScrollPosition = typeof event != "undefined" ? event.currentTarget.scrollY : $window.scrollTop();
1972
1973				if(currentScrollPosition >= menuStartOffset){
1974					if(!topMenuFixed){
1975
1976						//set clases and css values
1977						$topMenuContainer.addClass("fixed");
1978						$mainMenuStaticContainer.css("height", $topMenuContainer.height() + "px");
1979						$mainMenuStaticContainer.css("background-color", menuStartbackground);
1980
1981						//set flag
1982						topMenuFixed = true;
1983					}
1984				}
1985
1986				else{
1987					//set clases and css values
1988					$topMenuContainer.removeClass("fixed");
1989					//set flag
1990					topMenuFixed = false;
1991				}
1992
1993			};
1994
1995			//binds
1996			$window.on("resize", calcPosFixTopMenu);
1997			$window.on("scroll", scrollFixTopMenu);
1998
1999			//
2000			calcPosFixTopMenu();
2001
2002		}
2003
2004	}
2005
2006	var toggleMobileTabs = function(event){
2007
2008		//jquery vars
2009		var $this = $(this);
2010
2011		//check disabled
2012		if(!$this.hasClass("noTabs") && $(window).innerWidth() <= 1024){
2013
2014			$this.toggleClass("active");
2015			$this.siblings("ul, .tab").toggle(200);
2016
2017			//block actions
2018			return event.preventDefault();
2019
2020		}
2021
2022	}
2023
2024	//quantity functions
2025	var productQuantityPlus = function(event){
2026
2027		//jquery vars
2028		var $this = $(this),
2029			$quantityContainer = $this.parents(".quantityContainer"),
2030			$quantityInput = $quantityContainer.find(".quantity");
2031
2032		//other
2033		var quantityParams = {
2034			max: $quantityInput.data("max-quantity"),
2035			step: $quantityInput.data("step"),
2036			value: $quantityInput.val()
2037		}
2038
2039		//set float types
2040		$.each(quantityParams, function(i, val){
2041			quantityParams[i] = parseFloat(val);
2042		})
2043
2044		//check quantity trace
2045		quantityParams.trace = $quantityInput.data("enable-trace");
2046
2047		//clear
2048		$quantityContainer.find(".minus, .plus").removeClass("error");
2049
2050		//check max value
2051		if(quantityParams.trace == "Y" && quantityParams.value < quantityParams.max || quantityParams.trace == "N"){
2052
2053			//calculate total quantity
2054			quantityParams.total = quantityParams.value + quantityParams.step;
2055
2056			//set quantity
2057			$quantityInput.val(+( quantityParams.total).toFixed(5));
2058
2059		}
2060
2061		//excess
2062		else{
2063			$this.addClass("error");
2064		}
2065
2066		//block actions
2067		return event.preventDefault();
2068
2069	}
2070
2071	var productQuantityMinus = function(event){
2072
2073		//jquery vars
2074		var $this = $(this),
2075			$quantityContainer = $this.parents(".quantityContainer"),
2076			$quantityInput = $quantityContainer.find(".quantity");
2077
2078		//other
2079		var quantityParams = {
2080			step: $quantityInput.data("step"),
2081			value: $quantityInput.val()
2082		}
2083
2084		//set float types
2085		$.each(quantityParams, function(i, val){
2086			quantityParams[i] = parseFloat(val);
2087		})
2088
2089		//clear
2090		$quantityContainer.find(".minus, .plus").removeClass("error");
2091
2092		//calculate total quantity
2093		quantityParams.total = quantityParams.value - quantityParams.step;
2094
2095		//check minimal
2096		quantityParams.total = quantityParams.total < quantityParams.step ? quantityParams.step : quantityParams.total;
2097
2098		//set quantity
2099		$quantityInput.val(+( quantityParams.total).toFixed(5));
2100
2101		//block actions
2102		return event.preventDefault();
2103
2104	}
2105
2106	//keypress events
2107	var productQuantityKeypress = function(event){
2108
2109		//available characters
2110		var allowedChars = [44, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57];
2111
2112		//check which
2113		if(allowedChars.indexOf(event.which) === -1){
2114
2115			//block actions
2116			return event.preventDefault();
2117
2118		}
2119
2120	};
2121
2122	var productQuantityChange = function(event){
2123
2124		//jquery vars
2125		var $this = $(this),
2126			$quantityContainer = $this.parents(".quantityContainer");
2127
2128		//other
2129		var quantityParams = {
2130			max: $this.data("max-quantity"),
2131			step: $this.data("step"),
2132			value: $this.val()
2133		}
2134
2135		//set float types
2136		$.each(quantityParams, function(i, val){
2137			quantityParams[i] = parseFloat(val);
2138		})
2139
2140		//check quantity trace
2141		quantityParams.trace = $this.data("enable-trace");
2142
2143		//set multiplicity
2144		var multiplicity = +(quantityParams.value / quantityParams.step).toFixed(5);
2145
2146		//clear
2147		$quantityContainer.find(".minus, .plus").removeClass("error");
2148
2149		//check max value
2150		if(quantityParams.trace == "Y" && quantityParams.value > quantityParams.max || quantityParams.trace == "N"){
2151			//set max value
2152			quantityParams.value = quantityParams.max;
2153		}
2154
2155		//check nan & min value
2156		else if(isNaN(quantityParams.value) || quantityParams.value < quantityParams.step){
2157			//set min value
2158			quantityParams.value = quantityParams.step;
2159		}
2160
2161		//check multiple of number
2162		else if((multiplicity ^ 0) !== multiplicity){
2163			//get near quantity
2164			quantityParams.value = Math.ceil(quantityParams.value / quantityParams.step) * quantityParams.step;
2165		}
2166
2167		//set quantity
2168		$this.val(+(quantityParams.value).toFixed(5));
2169
2170		//block actions
2171		return event.preventDefault();
2172
2173	}
2174
2175	var productQuantityFocus = function(event){
2176
2177		//set viewed class
2178		$(this).parents(".addCartContainer").addClass("viewed");
2179
2180	};
2181
2182
2183	var openDropDownList = function(event){
2184
2185		//jquery vars
2186		var $this = $(this);
2187		var $dropContainer = $this.siblings(".dropDownItems");
2188		var $dropItems = $dropContainer.find(".dropDownItem");
2189
2190		//check opened
2191		if(!$dropContainer.hasClass("opened")){
2192
2193			//show
2194			$dropContainer.addClass("opened");
2195
2196			//set opened flag
2197			dropDownListOpened = true;
2198
2199		}
2200
2201
2202		//close
2203		else{
2204			closeDropDownList();
2205		}
2206
2207		//block actions
2208		return event.preventDefault();
2209
2210	};
2211
2212	var selectDropDown = function(event){
2213
2214		//jquery vars
2215		var $this = $(this);
2216
2217		//vars
2218		var $dropContainer = $this.parents(".dropDownList");
2219		var $dropItems = $dropContainer.find(".dropDownItem");
2220		var $selectedContainer = $dropContainer.find(".dropDownSelected");
2221
2222		//other
2223		var selected = $this.hasClass("selected");
2224
2225		//reset
2226		$dropItems.removeClass("selected");
2227
2228		//set selected
2229		$this.addClass("selected");
2230
2231		//change selected html
2232		$selectedContainer.html($this.html());
2233
2234		//show
2235		$dropContainer.find(".dropDownItems").removeClass("opened");
2236
2237		//set opened flag
2238		dropDownListOpened = false;
2239
2240		//check selected
2241		if(selected == false){
2242
2243			//activate event
2244			$dropContainer.trigger("change");
2245
2246		}
2247
2248		//block actions
2249		return event.preventDefault();
2250
2251	}
2252
2253	var closeDropDownList = function(){
2254
2255		//check opened items
2256		if(dropDownListOpened === true){
2257
2258			//hide
2259			$(".dropDownItems").removeClass("opened");
2260
2261			//set opened flag
2262			dropDownListOpened = false;
2263
2264		}
2265
2266	}
2267
2268	const handleProductGetQuickBuyForm = async function (event) {
2269
2270		event.preventDefault();
2271
2272		const button = event.currentTarget;
2273		const productId = button.dataset.id;
2274
2275		if (button.classList.contains("disabled")) {
2276			return;
2277		}
2278
2279		if (!productId) {
2280			console.error("Cannot find product ID from `data-id` attribute");
2281			return;
2282		}
2283
2284		try {
2285			const url = new URL(ajaxPath, window.location.origin);
2286			url.searchParams.append("action", "getProductQuickBuyForm");
2287			url.searchParams.append("productId", productId);
2288			url.searchParams.append("siteId", SITE_ID);
2289
2290			const request = new Request(url, {
2291				method: "GET"
2292			});
2293
2294			await componentLoader.load(request);
2295		} catch (error) {
2296			console.error(error.message, error.reasons?.join("\n"));
2297		}
2298	};
2299
2300	//lazy load pictures
2301	checkLazyItems();
2302
2303	//other binds
2304	$(document).on("click", ".dropDownList .dropDownSelected", openDropDownList);
2305	$(document).on("click", ".dropDownList .dropDownItem", selectDropDown);
2306	$(document).on("click", ".dropDownList", function(event){event.stopImmediatePropagation()});
2307	$(document).on("click", closeDropDownList);
2308
2309	//sku drop down
2310	$(document).on("click", ".oSkuDropDownProperty .oSkuCheckedItem", openSkuDropDown);
2311	$(document).on("click", ".oSkuDropDownProperty .oSkuDropdownListItem", selectSkuDropDownValue);
2312	$(document).on("click", ".oSkuDropdown", function(event){event.stopImmediatePropagation()});
2313	$(document).on("click", closeSkuDropDown);
2314
2315	$(document).on("click", ".catalogQtyBlock .catalogPlus", catalogAddCartPlus);
2316	$(document).on("click", ".catalogQtyBlock .catalogMinus", catalogAddCartMinus);
2317	$(document).on("change", ".catalogQtyBlock .catalogQty", catalogAddCartChange);
2318
2319	$(document).on("click", ".skuPropertyLink", selectSku);
2320	$(document).on("click", ".subscribe:not(.unSubscribe)", addSubscribe);
2321	$(document).on("click", ".unSubscribe", unSubscribe);
2322	$(document).on("click", ".addCart, .add-cart", addCart);
2323
2324	//mobile tabs
2325	$(document).on("click", "#footer .heading", toggleMobileTabs);
2326
2327	$(document).on("click", ".addWishlist", addWishlist);
2328	$(document).on("click", ".addCompare", addCompare);
2329	$(document).on("click", ".fastBack", openFastBack);
2330	$(document).on("click", ".requestPrice", getRequestPrice);
2331	$(document).on("click", "#requestPriceSubmit", sendRequestPrice);
2332	$(document).on("click", "#fastBuyFormSubmit", sendFastBack);
2333	$(document).on("click", "#appFastBuy .closeWindow", closeFastBack);
2334	$(document).on("click", "#requestPrice .closeWindow", closeRequestPrice);
2335	$(document).on("click", ".removeFromWishlist", removeFromWishlist);
2336
2337	$(document).on("click", "#fastViewStores .fastViewStoresExit", closeStoresWindow);
2338	$(document).on("click", ".getStoresWindow", getStoresWindow);
2339
2340	$(document).on("click", "#appProductPriceVariant .appPriceVariantExit", closePricesWindow);
2341	$(document).on("click", ".getPricesWindow", getPricesWindow);
2342
2343	$(document).on("click", ".getFastView", getFastView);
2344
2345    $(document).on("click", "#catalogMenuHeading", slideCollapsedBlock);
2346    $(document).on("click", "#smartFilter .heading", openSmartFiler);
2347    $(document).on("click", "#nextSection .title", openSmartSections);
2348
2349    //product quantity binds
2350    $(document).on("keypress", ".quantityContainer .quantity", productQuantityKeypress);
2351    $(document).on("change", ".quantityContainer .quantity", productQuantityChange);
2352    $(document).on("focus", ".quantityContainer .quantity", productQuantityFocus);
2353    $(document).on("click", ".quantityContainer .minus", productQuantityMinus);
2354    $(document).on("click", ".quantityContainer .plus", productQuantityPlus);
2355
2356	$(document).on("click", ".quickBuy", handleProductGetQuickBuyForm);
2357
2358    $(document).on("click", "#appFastView .appFastViewContainer, #fastViewStores .fastViewStoresContainer, #appProductPriceVariant, #appFastBuyContainer, .getFastView, .getPricesWindow, .fastBack, .addCart, #requestPriceContainer, .requestPrice", function(event){
2359    	return event.stopImmediatePropagation();
2360    });
2361
2362    //close elements after document click
2363    $(document).on("click", closeElementsAfterClick);
2364
2365	// ajax all error;
2366
2367	$(document).ajaxError(function( event, request, settings ) {
2368		console.error("Error requesting page " + settings.url);
2369	});
2370
2371});
2372
2373var formatPrice = function(data) {
2374	var price = String(data).split('.');
2375	var strLen = price[0].length;
2376	var str = "";
2377
2378	for (var i = strLen; i > 0; i--) {
2379		str = str + ((!(i % 3) ? " " : "") + price[0][strLen - i]);
2380	}
2381
2382	return str + (price[1] != undefined ? "." + price[1] : "");
2383}
2384
2385function validateEmail(sEmail){
2386
2387	//vars
2388    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
2389
2390    //check
2391    if (filter.test(sEmail)) {
2392        return true;
2393    }
2394
2395    else{
2396        return false;
2397    }
2398
2399}

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.