1ACC.cart = { 2 3 _autoload: [ 4 "bindHelp", 5 "cartRestoration", 6 "bindCartPage", 7 "bindMultiDEntryRemoval", 8 "bindMultidCartProduct", 9 ["bindApplyVoucher", $("#js-voucher-apply-btn").length != 0], 10 "validateShareCartForm", 11 "bindShareCartSend", 12 "bindShareCartValidation", 13 "bindSubmitFormLink", 14 ["handleCartSummary", $("body").hasClass('page-cartPage')], 15 "bindQuantityControls", 16 "bindSaveForLater", 17 "bindSaveForLaterVisibility", 18 "bindExportOrderCta", 19 "binBidRequestGroup", 20 "binBidRequestAddressGroup", 21 "showSpecialPricingMessageOnCouponApply", 22 "alignContinueShoppingWithTotal" 23 ], 24 25 alignContinueShoppingWithTotal: function () { 26 function align() { 27 var $continue = $('.cart-action--continue'); 28 var $totalCol = $('.item__list--header .item__total--column'); 29 var $row = $continue.closest('.cart-section-header'); 30 if (!$continue.length || !$totalCol.length || !$row.length) { return; } 31 if (!$totalCol.is(':visible')) { 32 $continue.css('margin-right', ''); 33 return; 34 } 35 var totalRight = $totalCol[0].getBoundingClientRect().right; 36 var rowRight = $row[0].getBoundingClientRect().right; 37 var gap = rowRight - totalRight; 38 $continue.css('margin-right', Math.max(0, gap) + 'px'); 39 } 40 41 align(); 42 $(window).on('resize', align); 43 $(window).on('load', align); 44 }, 45 46 bindHelp: function () { 47 $(document).on("click", ".js-cart-help", function (e) { 48 e.preventDefault(); 49 ACC.cart.showHelp($(this)); 50 }) 51 $(document).on("click", "#dismiss-cart-flyout", function (e) { 52 $(".cart-flyout-section, #cboxOverlay,#colorbox").hide(); 53 }) 54 55 }, 56 57 showHelp: function (cta) { 58 var title = cta.data("title"), 59 content = cta.next(".js-cart-help-content").html(); 60 ACC.colorbox.open( 61 ACC.common.encodeHtml(title), 62 { 63 html: content, 64 width: "800px" 65 } 66 ); 67 }, 68 69 cartRestoration: function () { 70 $('.cartRestoration').click(function () { 71 var sCartUrl = $(this).data("cartUrl"); 72 window.location = sCartUrl; 73 }); 74 }, 75 76 bindCartPage: function () { 77 // link to display the multi-d grid in read-only mode 78 $(document).on("click", '.js-show-editable-grid', function (event) { 79 ACC.cart.populateAndShowEditableGrid(this, event); 80 }); 81 }, 82 83 bindMultiDEntryRemoval: function () { 84 $(document).on("click", '.js-submit-remove-product-multi-d', function () { 85 var itemIndex = $(this).data("index"); 86 var $form = $(document).find('#updateCartForm' + itemIndex); 87 var initialCartQuantity = $form.find('input[name=initialQuantity]'); 88 var cartQuantity = $form.find('input[name=quantity]'); 89 var entryNumber = $form.find('input[name=entryNumber]').val(); 90 var productCode = $form.find('input[name=productCode]').val(); 91 92 cartQuantity.val(0); 93 initialCartQuantity.val(0); 94 95 ACC.track.trackRemoveFromCart(productCode, initialCartQuantity, cartQuantity.val()); 96 97 var method = $form.attr("method") ? $form.attr("method").toUpperCase() : "GET"; 98 $.ajax({ 99 url: $form.attr("action"), 100 data: $form.serialize(), 101 type: method, 102 dataType: "text", 103 success: function (data) { 104 location.reload(); 105 }, 106 error: function () { 107 console.log("Failed to remove quantity. Error details [" + xht + ", " + textStatus + ", " + ex + "]"); 108 } 109 110 }); 111 112 }); 113 }, 114 115 populateAndShowEditableGrid: function (element, event) { 116 var readOnly = $(element).data("readOnlyMultidGrid"); 117 var itemIndex = $(element).data("index"); 118 grid = $(document).find("#ajaxGrid" + itemIndex); 119 120 var gridEntries = $(document).find('#grid' + itemIndex); 121 var strSubEntries = gridEntries.data("sub-entries"); 122 var arrSubEntries = strSubEntries.split(','); 123 var firstVariantCode = arrSubEntries[0].split(':')[0]; 124 125 $(element).toggleClass('open'); 126 127 var targetUrl = gridEntries.data("target-url"); 128 129 var mapCodeQuantity = new Object(); 130 for (var i = 0; i < arrSubEntries.length; i++) { 131 var arrValue = arrSubEntries[i].split(":"); 132 mapCodeQuantity[arrValue[0]] = arrValue[1]; 133 } 134 135 if (grid.children('#cartOrderGridForm').length > 0) { 136 grid.slideToggle("slow"); 137 } 138 else { 139 var method = "GET"; 140 $.ajax({ 141 url: targetUrl,
142 data: {productCode: firstVariantCode, readOnly: readOnly}, 143 type: method, 144 dataType: 'html', 145 success: function (data) { 146 grid.html(data); 147 $("#ajaxGrid").removeAttr('id'); 148 var $gridContainer = grid.find(".product-grid-container"); 149 var numGrids = $gridContainer.length; 150 for (var i = 0; i < numGrids; i++) { 151 ACC.cart.getProductQuantity($gridContainer.eq(i), mapCodeQuantity, i); 152 } 153 grid.slideDown("slow"); 154 ACC.cart.coreCartGridTableActions(element, mapCodeQuantity); 155 ACC.productorderform.coreTableScrollActions(grid.children('#cartOrderGridForm')); 156 }, 157 error: function (xht, textStatus, ex) { 158 console.log("Failed to get variant matrix. Error details [" + xht + ", " + textStatus + ", " + ex + "]"); 159 } 160 161 }); 162 } 163 }, 164 165 166 coreCartGridTableActions: function (element, mapCodeQuantity) { 167 ACC.productorderform.bindUpdateFutureStockButton(".update_future_stock_button"); 168 ACC.productorderform.bindVariantSelect($(".variant-select-btn"), 'cartOrderGridForm'); 169 var itemIndex = $(element).data("index"); 170 var skuQuantityClass = '.sku-quantity'; 171 172 var quantityBefore = 0; 173 var grid = $(document).find('#ajaxGrid' + itemIndex + " .product-grid-container"); 174 175 grid.on('focusin', skuQuantityClass, function (event) { 176 quantityBefore = jQuery.trim(this.value); 177 178 $(this).parents('tr').next('.variant-summary').remove(); 179 if ($(this).parents('table').data(ACC.productorderform.selectedVariantData)) { 180 ACC.productorderform.selectedVariants = $(this).parents('table').data(ACC.productorderform.selectedVariantData); 181 } else { 182 ACC.productorderform.selectedVariants = []; 183 } 184 185 if (quantityBefore == "") { 186 quantityBefore = 0; 187 this.value = 0; 188 } 189 }); 190 191 grid.on('focusout keypress', skuQuantityClass, function (event) { 192 var code = event.keyCode || event.which || event.charCode; 193 194 if (code != 13 && code != undefined) { 195 return; 196 } 197 198 var quantityAfter = 0; 199 var gridLevelTotalPrice = ""; 200 201 var indexPattern = "[0-9]+"; 202 var currentIndex = parseInt($(this).attr("id").match(indexPattern)); 203 204 this.value = ACC.productorderform.filterSkuEntry(this.value); 205 206 quantityAfter = jQuery.trim(this.value); 207 var variantCode = $(document).find("input[id='cartEntries[" + currentIndex + "].sku']").val(); 208 209 if (isNaN(jQuery.trim(this.value))) { 210 this.value = 0; 211 } 212 213 if (quantityAfter == "") { 214 quantityAfter = 0; 215 this.value = 0; 216 } 217 218 var $gridTotalValue = grid.find("[data-grid-total-id=" + 'total_value_' + currentIndex + "]"); 219 var currentPrice = $(document).find("input[id='productPrice[" + currentIndex + "]']").val(); 220 221 if (quantityAfter > 0) { 222 gridLevelTotalPrice = ACC.productorderform.formatTotalsCurrency(parseFloat(currentPrice) * parseInt(quantityAfter)); 223 } 224 225 $gridTotalValue.text(gridLevelTotalPrice); 226 227 var _this = this; 228 var priceSibling = $(this).siblings('.price'); 229 var propSibling = $(this).siblings('.variant-prop'); 230 var currentSkuId = $(this).next('.td_stock').data('sku-id'); 231 var currentBaseTotal = $(this).siblings('.data-grid-total'); 232 233 if (this.value != quantityBefore) { 234 var newVariant = true;
235 ACC.productorderform.selectedVariants.forEach(function (item, index) { 236 if (item.id === currentSkuId) { 237 newVariant = false; 238 239 if(_this.value === '0' || _this.value === 0){ 240 ACC.productorderform.selectedVariants.splice(index, 1); 241 } else { 242 ACC.productorderform.selectedVariants[index].quantity = _this.value; 243 ACC.productorderform.selectedVariants[index].total = ACC.productorderform.updateVariantTotal(priceSibling, _this.value, currentBaseTotal); 244 } 245 } 246 }); 247 248 if(newVariant && this.value > 0){ 249 // update variantData 250 ACC.productorderform.selectedVariants.push({ 251 id: currentSkuId, 252 size: propSibling.data('variant-prop'), 253 quantity: _this.value, 254 total: ACC.productorderform.updateVariantTotal(priceSibling, _this.value, currentBaseTotal) 255 }); 256 } 257 } 258 ACC.productorderform.showSelectedVariant($(this).parents('table')); 259 if (this.value > 0 && this.value != quantityBefore) { 260 $(this).parents('table').addClass('selected'); 261 } else { 262 if (ACC.productorderform.selectedVariants.length === 0) { 263 $(this).parents('table').removeClass('selected').find('.variant-summary').remove(); 264 265 } 266 } 267 268 if (quantityBefore != quantityAfter) { 269 var method = "POST"; 270 $.ajax({ 271 url: ACC.config.encodedContextPath + '/cart/updateMultiD', 272 data: {productCode: variantCode, quantity: quantityAfter, entryNumber: -1}, 273 type: method, 274 success: function (data, textStatus, xhr) { 275 ACC.cart.refreshCartData(data, -1, quantityAfter, itemIndex); 276 mapCodeQuantity[variantCode] = quantityAfter; 277 }, 278 error: function (xhr, textStatus, error) { 279 var redirectUrl = xhr.getResponseHeader("redirectUrl"); 280 var connection = xhr.getResponseHeader("Connection"); 281 // check if error leads to a redirect 282 if (redirectUrl !== null) { 283 window.location = redirectUrl; 284 // check if error is caused by a closed connection 285 } else if (connection === "close") { 286 window.location.reload(); 287 } 288 } 289 }); 290 } 291 }); 292 }, 293 294 refreshCartData: function (cartData, entryNum, quantity, itemIndex) { 295 // if cart is empty, we need to reload the whole page 296 if (cartData.entries.length == 0) { 297 location.reload(); 298 } 299 else { 300 var form; 301 302 if (entryNum == -1) // grouped item 303 { 304 form = $(document).find('.js-qty-form' + itemIndex); 305 var productCode = form.find('input[name=productCode]').val(); 306 307 var quantity = 0; 308 var entryPrice = 0; 309 for (var i = 0; i < cartData.entries.length; i++) { 310 var entry = cartData.entries[i]; 311 if (entry.product.code == productCode) { 312 quantity = entry.quantity; 313 entryPrice = entry.totalPrice; 314 ACC.cart.updateEntryNumbersForCartMenuData(entry); 315 break; 316 } 317 } 318 319 if (quantity == 0) { 320 location.reload(); 321 } 322 else { 323 form.find(".qtyValue").text(quantity); 324 form.parent().parent().find(".js-item-total").text(entryPrice.formattedValue); 325 } 326 } 327 328 ACC.cart.refreshCartPageWithJSONResponse(cartData); 329 } 330 }, 331 332 refreshCartPageWithJSONResponse: function (cartData) { 333 // refresh mini cart 334 ACC.minicart.updateMiniCartDisplay(); 335 $('.js-cart-top-totals').text($("#cartTopTotalSectionTemplate").tmpl(cartData)); 336 $('div .cartpotproline').remove(); 337 $('div .cartproline').remove(); 338 $('.js-cart-totals').remove(); 339 $('#ajaxCartPotentialPromotionSection').text($("#cartPotentialPromotionSectionTemplate").tmpl(cartData)); 340 $('#ajaxCartPromotionSection').text($("#cartPromotionSectionTemplate").tmpl(cartData)); 341 $('#ajaxCart').text($("#cartTotalsTemplate").tmpl(cartData)); 342 ACC.quote.bindQuoteDiscount(); 343 }, 344 345 updateEntryNumbersForCartMenuData: function (entry) { 346 var entryNumbers = ""; 347 $.each(entry.entries, function(index, subEntry) { 348 if(index != 0){ 349 entryNumbers = entryNumbers + ";"; 350 } 351 entryNumbers = entryNumbers + subEntry.entryNumber; 352 }); 353 $('.js-execute-entry-action-button').data('actionEntryNumbers',entryNumbers); 354 }, 355 356 getProductQuantity: function (gridContainer, mapData, i) { 357 var tables = gridContainer.find("table"); 358 359 $.each(tables, function (index, currentTable) { 360 var skus = jQuery.map($(currentTable).find("input[type='hidden'].sku"), function (o) { 361 return o.value 362 }); 363 var quantities = jQuery.map($(currentTable).find("input[type='textbox'].sku-quantity"), function (o) { 364 return o 365 }); 366 var selectedVariants = []; 367 368 $.each(skus, function (index, skuId) {
369 var quantity = mapData[skuId]; 370 if (quantity != undefined) { 371 quantities[index].value = quantity; 372 373 var indexPattern = "[0-9]+"; 374 var currentIndex = parseInt(quantities[index].id.match(indexPattern)); 375 var gridTotalValue = gridContainer.find("[data-grid-total-id=" + 'total_value_' + currentIndex + "]"); 376 var gridLevelTotalPrice = ""; 377 var currentPrice = $(document).find("input[id='productPrice[" + currentIndex + "]']").val(); 378 if (quantity > 0) { 379 gridLevelTotalPrice = ACC.productorderform.formatTotalsCurrency(parseFloat(currentPrice) * parseInt(quantity)); 380 } 381 gridTotalValue.text(gridLevelTotalPrice); 382 383 selectedVariants.push({ 384 id: skuId, 385 size: $(quantities[index]).siblings('.variant-prop').data('variant-prop'), 386 quantity: quantity, 387 total: gridLevelTotalPrice 388 }); 389 } 390 }); 391 392 if (selectedVariants.length != 0) { 393 $.tmpl(ACC.productorderform.$variantSummaryTemplate, { 394 variants: selectedVariants 395 }).appendTo($(currentTable).addClass('selected')); 396 $(currentTable).find('.variant-summary .variant-property').text($(currentTable).find('.variant-detail').data('variant-property')); 397 $(currentTable).data(ACC.productorderform.selectedVariantData, selectedVariants); 398 } 399 }); 400 401 }, 402 403 404 binBidRequestGroup: function () { 405 $(document).on("change", "input[name='bid_request_group']", function () { 406 if (this.id === "bidRequest") { 407 $(".closeshare").show(); 408 $(".openshare").hide(); 409 $(".closeshareMessageMail, .openshareMessage").show(); 410 411 $('#toggle-options-emails-share-cart').removeClass('open').show(); 412 $('#share-cart-popup-add-recipient').hide(); 413 $('.share-cart-popup-add-recipient-title').show(); 414 415 $('label.error').remove(); 416 $('#cartShareForm .form-control').removeClass('error'); 417 418 $('#requierdToName1').val(''); 419 $('#requierdToEmail1').val(''); 420 $('#requierdToName2').val(''); 421 $('#requierdToEmail2').val(''); 422 $('#requierdToName3').val(''); 423 $('#requierdToEmail3').val(''); 424 $('#cartShareForm #message').val(''); 425 } else if (this.id === "bidRequestNone") { 426 $(".openshare, .openshareMessage").show(); 427 $(".closeshare, .closeshareMessageMail, .closeshareAddress").hide(); 428 $("input[name='bid_request_address_group']").prop("checked", false); 429 430 $('label.error').remove(); 431 $('#cartShareForm .form-control').removeClass('error'); 432 433 $('#fromSchoolName').val(''); 434 $('#fromEmailAddress').val(''); 435 $('#fromPhoneNumber').val(''); 436 $('#fromStreet').val(''); 437 $('#fromCity').val(''); 438 $('#fromState').val(''); 439 $('#fromZipcode').val(''); 440 $('#fromBillOrganizationName').val(''); 441 $('#fromBillStreet').val(''); 442 $('#fromBillCity').val(''); 443 $('#fromBillState').val(''); 444 $('#fromBillZipcode').val(''); 445 $('#cartShareForm #message').val(''); 446 } 447 }); 448 }, 449 450 binBidRequestAddressGroup: function () { 451 $(document).on("change", "input[name='bid_request_address_group']", function () { 452 if (this.id === "bidRequestAddress") { 453 $(".closeshareMessageMail, .openshareMessage").show(); 454 $(".closeshareAddress").hide(); 455 456 $('#fromBillOrganizationName').val(''); 457 $('#fromBillStreet').val(''); 458 $('#fromBillCity').val(''); 459 $('#fromBillState').val(''); 460 $('#fromBillZipcode').val(''); 461 $('#cartShareForm #message').val(''); 462 } else if (this.id === "bidRequestNoneAddress") { 463 $(".closeshareAddress,.openshareMessage, .closeshareMessageMail").show(); 464 $('#cartShareForm #message').val(''); 465 } 466 }); 467 }, 468 469 bindMultidCartProduct: function () { 470 // link to display the multi-d grid in read-only mode 471 $(document).on("click",'.showQuantityProduct', function (event){ 472 ACC.multidgrid.populateAndShowGrid(this, event, true); 473 }); 474 475 // link to display the multi-d grid in read-only mode 476 $(document).on("click",'.showQuantityProductOverlay', function (event){ 477 ACC.multidgrid.populateAndShowGridOverlay(this, event); 478 }); 479 480 }, 481 482 bindApplyVoucher: function () { 483 484 $("#js-voucher-apply-btn").on("click", function (e) { 485 ACC.cart.handleApplyVoucher(e); 486 }); 487 488 $("#js-voucher-code-text").on("keypress", function (e) { 489 var code = (e.keyCode ? e.keyCode : e.which); 490 if (code == 13) { 491 ACC.cart.handleApplyVoucher(e); 492 } 493 }); 494 }, 495 496 handleApplyVoucher: function (e) { 497 var voucherCode = $.trim($("#js-voucher-code-text").val()); 498 if (voucherCode != '' && voucherCode.length > 0) { 499 $("#applyVoucherForm").submit(); 500 } 501 }, 502 503 bindShareCartValidation: function() { 504 ACC.cart.validateShareCartForm('#cartShareForm'); 505 }, 506 507 validateShareCartForm: function($formId) { 508 $($formId).validate({ 509 rules: { 510 fromName: { 511 required: true 512 }, 513 bid_request_group: { 514 required: true 515 }, 516 fromEmail: { 517 required: true, 518 email: true 519 }, 520 fromSchoolName: { 521 required: function() { 522 return $("#bidRequest").is(":checked"); 523 }, 524 }, 525 fromPhoneNumber: { 526 required: function() { 527 return $("#bidRequest").is(":checked"); 528 }, 529 }, 530 fromEmailAddress: { 531 required: function() { 532 return $("#bidRequest").is(":checked"); 533 }, 534 email: function() { 535 return $("#bidRequest").is(":checked"); 536 } 537 }, 538 fromStreet: { 539 required: function() { 540 return $("#bidRequest").is(":checked"); 541 }, 542 }, 543 fromCity: { 544 required: function() { 545 return $("#bidRequest").is(":checked"); 546 }, 547 }, 548 fromState: { 549 required: function() { 550 return $("#bidRequest").is(":checked"); 551 }, 552 }, 553 fromZipcode: { 554 required: function() { 555 return $("#bidRequest").is(":checked"); 556 }, 557 }, 558 "toEmails[0]": { 559 required: function() { 560 return $("#bidRequestNone").is(":checked"); 561 }, 562 email: function() { 563 return $("#bidRequestNone").is(":checked"); 564 } 565 }, 566 "toNames[0]": { 567 required: function() { 568 return $("#bidRequestNone").is(":checked"); 569 } 570 }, 571 "toEmails[1]": { 572 email: true 573 }, 574 "toEmails[2]": { 575 email: true 576 } 577 578 }, 579 errorPlacement: function(error, element) { 580 if (element.attr("name") === "bid_request_group") { 581 const $fieldset = $(".errorPlace");
582 $fieldset.find("label.error").remove(); 583 error.css("margin-top", "-5px"); 584 error.appendTo($fieldset); 585 } else { 586 error.insertAfter(element); 587 } 588 }, 589 highlight: function (element) { 590 if (element.name === "bid_request_group") { 591 $("input[name='bid_request_group']").addClass("radio-error"); 592 } else { 593 $(element).addClass("input-error"); 594 } 595 }, 596 unhighlight: function (element) { 597 if (element.name === "bid_request_group") { 598 $("input[name='bid_request_group']").removeClass("radio-error"); 599 } else { 600 $(element).removeClass("input-error"); 601 } 602 } 603 }); 604 }, 605 606 clearShareCartData: function() { 607 $('#fromName').val(''); 608 $('#fromEmail').val(''); 609 $('#fromSchoolName').val(''); 610 $('#fromEmailAddress').val(''); 611 $('#fromPhoneNumber').val(''); 612 $('#fromStreet').val(''); 613 $('#fromCity').val(''); 614 $('#fromState').val(''); 615 $('#fromZipcode').val(''); 616 $('#fromBillOrganizationName').val(''); 617 $('#fromBillStreet').val(''); 618 $('#fromBillCity').val(''); 619 $('#fromBillState').val(''); 620 $('#fromBillZipcode').val(''); 621 622 // Uncheck all radio buttons 623 $("input[name='bid_request_group']").prop("checked", false); 624 $("input[name='bid_request_address_group']").prop("checked", false); 625 626 // Hide all conditional sections 627 $(".closeshare").hide(); 628 $(".closeshareMessageMail").hide(); 629 $(".closeshareAddress").hide(); 630 $(".openshare").hide(); 631 $(".openshareMessage").hide(); 632 633 $('#requierdToName1').val(''); 634 $('#requierdToEmail1').val(''); 635 636 $('#requierdToName2').val(''); 637 $('#requierdToEmail2').val(''); 638 639 $('#requierdToName3').val(''); 640 $('#requierdToEmail3').val(''); 641 642 $('#cartShareForm #message').val(''); 643 $('label.error').remove(); 644 $('#cartShareForm .form-control').removeClass('error'); 645 646 $('#toggle-options-emails-share-cart').removeClass('open').show(); 647 $('#share-cart-popup-add-recipient').hide(); 648 $('.share-cart-popup-add-recipient-title').show(); 649 }, 650 651 bindShareCartSend: function() { 652 $(document).on("click",'.share-cart-popup-modal-link', function (e) { 653 //when this link is clicked, we want to always show the share cart form 654 //it could be hidden after an ajax request is made, since page doesnt refresh, we want to show form again 655 var $modalContentAjax = $('#modal-content-share-cart-ajax-response'); 656 var $modalContentShareCart = $('#modal-content-share-cart-form'); 657 var $shareCartForm = $('#cartShareForm'); 658 var $serverSideErrorsElement = $('#share-cart-server-side-errors'); 659 $modalContentShareCart.show(); 660 $serverSideErrorsElement.html(''); 661 $shareCartForm.show(); 662 $modalContentAjax.hide(); 663 }); 664 665 $(document).on("click",'#toggle-options-emails-share-cart', function (e) { 666 e.preventDefault(); 667 var $this = $(this); 668 if ($this.hasClass('open')) { 669 $this.removeClass('open'); 670 $('#share-cart-popup-add-recipient').hide(); 671 $('.share-cart-popup-add-recipient-title').show(); 672 } else { 673 $this.addClass('open'); 674 $('#share-cart-popup-add-recipient').show(); 675 $('.share-cart-popup-add-recipient-title').hide(); 676 } 677 }); 678 679 $(document).on("click",'.clear-share-cart-data', function (e) { 680 e.preventDefault(); 681 ACC.cart.clearShareCartData(); 682 }); 683 684 685 686 $(document).on("click",'#shareCartPopupSend', function (e){ 687 688 var $this = $(this); 689 var cartEntryActionForm = $("#cartShareForm"); 690 $validFormFlag = $("#cartShareForm").valid(); 691 //$validFormFlag = true; 692 if ($validFormFlag) { 693 console.log('valid form'); 694 if (!$('input[name="bid_request_address_group"]:checked').length) { 695 if (!$('#defaultBidRequestInput').length) { 696 $('<input>') 697 .attr({ 698 type: 'hidden', 699 id: 'defaultBidRequestInput', 700 name: 'bid_request_address_group', 701 value: 'true' 702 }).appendTo('#cartShareForm'); 703 } 704 } else { 705 $('#defaultBidRequestInput').remove(); 706 } 707 $.ajax({ 708 url: cartEntryActionForm.attr('action'), 709 cache: false, 710 type: cartEntryActionForm.attr('method'), 711 data: cartEntryActionForm.serialize(), 712 success: function(result) { 713 var $shareCartForm = $('#cartShareForm'); 714 var $serverSideErrorsElement = $('#share-cart-server-side-errors'); 715 var $shareCartModalBody = $('#share-cart-modal-body');
716 var $modalContentAjax = $('#modal-content-share-cart-ajax-response'); 717 var $modalContentShareCart = $('#modal-content-share-cart-form'); 718 719 var $successTextEl = $('#success-message-text-ajax'); 720 var $successHeadingEl = $('#success-message-heading-ajax'); 721 var $failTextEl = $('#fail-message-text-ajax'); 722 var $failHeadingEl = $('#fail-message-heading-ajax'); 723 724 if(result.indexOf('bindingResult') !== -1) { 725 // get server side errors and append to fields-errors 726 $serverSideErrorsElement.html(result.split(':')[1]); 727 } else { 728 //clear share cart modal and get ready for response 729 $shareCartForm.hide(); 730 if(result == 'Success') { 731 $modalContentShareCart.hide(); 732 $modalContentAjax.show(); 733 $successHeadingEl.show(); 734 $successTextEl.show(); 735 $failTextEl.hide(); 736 $failHeadingEl.hide(); 737 ACC.cart.clearShareCartData(); 738 } else { 739 $modalContentShareCart.hide(); 740 $modalContentAjax.show(); 741 $successHeadingEl.hide(); 742 $successTextEl.hide(); 743 $failTextEl.show(); 744 $failHeadingEl.show(); 745 } 746 747 $modalContentAjax; 748 } 749 750 } 751 }); 752 } else { 753 console.log('not valid - show errors'); 754 } 755 756 757 }); 758 }, 759 760 761 bindSubmitFormLink: function () { 762 $('.js-submitform-link').on("click", function (event) { 763 $(this).closest('form').submit(); 764 }); 765 }, 766 767 handleCartSummary: function () { 768 enquire.register("screen and (min-width:" + screenSm + ")", { 769 match: function () { 770 ACC.cart.handleCartSummaryScroll(); 771 } 772 }); 773 enquire.register("screen and (max-width:" + screenXsMax + ")", { 774 match: function () { 775 ACC.cart.clearCartSummaryScroll(); 776 } 777 }); 778 }, 779 780 handleCartSummaryScroll: function(startScrollPos, stopScrollPos) { 781 var $listing = $(".js-cart-listing"), 782 $summary = $(".js-cart-summary"), 783 $cartItems = $listing.find(".cart-items"); 784 785 ACC.cart.clearCartSummaryScroll(); 786 787 if($listing.length > 0) { 788 var titleHeight = $listing.find(".cart-header").outerHeight(), 789 summaryHeight = titleHeight + $summary.outerHeight(), 790 summaryOffset = $(".js-saveForLater").length ? 0 : 38, 791 voucherOffSet = $(".js-voucher-respond").hasClass("active") ? 0 : 30, 792 stopScrollPos = ($listing.offset().top + $listing.outerHeight()) - $summary.outerHeight() - summaryOffset, 793 initalPos = 80; 794 795 if(($summary.outerHeight() + titleHeight + voucherOffSet) > $listing.outerHeight()) { 796 $listing.css("min-height", summaryHeight + voucherOffSet); 797 } 798 else if($cartItems.length > 0) { 799 var startScrollPos = $cartItems.offset().top; 800 ACC.cart.summaryScrollActive = true; 801 $(window) 802 .scroll(function(event) { 803 ACC.cart.setCartSummaryScroll($listing, $summary, startScrollPos, stopScrollPos, initalPos); 804 }) 805 .resize(function() { 806 ACC.cart.summaryScrollActive = true; 807 startScrollPos = $cartItems.offset().top; 808 stopScrollPos = ($listing.offset().top + $listing.outerHeight()) - $summary.outerHeight() - summaryOffset; 809 ACC.cart.setCartSummaryScroll($listing, $summary, startScrollPos, stopScrollPos, initalPos); 810 }); 811 } 812 } 813 }, 814 815 setCartSummaryScroll: function($listing, $summary, startScrollPos, stopScrollPos, initalPos) { 816 var currentPos = $(window).scrollTop(); 817 if(currentPos > startScrollPos && currentPos < stopScrollPos){ 818 var newPos = initalPos + (currentPos - startScrollPos); 819 ACC.cart.summaryScrollActive = true; 820 $summary.css("top", newPos); 821 } else { 822 ACC.cart.resetCartSummaryScroll($listing, $summary, startScrollPos, stopScrollPos, initalPos); 823 } 824 }, 825 826 resetCartSummaryScroll: function($listing, $summary, startScrollPos, stopScrollPos, initalPos) { 827 if(ACC.cart.summaryScrollActive == true) { 828 var currentPos = $(window).scrollTop(); 829 830 if(currentPos < startScrollPos || stopScrollPos < startScrollPos){ 831 $summary.removeAttr("style"); 832 } 833 else if(currentPos > stopScrollPos){ 834 $summary.css("top", stopScrollPos - $listing.offset().top); 835 } 836 ACC.cart.summaryScrollActive = false;
837 } 838 }, 839 840 clearCartSummaryScroll: function() { 841 $(".js-cart-listing").removeAttr("style"); 842 $(".js-cart-summary").removeAttr("style"); 843 $(window).off('scroll resize'); 844 }, 845 846 bindQuantityControls: function() { 847 $(".js-qty-control:not(.disabled)").on("click", function() { 848 var input = $(this).siblings(".js-update-entry-quantity-input"), 849 amount = $(this).hasClass("minus") ? -1 : 1; 850 851 input.val(parseInt(input.val()) + amount); 852 $(this).closest('form').submit(); 853 }); 854 }, 855 856 setCartLivePerson: function() { 857 setTimeout(function(){ 858 $(".js-liveperson").removeClass("hide").click(function(){ 859 $(".js-liveperson-source .LPMcontainer").click(); 860 }); 861 }, 1000); 862 }, 863 864 bindSaveForLater: function() { 865 $(".js-savelater-cta").on("click", function(ev) { 866 ev.preventDefault(); 867 868 if($(this).hasClass("guest-user")) { 869 ACC.cart.showHelp($(this)); 870 } else { 871 $(this).closest('form').submit(); 872 } 873 }); 874 }, 875 876 bindSaveForLaterVisibility: function() { 877 enquire.register("screen and (max-width:" + screenXsMax + ")", { 878 match: function () { 879 $(document).on("click",".js-saveForLater", function(e){ 880 $(".js-saveForLater, .js-saveForLater-items").toggleClass("items-visible"); 881 }); 882 }, 883 unmatch: function () { 884 $(document).off("click",".js-saveForLater"); 885 } 886 }); 887 }, 888 889 bindExportOrderCta: function() { 890 $(".js-export-order-cta").on("click", function(ev) { 891 ev.preventDefault(); 892 893 var winTop = (screen.height / 2) - 300, 894 winLeft = (screen.width / 2) - 500, 895 url = $(this).attr("href"); 896 897 window.open( 898 url, 899 $(this).attr("title"), 900 "toolbar=0,scrollbars=1,status=0,width=1000,height=600," + 901 "top=" + winTop + "," + 902 "left=" + winLeft); 903 }); 904 }, 905 906 showSpecialPricingMessageOnCouponApply: function() { 907 $( "#js-voucher-apply-btn-special-pricing" ).click(function() { 908 var voucherCode = $.trim($("#js-voucher-code-text").val()); 909 if (voucherCode != '' && voucherCode.length > 0) { 910 $( "#special-pricing" ).removeClass('hide'); 911 } 912 }); 913 } 914};
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.