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) + "¶ms=" + 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.