PageSourceSearch

https://www.discountschoolsupply.com/_ui/responsive/common/js/acc.cart.js?v=S540

js discountschoolsupply.com collected 2026-10-03 21:01:39 UTC 36,123 bytes, 914 lines download raw bytes

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.