{"version":3,"file":"cart.min.js","sources":["scripts/cart.min.js"],"sourcesContent":["/**************************************************************************\nName: cart.js\nDescription: Shopping Cart script. Includes lazy loading.\nDate Created: 08/04/2023 by Jenna Hart\nModified:\n**************************************************************************/\n\njQuery.noConflict();\n\nvar itemOptions = itemOptions || (function(){\n var thisData = {};\n\n // Data\n\tthisData.cartUUID; // String - Shopping Cart UUID\n\tthisData.itemUUID; // String - Shopping Cart Item UUID\n thisData.productData; // Query - Shopping Cart data\n thisData.itemNums; // String - list of usfitem/apn numbers used for add to cart\n\n // Options\n\tthisData.isUserAuthenticated; // Boolean - is user authenticated\n\tthisData.hasStore // Boolean - has user selected a store\n\tthisData.favoritesList; // String - list of item numbers in favorites\n\tthisData.sessionFavorite; // Boolean - usfitem saved in the session to add to favorite\n\tthisData.trackFB; // Boolean - if true, does Event Tracking\n\tthisData.showFB; // Boolean - if true, displays console log of Event Tracking data to AVIBE\n\tthisData.callback; // String - if provided, calls the function provided after init\n\n\t// Store Data\n\tthisData.storePhone; // String - formatted store phone number\n\tthisData.freezerClosed; // Boolean - if true, the store's freezer is closed\n\tthisData.freezerClosedCase; // Boolean - if true, the store's freezer is closed and cases are also unavailable\n\tthisData.freezerClosedMessage; // String - message regarding freezer closure\n\tthisData.pickupMin; // Float - minimum pick up order amount\n\n\tvar isLoading = false;\n var cartArray = [];\n var cartPriceArray = [];\n\tvar textareaInitialSizes = {};\n\n\tjQuery( document ).ready( function( )\n\t{\n setCartArray();\n\n\t\tjQuery(window).on('orientationchange resize', function() {\n\t\t\t/* Adjust the height of the item tiles */\n\t\t\tsetWrapperHeight();\n\t\t\tsetTitleHeight('.product-slide-title');\n\t\t\tsetMobileCheckoutDebounce();\n\t\t});\n\n\t\tjQuery(window).on('scroll', function() {\n\t\t\tsetLoadMore();\n\t\t\tsetMobileCheckout();\n\t\t\tif(!isLoading)\n\t\t\t\tsetWrapperHeight();\n\t\t});\n\t\t\n\t\tjQuery('body').on('click', '.load-products:not(.is-loading)', function() {\n\t\t\tjQuery(this).addClass('is-loading');\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tgetProductRows();\n\t\t\t}, 100);\n\t\t});\n\n\t\tjQuery('body').on('click', '.delete', function() {\n\t\t\tlet message = 'Remove this item from your cart?',\n\t\t\t\tcartItemID = jQuery(this).attr('data-cartItem'),\n\t\t\t\tcartItemIDs = [];\n\n\t\t\tcartItemIDs.push(cartItemID);\n\n\t\t\tconfirmAction(message, cartItemIDs, removeItem);\n\t\t});\n\n\t\tjQuery('.cart-delete-all').on('click', function() {\n\t\t\tlet message = 'Remove all items from your cart?',\n\t\t\t\tcartItemIDs = [];\n\n\t\t\tfor (var i = 0; i < cartPriceArray.length; i++)\n\t\t\t\tcartItemIDs.push(cartPriceArray[i].cartItemID);\n\n\t\t\tconfirmAction(message, cartItemIDs, removeItem);\n\t\t});\n\n jQuery('body').on('focusin', 'input[name=\"unitQty\"], input[name=\"caseQty\"]', function(evt) {\n\t\t\tlet input = jQuery(this),\n\t\t\t\tvalue = input.val();\n\n\t\t\tinput.attr('data-value', value);\n\t\t});\n\n\t\tjQuery('body').on('keyup', 'input[name=\"unitQty\"], input[name=\"caseQty\"]', function(evt) {\n\t\t\tlet keyCode = evt.keyCode || evt.which,\n\t\t\t\tinput = jQuery(this),\n\t\t\t\tprevValue = parseInt(input.attr('data-value')),\n\t\t\t\tvalue = parseInt(input.val()),\n\t\t\t\tisUnit = input.hasClass('input-unit') ? true : false,\n\t\t\t\tisCart = input.parents('.cart-qty-widget').length > 0 ? true : false,\n\t\t\t\twidget = isCart ? input.parents('.cart-qty-widget') : input.parents('.product-slide-widget'),\n\t\t\t\tlimit = isUnit ? parseInt(widget.attr('data-limit')) : 0,\n\t\t\t\tbtnMethod = '';\n\n\t\t\t// If value exceeds unit limit, reset the value\n\t\t\tif(isUnit && limit > 0 && value > limit)\n\t\t\t\tinput.val(limit);\n\n\t\t\t// If tab or shift is pressed, GNDN\n\t\t\tif(keyCode != 9 && keyCode != 16 && input.val().length > 0) {\n\t\t\t\tif(prevValue < value) btnMethod = 'qtyUp';\n\t\t\t\telse if(prevValue > value) btnMethod = 'qtyDown';\n\t\t\t\telse btnMethod = 'noChange';\n\n\t\t\t\twidget.attr('data-method', btnMethod);\n\n\t\t\t\tif(btnMethod != 'noChange')\n\t\t\t\t\tsetItem(evt.target, widget, isCart);\n\t\t\t}\n\t\t});\n\n\t\tjQuery('body').on('change', 'input[name=\"unitQty\"], input[name=\"caseQty\"]', function(evt) {\n\t\t\tlet input = jQuery(this);\n\n\t\t\tif(input.val().length == 0) {\n\t\t\t\tlet isCart = input.parents('.cart-qty-widget').length > 0 ? true : false,\n\t\t\t\t\twidget = isCart ? input.parents('.cart-qty-widget') : input.parents('.product-slide-widget');\n\n\t\t\t\tinput.val(0);\n\t\t\t\tsetItem(evt.target, widget, isCart);\n\t\t\t}\n\t\t});\n\n\t\tjQuery('body').on('click', '.cart-widget-button, .product-slide-widget-button', function(evt) {\n\t\t\tlet button = jQuery(this),\n\t\t\t\tisCart = button.hasClass('cart-widget-button') ? true : false,\n\t\t\t\twidget = isCart ? button.parents('.cart-qty-widget') : button.parents('.product-slide-widget'),\n\t\t\t\tisAdd = button.hasClass('button-add') ? true : false,\n\t\t\t\tisUnit = button.hasClass('button-unit') ? true : false,\n\t\t\t\tinput = isUnit ? widget.find('input[name=\"unitQty\"]') : widget.find('input[name=\"caseQty\"]'),\n\t\t\t\tprevValue = input.val(),\n\t\t\t\tstartQty = parseInt(input.val()),\n\t\t\t\tquantity = isAdd ? startQty + 1 : startQty - 1,\n\t\t\t\tlimit = isUnit ? parseInt(widget.attr('data-limit')) : 0,\n\t\t\t\tbtnMethod = isAdd ? 'qtyUp' : 'qtyDown';\n\n\t\t\tinput.attr('data-value', prevValue);\n\t\t\twidget.attr('data-method', btnMethod);\n\n\t\t\tif(quantity < 0)\n\t\t\t\tquantity = 0;\n\t\t\telse if(limit == 0 || quantity <= limit)\n\t\t\t\tsetItem(evt.target, widget, isCart, input, quantity);\n\t\t});\n\n\t\tjQuery('body').on('click', '.product-slide-widget:not(.is-active)', function() {\n\t\t\tjQuery('.product-slide-widget').removeClass('is-active');\n\t\t\tjQuery(this).addClass('is-active');\n\t\t});\n\n\t\tjQuery('.layPage').on('click', function(evt) {\n\t\t\tlet activeWidget = jQuery('.product-slide-widget.is-active'),\n\t\t\t\thasActiveWidget = activeWidget.length,\n\t\t\t\ttarget = jQuery(evt.target);\n\t\t\t\n\t\t\tif(hasActiveWidget) {\n\t\t\t\tlet isTile = target.hasClass('product-slide') || target.parents('.product-slide').length > 0 ? 1 : 0;\n\n\t\t\t\tif(isTile) {\n\t\t\t\t\tlet tile = target.hasClass('product-slide') ? target : target.parents('.product-slide'),\n\t\t\t\t\t\twidget = tile.find('.product-slide-widget.is-active');\n\n\t\t\t\t\tif(widget.length > 0) {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\twidget.removeClass('is-active');\n\t\t\t\t\t}\t\n\t\t\t\t} else {\n\t\t\t\t\tactiveWidget.removeClass('is-active');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tjQuery('body').on('click', 'a.star', function() {\n\t\t\tvar star = jQuery(this),\n\t\t\t\tsfitem = star.attr('data-sfitem'),\n\t\t\t\tisActive = star.hasClass('active');\n\n\t\t\tif(!thisData.isUserAuthenticated) {\n\t\t\t\tsaveFavoriteToSession(sfitem);\n\t\t\t\topenSignInModal('', true);\n\t\t\t} \n\t\t\telse if(isActive)\n\t\t\t\tsetFavorite(sfitem, false);\n\t\t\telse\n\t\t\t\tsetFavorite(sfitem, true);\n\t\t});\n\n\t\tjQuery('body').on('click', '.item-note-btn', function() {\n\t\t\tlet button = jQuery(this);\n\n\t\t\ttoggleItemNote(button);\n\t\t});\n\n\t\tjQuery('body').on('mousedown', 'textarea', handleResizeStart);\n\n\t\tjQuery('body').on('change', 'textarea', function() {\n\t\t\tlet textarea = jQuery(this);\n\n\t\t\tsetItemNote(textarea);\n\t\t});\n\n\t\tvar hasBuyAgainLoop = parseInt(jQuery('input[name=\"hasBuyAgainLoop\"]').val()) > 0 ? true : false;\n\n\t\tconst swiperBuyAgain = new Swiper('.swiper-buy-again', {\n\t\t\t// Optional parameters\n\t\t\tloop: hasBuyAgainLoop,\n\t\t\tpreloadImages: false,\n\t\t\tlazy: true,\n\t\t\t// Navigation arrows\n\t\t\tnavigation: {\n\t\t\t\tnextEl: '.buy-again-swiper-button-next',\n\t\t\t\tprevEl: '.buy-again-swiper-button-prev',\n\t\t\t},\n\t\t\t// Responsive breakpoints\n\t\t\tbreakpoints: {\n\t\t\t\t// when window width is > 568px\n\t\t\t\t569: {slidesPerView: 2},\n\t\t\t\t// when window width is > 900px\n\t\t\t\t1025: {slidesPerView: 3},\n\t\t\t\t// when window width is > 1300px\n\t\t\t\t1301: {slidesPerView: 4}\n\t\t\t},\n\t\t\ton: {\n\t\t\t\tinit: function() {\n\t\t\t\t\tsetTitleHeight('.product-slide-title');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\t// Function to handle resizing\n function handleResizeStart(event) {\n var textarea = jQuery(event.target);\n\n // Store the initial size\n textareaInitialSizes[textarea.prop('id')] = {\n width: textarea.outerWidth(),\n height: textarea.outerHeight()\n };\n\n // Attach the mousemove and mouseup event handlers\n\t\tjQuery(document).on('mousemove', function() {\n\t\t\thandleResizing(textarea);\n\t\t}).on('mouseup', handleResizeEnd);\n }\n\n var handleResizing = debounce(function(textarea) {\n // Check if the size has changed\n var initialSize = textareaInitialSizes[textarea.prop('id')];\n\n if (initialSize !== undefined && (textarea.outerWidth() !== initialSize.width || textarea.outerHeight() !== initialSize.height))\n\t\t\tsetWrapperHeight();\n }, 500);\n\n function handleResizeEnd() {\n // Detach the mousemove and mouseup event handlers\n jQuery(document).off('mousemove', handleResizing).off('mouseup', handleResizeEnd);\n }\n\n\tfunction setItemNote(textarea)\n\t{\n\t\tvar dataObject = { method : 'setCartItemNoteAJAX' }\n\t\t\t\n\t\tdataObject.itemNoteID = textarea.attr('id');\n\t\tdataObject.itemNote = textarea.val();\n\n\t\tjQuery.ajax( {\n\t\t\ttype : 'GET',\n\t\t\turl : '/cfcs/shopDAO.cfc',\n\t\t\tcache : false,\n\t\t\tasync : false,\n\t\t\tdataType : 'json',\n\t\t\tdata : dataObject,\n\t\t\tsuccess : function( result ){\n\t\t\t\tif(!result.ERROR){\n\t\t\t\t\tlet parent = textarea.parents('.item-note-container').find('.item-note-btn');\n\t\t\t\t\tif(dataObject.itemNote.length > 0)\n\t\t\t\t\t\tparent.addClass('is-active');\n\t\t\t\t\telse \n\t\t\t\t\t\tparent.removeClass('is-active');\n\t\t\t\t} else {\n\t\t\t\t\tshowErrorNotification();\n\t\t\t\t}\t\n\t\t\t},\n\t\t\terror : function( data ) {\n\t\t\t\tshowErrorNotification();\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction resetCart(cartCount)\n\t{\n\t\t// jQuery('.cart-transition-wrapper').css('height', 0);\n\n\t\tjQuery('.cart-loading').removeClass('is-hidden');\n\n\t\t// setTimeout(function(){\n\t\t// \tjQuery('html, body').animate({ scrollTop: '0' });\n\t\t// }, 450);\n\n\t\tvar dataObject = { method : 'getCartItemAJAX' }\n\t\t\t\n\t\tdataObject.cartUUID = thisData.cartUUID;\n\n\t\tjQuery.ajax( {\n\t\t\ttype : 'GET',\n\t\t\turl : '/cfcs/shopGW.cfc',\n\t\t\tcache : false,\n\t\t\tasync : false,\n\t\t\tdataType : 'json',\n\t\t\tdata : dataObject,\n\t\t\tsuccess : function( result ){\n\t\t\t\tif(!result.ERROR) {\n\t\t\t\t\tjQuery('.cart-wrapper').html('');\n\t\t\t\t\tthisData.productData = result.ITEMS;\n\t\t\t\t\titemList = result.ITEMS;\n\t\t\t\t\tsetCartArray(true);\n\t\t\t\t\tgetProductRows();\n\t\t\t\t\tsetCartCount(cartCount);\n\t\t\t\t\tsetDisplayCount(cartCount);\n\t\t\t\t} else {\n\t\t\t\t\tshowErrorNotification();\n\t\t\t\t}\n\t\t\t},\n\t\t\terror : function( data ) {\n\t\t\t\tshowErrorNotification();\n\t\t\t}\n\t\t});\n\t}\n\n function getItemData(target)\n\t{\n\t\tlet itemData = {},\n\t\t\tel = jQuery(target),\n\t\t\tisCart = el.parents('.product-row').length > 0 ? true : false,\n\t\t\tparent = isCart ? el.parents('.product-row') : el.parents('.product-slide-widget'),\n\t\t\tinputUnit = parent.find('input[name=\"unitQty\"]'),\n\t\t\tinputCase = parent.find('input[name=\"caseQty\"]');\n\n\t\titemData.itemID = parent.attr('data-id');\n\t\titemData.sfitem = parent.attr('data-sfitem');\n\t\titemData.name = parent.attr('data-name');\n\t\titemData.image = parent.attr('data-image');\n itemData.container = parent.find('.product-row-price');\n\t\titemData.sale = parseInt(parent.attr('data-sale'));\n\t\titemData.scaleItem = parseInt(parent.attr('data-scaleitem'));\n\t\titemData.multiply = parseFloat(parent.attr('data-multiply'));\n\t\titemData.unitPrice = parseFloat(parent.attr('data-unitprice'));\n\t\titemData.unitreg = parseFloat(parent.attr('data-unitreg'));\n\t\titemData.casePrice = parseFloat(parent.attr('data-caseprice'));\n\t\titemData.casereg = parseFloat(parent.attr('data-casereg'));\n\t\titemData.unitQty = inputUnit.val() > 0 ? parseInt(inputUnit.val()) : 0;\n\t\titemData.caseQty = inputCase.length > 0 && inputCase.val() > 0 ? parseInt(inputCase.val()) : 0;\n itemData.unitTotal = itemData.unitPrice * itemData.unitQty * itemData.multiply;\n\t\titemData.caseTotal = itemData.casePrice * itemData.caseQty * itemData.multiply;\n\t\titemData.total = itemData.unitTotal + itemData.caseTotal;\n\t\titemData.unitRegTotal = itemData.unitreg * itemData.unitQty * itemData.multiply;\n\t\titemData.caseRegTotal = itemData.casereg * itemData.caseQty * itemData.multiply;\n itemData.regTotal = itemData.unitRegTotal + itemData.caseRegTotal;\n\t\titemData.isCart = isCart;\n\n\t\treturn itemData;\n\t}\n\n\tvar setMobileBtn = function(productTotal) {\n\t\t//Sets the state of the CLICK&CARRY button\n\t\tlet buttonWrapper = jQuery('.cart-totals-total'),\n\t\t\tbutton = jQuery('.click-carry-btn-mobile'),\n\t\t\thasButton = button.length > 0 ? true : false;\n\n\t\tif(hasButton){\n\t\t\tlet pickupMinimum = thisData.pickupMin != undefined ? parseFloat(thisData.pickupMin) : 0,\n\t\t\t\tprodTotal = parseFloat(productTotal.replace(/,/g, '')).toFixed(2),\n\t\t\t\tlimitChangeDown = prodTotal < pickupMinimum ? true : false,\n\t\t\t\tlimitChangeUp = prodTotal > pickupMinimum ? true : false,\n\t\t\t\tmessage = jQuery('.cart-totals-message');\n\t\t\t\t\n\t\t\tif(limitChangeUp) {\n\t\t\t\t// Pick up available\n\t\t\t\tbuttonWrapper.removeClass('has-message');\n\t\t\t\tbutton.removeClass('is-disabled');\n\t\t\t\tmessage.addClass('is-hidden');\n\t\t\t} else if(limitChangeDown || prodTotal < pickupMinimum) {\n\t\t\t\t// Pick up minimum not met\n\t\t\t\tbuttonWrapper.addClass('has-message');\n\t\t\t\tbutton.addClass('is-disabled');\n\t\t\t\tmessage.removeClass('is-hidden');\n\t\t\t}\n\t\t}\n\t}\n\n var setTotals = function() {\n let regTotal = 0,\n total = 0,\n savings = 0;\n\n for (var i = 0; i < cartPriceArray.length; i++)\n {\n regTotal += cartPriceArray[i].regTotal;\n total += cartPriceArray[i].total;\n if(cartPriceArray[i].savings > 0)\n savings += cartPriceArray[i].savings;\n }\n\n let regTotalCont = jQuery('.cart-totals-item .cart-totals-price'),\n savingsCont = jQuery('.cart-totals-savings .cart-totals-price'),\n totalCont = jQuery('.cart-totals-total .cart-totals-price'),\n\t\t\tminMessage = jQuery('.cart-min-message');\n\n regTotalCont.html('$' + regTotal.toFixed(2).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1,\"));\n savingsCont.html('-$' + savings.toFixed(2).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1,\"));\n totalCont.html('$' + total.toFixed(2).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1,\"));\n\n\t\tif(thisData.pickupMin > 0 && thisData.pickupMin > total) {\n\t\t\tlet remainder = thisData.pickupMin - total;\n\n\t\t\tjQuery('.pickup-remainder').html('$' + remainder.toFixed(2).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1,\"));\n\t\t\tminMessage.removeClass('is-hidden');\n\t\t} else {\n\t\t\tminMessage.addClass('is-hidden');\n\t\t}\n\n\t\tif(thisData.pickupMin > 0 && thisData.pickupMin > total) {\n\t\t\tlet remainder = thisData.pickupMin - total;\n\n\t\t\tjQuery('.pickup-remainder').html('$' + remainder.toFixed(2).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1,\"));\n\t\t\tminMessage.removeClass('is-hidden');\n\t\t} else {\n\t\t\tminMessage.addClass('is-hidden');\n\t\t}\n\n // Update CLICK&CARRY buttons\n setClickCarryBtn(total.toFixed(2));\n\t\tsetMobileBtn(total.toFixed(2));\n }\n\n\tvar setInput = function(input) {\n let value = input.val();\n\t\t\n input.attr('data-value', value);\n\t}\n\n\tvar setDisplayCount = function(cartCount) {\n\t\tlet productCount = jQuery('.product-count'),\n\t\t\tcount = parseInt(productCount.attr('data-count')) - 1,\n\t\t\thtml = count.toString() + ' of ' + cartCount.toString(),\n\t\t\titemHTML = 'Items (' + cartCount + ')';\n\n\t\tproductCount.attr('data-count', count).attr('data-totalcount', cartCount).html(html);\n\t\tjQuery('.cart-totals-item-count').html(itemHTML);\n\n\t\tif(cartCount < 1) {\n\t\t\tjQuery('.remove-on-load').hide();\n\t\t\tjQuery('p.cart-empty-message').removeClass('is-hidden');\n\t\t\tjQuery('.cart-delete-all').addClass('is-hidden');\n\t\t} else {\n\t\t\tjQuery('p.cart-empty-message').addClass('is-hidden');\n\t\t\tjQuery('.cart-delete-all').removeClass('is-hidden');\n\t\t}\n\t}\n\n\tvar setDisplay = function(target, widget, itemData, cartCount, isCart, input){\n\t\t/* Updates various display elements with the a new quanity of an item */\n // Set cart count in header\n\t\tsetCartCount(cartCount);\n\n // Set HTML for row\n var html = '';\n if(itemData.total > 0) {\n var dollarAmount = itemData.total.toFixed(2).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1,\");\n html = '$' + dollarAmount;\n }\n itemData.container.html(html);\n\n // Set data value in widget\n setInput(input);\n\n // Update product data\n updateCartArray(widget, itemData);\n\n\t\t// Update counts\n\t\tif(!isCart)\n\t\t\tsetDisplayCount(cartCount);\n\n // Event Tracking\n setEventTracking(target, widget, itemData);\n\t}\n\n var setItemAjax = debounce(function(target, widget, isCart, input){\n\t\t/* Sends the request to update an item's quantity to the backend */\n\t\tjQuery('body').find('.add-selected').addClass('is-loading');\n\n\t\tvar itemData = getItemData(target);\n\n\t\t// setSearchLogAction(itemData.itemID, 'add');\n\n\t\tvar data = [{\"itemID\": itemData.itemID, \"sfitem\": itemData.sfitem, \"unitQty\": itemData.unitQty, \"caseQty\": itemData.caseQty}];\n\t\tvar itemNums = [itemData.sfitem];\n\n\t\tvar dataObject = { method : 'bulkAddProductAJAX' }\n\t\t\tdataObject.data = JSON.stringify(data);\n dataObject.itemNums = JSON.stringify(itemNums);\n\n\t\tjQuery.ajax( {\n\t\t\ttype : 'post',\n\t\t\turl : '/cfcs/shopDAO.cfc',\n\t\t\tcache : false,\n\t\t\tasync : true,\n\t\t\tdataType : 'json',\n\t\t\tdata : dataObject,\n\t\t\tsuccess : function(result){\n\t\t\t\tif(result) {\n if(!result.ERROR) {\n\t\t\t\t\t\tif(itemData.isCart) {\n\t\t\t\t\t\t\tsetDisplay(target, widget, itemData, result.CARTCOUNT, isCart, input);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetInput(input);\n\t\t\t\t\t\t\tresetCart(result.CARTCOUNT);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowErrorNotification();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tshowErrorNotification();\n\t\t\t},\n\t\t\terror : function(result) {\n\t\t\t\tshowErrorNotification();\n\t\t\t}\n\t\t});\n\t}, 500);\n\n\tvar setItem = function(target, widget, isCart, input, quantity){\n\t\t/* Performs the validation and similar logic for updating an item's quantity */\n\t\tif(input != undefined && quantity != undefined)\n\t\t\tinput.val(quantity);\n\t\telse {\n\t\t\tvar input = jQuery(target),\n\t\t\t\tquantity = input.val();\n\t\t}\n\t\t\n\t\tlet parent = isCart ? jQuery(target).parents('.product-row') : jQuery(target).parents('.product-slide-widget');\n\n\t\tlet hasValue = quantity;\n\t\tif(quantity == 0) {\n\t\t\tif(input.hasClass('input-unit')) {\n\t\t\t\tvar caseInput = parent.find('.input-case');\n\t\t\t\thasValue = caseInput.length > 0 ? caseInput.val() : 0;\n\t\t\t}\t\n\t\t\telse\n\t\t\t\thasValue = parent.find('.input-unit').val();\n\t\t}\n\t\thasValue = parseInt(hasValue);\n\n\t\tif(isNaN(hasValue) || hasValue < 1) {\t//Prompt the user to remove the item from their cart\n\t\t\tlet sfitem = parent.attr('data-sfitem'),\n\t\t\t\trow = isCart ? parent : jQuery('.cart-wrapper').find('.product-row[data-sfitem=\"' + sfitem + '\"]'),\n\t\t\t\tmessage = 'Remove this item from your cart?',\n\t\t\t\tcartItemID = row.find('.delete').attr('data-cartItem'),\n\t\t\t\tcartItemIDs = [];\n\n\t\t\tcartItemIDs.push(cartItemID);\n\n\t\t\tconfirmAction(message, cartItemIDs, removeItem);\n\t\t} else {\t//Set the quantity of items in the user's cart\n\t\t\tsetQuantity(widget);\n \tsetItemAjax(target, widget, isCart, input);\n\t\t}\n\t};\n\n\tfunction getGap(inputLen, type) {\n\t\t/* Gets gap size for add widget */\n\t\tswitch(inputLen) {\n\t\t\tcase 1:\n\t\t\t\tthisGap = type == 'cart' ? 8 : 6;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthisGap = 5;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tthisGap = 2;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tthisGap = 0;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthisGap = type == 'cart' ? 8 : 6;\n\t\t}\n\n\t\treturn thisGap;\n\t}\n\n\tfunction setQuantityCarousel(widgets, quantity, type){\n\t\t/* Sets the displayed item quantity in a carousel's widgets */\n\t\tif(type == undefined)\n\t\t\tvar type = 'both';\n\n\t\twidgets.each(function() {\n\t\t\tlet widget = jQuery(this),\n\t\t\t\tunitInput = widget.find('input[name=\"unitQty\"]'),\n\t\t\t\tcaseInput = widget.find('input[name=\"caseQty\"]');\n\n\t\t\tif(quantity != undefined) {\n\t\t\t\tif(type == 'unit' || type == 'both' && unitInput.length > 0)\n\t\t\t\t\tunitInput.val(quantity);\n\n\t\t\t\tif(type == 'case' || type == 'both' && caseInput.length > 0)\n\t\t\t\t\tcaseInput.val(quantity);\n\t\t\t}\n\n\t\t\tlet slide = widget.parents('.product-slide'), \n\t\t\t\tunitQty = unitInput.val(),\n\t\t\t\tcaseQty = caseInput.val(),\n\t\t\t\tunitLen = unitQty != undefined ? unitQty.length : 1,\n\t\t\t\tcaseLen = caseQty != undefined ? caseQty.length : 1,\n\t\t\t\tthisLen = unitLen > caseLen ? unitLen : caseLen,\n\t\t\t\tlimit = parseInt(widget.attr('data-limit')),\n\t\t\t\tunitMinusDisabled = unitQty != undefined && unitQty <= 0 ? true : false,\n\t\t\t\tunitAddDisabled = unitQty != undefined && limit > 0 && unitQty >= limit ? true : false,\n\t\t\t\tcaseMinusDisabled = caseQty != undefined && caseQty <= 0 ? true : false,\n\t\t\t\tthisGap = getGap(thisLen, 'carousel'),\n\t\t\t\tunitMinus = widget.find('.button-unit.button-minus'),\n\t\t\t\tunitAdd = widget.find('.button-unit.button-add'),\n\t\t\t\tcaseMinus = widget.find('.button-case.button-minus'),\n\t\t\t\tunitCount = widget.find('.count-value-unit'),\n\t\t\t\tcaseCount = widget.find('.count-value-case'),\n\t\t\t\tmessageBox = slide.find('.product-slide-message:not(.not-visible)'),\n\t\t\t\tmessagePlaceholder = slide.find('.product-slide-message.not-visible'),\n\t\t\t\tmessage = messageBox.find('.qty-over-20'),\n\t\t\t\thideBox = message.hasClass('has-margin') ? false : true,\n\t\t\t\thideMessage = messageBox.find('.has-show-hide');\n\t\t\t\n\t\t\t// Handle quantities over 20\n\t\t\tif(widget.hasClass('is-active'))\n\t\t\t{\n\t\t\t\tif(unitQty > 20 || caseQty > 20) {\n\t\t\t\t\tmessagePlaceholder.removeClass('list-only');\n\t\t\t\t\tmessageBox.removeClass('is-hidden');\n\t\t\t\t\tmessage.removeClass('is-hidden');\n\n\t\t\t\t\tif(hideMessage.length > 0)\n\t\t\t\t\t\thideMessage.addClass('is-hidden');\n\t\t\t\t} else {\n\t\t\t\t\tmessage.addClass('is-hidden');\n\n\t\t\t\t\tif(hideMessage.length > 0) {\n\t\t\t\t\t\thideMessage.removeClass('is-hidden');\n\t\t\t\t\t} else if (hideBox) {\n\t\t\t\t\t\tmessagePlaceholder.addClass('list-only');\n\t\t\t\t\t\tmessageBox.addClass('is-hidden');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet boxHeight = messageBox.height();\n\t\t\t\tslide.find('.product-slide-message.not-visible').css('height', boxHeight + 'px');\n\t\t\t}\n\n\t\t\t// Open widget state handling\n\t\t\tunitMinus.attr('disabled', unitMinusDisabled);\n\t\t\tunitAdd.attr('disabled', unitAddDisabled);\n\t\t\tcaseMinus.attr('disabled', caseMinusDisabled);\n\n\t\t\twidget.find('.product-controls-row').removeClass('gap-0 gap-2 gap-5 gap-6');\n\t\t\twidget.find('.product-controls-row').addClass('gap-' + thisGap);\n\n\t\t\twidget.find('.product-slide-widget-quantity').removeClass('product-widget-quantity-1 product-widget-quantity-2 product-widget-quantity-3 product-widget-quantity-4');\n\t\t\twidget.find('.product-slide-widget-quantity').addClass('product-widget-quantity-' + thisLen);\n\n\t\t\t// Closed widget state handling\n\t\t\tunitCount.removeClass('count-value-1 count-value-2 count-value-3 count-value-4').addClass('count-value-'+ thisLen).text(unitQty);\n\t\t\tif(unitQty > 0)\n\t\t\t\tunitCount.parent().addClass('is-active');\n\t\t\telse \n\t\t\t\tunitCount.parent().removeClass('is-active');\n\n\t\t\tif(caseCount) {\n\t\t\t\tcaseCount.removeClass('count-value-1 count-value-2 count-value-3 count-value-4').addClass('count-value-'+ thisLen).text(caseQty);\n\t\t\t\n\t\t\t\tif(caseQty > 0)\n\t\t\t\t\tcaseCount.parent().addClass('is-active');\n\t\t\t\telse\n\t\t\t\t\tcaseCount.parent().removeClass('is-active');\n\t\t\t}\n\n\t\t\tif(unitQty > 0 || caseQty > 0)\n\t\t\t\twidget.addClass('has-value');\n\t\t\telse\n\t\t\t\twidget.removeClass('has-value');\n\t\t});\n\t}\n\n\tfunction checkQuantity(widget)\n\t{\n\t\tlet row = widget.parents('.product-row'),\n\t\t\tmessageBox = row.find('.cart-message'),\n\t\t\tmessage = messageBox.find('.qty-over-20'),\n\t\t\thideBox = message.hasClass('has-margin') ? false : true,\n\t\t\thideMessage = messageBox.find('.has-show-hide'),\n\t\t\tquantity = 0;\n\n\t\trow.find('input').each(function() {\n\t\t\tlet thisQty = jQuery(this).val();\n\t\t\tif(thisQty > quantity)\n\t\t\t\tquantity = thisQty;\n\t\t});\n\n\t\t// Handle quantities over 20\n\t\tif(quantity > 20) {\n\t\t\tmessageBox.removeClass('is-hidden');\n\t\t\tmessage.removeClass('is-hidden');\n\n\t\t\tif(hideMessage.length > 0)\n\t\t\t\thideMessage.addClass('is-hidden');\n\t\t} else {\n\t\t\tmessage.addClass('is-hidden');\n\n\t\t\tif(hideMessage.length > 0)\n\t\t\t\thideMessage.removeClass('is-hidden');\n\t\t\telse if (hideBox)\n\t\t\t\tmessageBox.addClass('is-hidden');\n\t\t}\n\t}\n\n\tfunction setQuantity(widget){\n\t\t/* Sets the displayed quantity in an item widget */\n\t\tlet isCart = widget.hasClass('cart-qty-widget') ? true : false;\n\n\t\tif(isCart) {\n\t\t\tlet sfitem = widget.parents('.product-row').attr('data-sfitem'),\n\t\t\t\tinput = widget.find('input'),\n\t\t\t\tminus = widget.find('.button-minus'),\n\t\t\t\tadd = widget.find('.button-add'),\n\t\t\t\tisUnit = input.hasClass('input-unit') ? true : false,\n\t\t\t\tquantity = input.val(),\n\t\t\t\tinputLen = quantity.length,\n\t\t\t\tlimit = isUnit ? parseInt(widget.attr('data-limit')) : 0,\n\t\t\t\tminusDisabled = quantity != undefined && quantity <= 0 ? true : false,\n\t\t\t\taddDisabled = quantity != undefined && limit > 0 && quantity >= limit ? true : false,\n\t\t\t\tthisGap = getGap(inputLen, 'cart'),\n\t\t\t\tcarouselWidgets = jQuery('.product-slide-widget[data-sfitem=\"' + sfitem + '\"]'),\n\t\t\t\ttype = isUnit ? 'unit' : 'case';\n\t\t\t\t\n\t\t\t// Check for quantity over/under 20\n\t\t\tcheckQuantity(widget);\n\n\t\t\t// widget state handling\n\t\t\tminus.attr('disabled', minusDisabled);\n\t\t\tadd.attr('disabled', addDisabled);\n\n\t\t\twidget.find('.product-controls-row').removeClass('gap-0 gap-2 gap-5 gap-8');\n\t\t\twidget.find('.product-controls-row').addClass('gap-' + thisGap);\n\n\t\t\twidget.find('.cart-widget-quantity').removeClass('cart-widget-quantity-1 cart-widget-quantity-2 cart-widget-quantity-3 cart-widget-quantity-4');\n\t\t\twidget.find('.cart-widget-quantity').addClass('cart-widget-quantity-' + inputLen);\n\n\t\t\tif(quantity > 0)\n\t\t\t\twidget.addClass('has-value');\n\t\t\telse\n\t\t\t\twidget.removeClass('has-value');\n\n\t\t\tsetQuantityCarousel(carouselWidgets, quantity, type);\n\t\t} else {\n\t\t\tlet sfitem = widget.attr('data-sfitem'),\n\t\t\t\tcarouselWidgets = jQuery('.product-slide-widget[data-sfitem=\"' + sfitem + '\"]');\n\n\t\t\tsetQuantityCarousel(carouselWidgets);\n\t\t}\n\t}\n\n\tvar toggleItemNote = function(button, scroll)\n\t{\n\t\tif(button == undefined)\n\t\t\treturn;\n\n\t\tif(scroll == undefined)\n\t\t\tvar scroll = false;\n\n\t\tlet parent = button.parents('.item-note-container'),\n\t\t\tisOpen = parent.hasClass('is-open'),\n\t\t\ttitle = isOpen ? 'Open Special Instructions' : 'Close Special Instructions';\n\n\t\tparent.toggleClass('is-open');\n\t\tbutton.attr('title', title);\n\t\tparent.find('textarea').removeAttr('style').focus();\n\n\t\tsetWrapperHeight();\n\n\t\tif(scroll) {\n\t\t\tsetTimeout(function() {\n\t\t\t\tlet row = parent.parents('.product-row'),\n\t\t\t\t\ttop = row.offset().top - 154;\n\t\t\t\t\t\n\t\t\t\t\tjQuery([document.documentElement, document.body]).animate({scrollTop: top}, 500);\n\t\t\t}, 1000);\n\t\t}\n\t}\n\n\tvar setLoadMore = debounce(function(){\n\t\t/* Show the loading animation to load more items, and fetch more product rows */\n\t\tvar countContainer = jQuery('.product-count'),\n\t\t\tcount = countContainer.attr('data-count'),\n\t\t\tcountTotal = countContainer.attr('data-totalcount'),\n\t\t\tlastRow = jQuery('.product-row').last(),\n\t\t\tlastRowVisible = lastRow.length > 0 && lastRow.visible(true) ? true : false,\n\t\t\tcountContainerVisible = countContainer.length > 0 && countContainer.visible(true) ? true : false;\n\n\t\tif((lastRowVisible || countContainerVisible) && count != countTotal) {\n\t\t\tjQuery('.load-products').addClass('is-loading');\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tgetProductRows();\n\t\t\t}, 100);\n\t\t}\n\t}, 100);\n\n\tvar setMobileCheckout = function(){\n\t\t// Change position of mobile checkout bar to keep it above the footer\n\t\tvar footer = jQuery('.layFooter'),\n\t\t\tfooterVisible = footer.visible(true) ? true : false,\n\t\t\tcartContainer = jQuery('.cart-side-container');\n\n\t\tif(footerVisible) {\n\t\t\tcartContainer.removeClass('is-fixed');\n\t\t} else {\n\t\t\tcartContainer.addClass('is-fixed');\n\t\t}\n\t};\n\n\tvar setMobileCheckoutDebounce = debounce(function(){\n\t\tsetMobileCheckout();\n\t}, 200);\n\n\tvar removeItemData = function(cartItemIDs, cartCount){\n\t\t/* Remove items from the client-side copy of the user's cart */\n\t\tfor (var i = 0; i < cartItemIDs.length; i++){\n\t\t\tlet cartItemIDIndex = thisData.productData.COLUMNS.indexOf('CARTITEMID'),\n\t\t\t\titemIndex = thisData.productData.DATA.findIndex(x => x[cartItemIDIndex] == cartItemIDs[i]),\n\t\t\t\tcartPriceIndex = cartPriceArray.map(function(x) {return x.cartItemID; }).indexOf(parseInt(cartItemIDs[i])),\n\t\t\t\tsfitem = cartPriceIndex >= 0 ? cartPriceArray[cartPriceIndex].sfitem : '',\n\t\t\t\tcartIndex = sfitem.length > 0 ? cartArray.findIndex(x => x.id === sfitem) : -1,\n\t\t\t\titemDesc = cartIndex >= 0 ? cartArray[cartIndex].name : '',\n\t\t\t\tunitQty = cartIndex >= 0 ? cartArray[cartIndex].unitQty : 0,\n\t\t\t\tcaseQty = cartIndex >= 0 ? cartArray[cartIndex].caseQty : '';\n\n\t\t\tif(itemIndex >= 0) thisData.productData.DATA.splice(itemIndex, 1);\n\t\t\tif(cartIndex >= 0) cartArray.splice(cartIndex, 1);\n\t\t\tif(cartPriceIndex >= 0) cartPriceArray.splice(cartPriceIndex, 1);\n\n\t\t\t// Event Tracking\n\t\t\tsetDeleteTracking(cartItemIDs[i], sfitem, itemDesc, unitQty, caseQty);\n\t\t}\n\n\t\t// Set cart count in header\n\t\tsetCartCount(cartCount);\n\n\t\t// Set lazy loading counts\n\t\tsetDisplayCount(cartCount);\n\n\t\t// Set totals\n\t\tsetTotals();\n\t}\n\n\tvar removeItemDisplay = function(cartItemIDs){\n\t\t/* Updated the displayed items and item tiles to show an item as removed */\n\t\tfor (var i = 0; i < cartItemIDs.length; i++){\n\t\t\tlet row = jQuery('.product-row[data-cartItem=\"' + cartItemIDs[i] + '\"]'),\n\t\t\t\tsfitem = row.attr('data-sfitem'),\n\t\t\t\tcarouselWidgets = jQuery('.product-slide-widget[data-sfitem=\"' + sfitem + '\"]'),\n\t\t\t\trowPrev = row.prev(),\n\t\t\t\trowNext = row.next(),\n\t\t\t\trowHeight = row.height();\n\n\t\t\trow.css('height', rowHeight + 'px');\n\n\t\t\tsetTimeout(function() {\n\t\t\t\trow.addClass('is-hidden');\n\t\t\t}, 10);\n\n\t\t\tif(rowPrev.hasClass('department-row') && (rowNext.hasClass('department-row') || rowNext.hasClass('remove-on-load')))\n\t\t\t\trowPrev.addClass('is-hidden');\n\n\t\t\tif(carouselWidgets.length > 0)\n\t\t\t\tsetQuantityCarousel(carouselWidgets, 0, 'both');\n\n\t\t\tsetTimeout(function() {\n\t\t\t\trow.remove();\n\n\t\t\t\tif(rowPrev.hasClass('department-row') && (rowNext.hasClass('department-row') || rowNext.hasClass('remove-on-load')))\n\t\t\t\t\trowPrev.remove();\n\n\t\t\t\tif(jQuery('.product-row').length <= 0)\n\t\t\t\t\tjQuery('.department-row').remove();\n\n\t\t\t\t// Enable delete icons\n\t\t\t\tjQuery('.product-row .delete').removeClass('is-disabled');\n\n\t\t\t\tsetWrapperHeight();\n\t\t\t}, 650);\n\t\t}\n\t}\n\n\tvar removeItem = function(cartItemIDs){\n\t\t/* Remove an item from the user's cart */\n\t\tif(cartItemIDs != undefined)\n\t\t{\n\t\t\tvar dataObject = { method : 'deleteCartItemAJAX' }\n\t\t\t\n\t\t\tdataObject.cartUUID = thisData.cartUUID;\n\t\t\tdataObject.cartItemIDs = JSON.stringify(cartItemIDs);\n\n\t\t\t// Disable other delete icons until process is finished\n\t\t\tjQuery('.product-row .delete').addClass('is-disabled');\n\n\t\t\tjQuery.ajax( {\n\t\t\t\ttype : 'GET',\n\t\t\t\turl : '/cfcs/shopDAO.cfc',\n\t\t\t\tcache : false,\n\t\t\t\tasync : false,\n\t\t\t\tdataType : 'json',\n\t\t\t\tdata : dataObject,\n\t\t\t\tsuccess : function( result ){\n\t\t\t\t\tif(!result.ERROR) {\n\t\t\t\t\t\t// Remove item row\n\t\t\t\t\t\tremoveItemDisplay(cartItemIDs);\n\n\t\t\t\t\t\t// Remove item from product arrays\n\t\t\t\t\t\tremoveItemData(cartItemIDs, result.CARTCOUNT);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tshowErrorNotification();\n\t\t\t\t},\n\t\t\t\terror : function( data ) {\n\t\t\t\t\tshowErrorNotification();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tvar resetQuantity = function(cartItemID) {\n\t\t/* Resets the quantity of a product to what it was before a user input */\n\t\tlet row = jQuery('.product-row[data-cartitem=\"' + cartItemID + '\"]'),\n\t\t\tunitInput = row.find('.input-unit'),\n\t\t\tcaseInput = row.find('.input-case');\n\n\t\tif(unitInput.length > 0) {\n\t\t\tlet unitValue = unitInput.attr('data-value');\n\n\t\t\tif(unitValue > 0)\n\t\t\t\tunitInput.val(unitValue);\n\t\t}\n\n\t\tif(caseInput.length > 0) {\n\t\t\tlet caseValue = caseInput.attr('data-value');\n\n\t\t\tif(caseValue > 0)\n\t\t\t\tcaseInput.val(caseValue);\n\t\t}\n\n\t\t//Check if the item is in the Buy Again carousel\n\t\tlet productId = row.attr(\"data-id\");\n\t\tlet buyAgainItemTile = jQuery(`.product-slide-widget[data-id=\"${productId}\"]`);\n\t\tif(buyAgainItemTile.length > 0){\n\t\t\t//Reset the quantity in the item tiles\n\t\t\tbuyAgainItemTile.find(\"input[name='unitQty'],input[name='caseQty']\").each((i, e)=>{\n\t\t\t\tif(e.dataset.value !== undefined){\n\t\t\t\t\te.value = e.dataset.value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tvar confirmAction = function(message, cartItemID, callback){\n\t\t/* Prompt the user with a yes or no question */\n\t\tif(message == undefined || cartItemID == undefined || callback == undefined)\n\t\t\treturn;\n\n\t\tvar modal = jQuery('.modal-confirm');\n\t\tvar focusElement = modal.find('.modal-confirm-button');\n\n\t\topenModal(modal, focusElement, message);\n\n\t\t// Confirm\n\t\tjQuery('.modal-confirm-button').one('click', function() {\n\t\t\tcloseModal(modal);\n\t\t\tcallback(cartItemID);\n\t\t});\n\n\t\tjQuery('.modal-confirm-button').one('keyup', function(evt) {\n\t\t\tif( evt.keyCode == 13 || evt.keyCode == 27 ) { //Enter or Escape keys\n\t\t\t\tcloseModal(modal);\n\t\t\t\tcallback(cartItemID);\n\t\t\t}\n\t\t});\n\n\t\t// Deny\n\t\tjQuery('.close-modal-button').one('click', function() {\n\t\t\tresetQuantity(cartItemID);\n\t\t});\n\n\t\tjQuery('.close-modal-button').one('keyup', function(evt) {\n\t\t\tif( evt.keyCode == 13 || evt.keyCode == 27 ) //Enter or Escape keys\n\t\t\t\tresetQuantity(cartItemID);\n\t\t});\n\t}\n\n\tvar showErrorNotification = function()\t{\n\t\t//Shows an error notification\n\t\tvar modal = jQuery('.modal-notify'),\n\t\t\tfocusElement = modal.find('.close-modal-button'),\n\t\t\tmessage = 'Unexpected issue, please try again',\n\t\t\tdelay = jQuery('.modal.active').length > 0 ? 510 : 0;\n\n\t\tsetTimeout(function() {\n\t\t\topenModal(modal, focusElement, message);\n\t\t}, delay);\n\n\t\tjQuery('.product-row .delete').removeClass('is-disabled');\n\t}\n\n\tvar reduceWrapperHeight = function(){\n\t\t/* Adjusts the height of the cart product list to not include the loading spinner */\n\t\tvar transitionWrapper = jQuery('.cart-transition-wrapper'),\n\t\t\tremoveOnLoad = jQuery('.remove-on-load'),\n\t\t\twrapperHeight = transitionWrapper.height(),\n\t\t\tloadHeight = removeOnLoad.height(),\n\t\t\tnewHeight = wrapperHeight - loadHeight;\n\n\t\ttransitionWrapper.css('height', newHeight + 'px');\n\n\t\tsetTimeout(function() {\n\t\t\tremoveOnLoad.remove();\n\t\t}, 500);\n\t}\n\n\tvar setWrapperHeight = debounce(function() {\n\t\t/* Sets the height of the cart product list wrapper */\n\t\tvar transitionWrapper = jQuery('.cart-transition-wrapper'),\n\t\t\twrapper = jQuery('.cart-wrapper');\n\n\t\tsetTimeout(function() {\n\t\t\ttransitionWrapper.css('height', wrapper.height() + 'px');\n\n\t\t\tisLoading = false;\n\t\t}, 210);\n\t}, 100);\n\n\tfunction debounce(func, wait, immediate) {\n\t\tvar timeout;\n\t\treturn function() {\n\t\t\tvar context = this, args = arguments;\n\t\t\tvar later = function() {\n\t\t\t\ttimeout = null;\n\t\t\t\tif (!immediate) func.apply(context, args);\n\t\t\t};\n\t\t\tvar callNow = immediate && !timeout;\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(later, wait);\n\t\t\tif (callNow) func.apply(context, args);\n\t\t};\n\t};\n\n function getProductRows(end, callback){\n\t\tisLoading = true;\n\n\t\tlet lastRow = jQuery('.product-row').last();\n\t\tlet perPage = 19;\n\t\tlet dataObject = { method : 'getCartRowHTMLAjax' }\n\n\t\tdataObject.data = JSON.stringify(thisData.productData);\n\t\tdataObject.startRow = lastRow.length > 0 ? parseInt(lastRow.attr('data-row')) + 1 : 1;\n\t\tdataObject.endRow = end != undefined && end > 0 ? end : dataObject.startRow + perPage;\n\t\tdataObject.type = thisData.productType;\n\t\tdataObject.deptTitle = lastRow.attr('data-department');\n\t\tdataObject.addDisabled = thisData.addDisabled;\n\t\tdataObject.isPrint = thisData.isPrint;\n\t\tdataObject.storePhone = thisData.storePhone;\n\t\tdataObject.freezerClosed = thisData.freezerClosed;\n\t\tdataObject.freezerClosedCase = thisData.freezerClosedCase;\n\t\tdataObject.freezerClosedMessage = thisData.freezerClosedMessage;\n\n\t\tjQuery.ajax( {\n\t\t\ttype : 'post',\n\t\t\turl : '/cfcs/itemGW.cfc',\n\t\t\tcache : false,\n\t\t\tasync : true,\n\t\t\tdataType : 'json',\n\t\t\tdata : dataObject,\n\t\t\tsuccess : function( data ){\n\t\t\t\tvar wrapper = jQuery('.cart-wrapper');\n\n\t\t\t\treduceWrapperHeight();\n\n\t\t\t\tif(data)\n\t\t\t\t{\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tjQuery(data).appendTo(wrapper);\n\n\t\t\t\t\t\tjQuery('.cart-loading').addClass('is-hidden');\n\n\t\t\t\t\t\tsetWrapperHeight();\n\t\t\t\t\t}, 200);\n\t\t\t\t}\n\n\t\t\t\t// Wait until transitions have finished\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tsetMobileCheckoutDebounce();\n\n\t\t\t\t\tif(thisData.isUserAuthenticated && thisData.sessionFavorite != undefined && thisData.sessionFavorite.length > 0)\n\t\t\t\t\t\taddFavorite(thisData.sessionFavorite);\n\n\t\t\t\t\tif(callback)\n\t\t\t\t\t\tcallback();\n\n\t\t\t\t\t\tif(thisData.itemUUID.length > 0) {\n\t\t\t\t\t\t\tlet button = jQuery('body').find('.item-note-btn[data-id=\"' + thisData.itemUUID + '\"]');\n\n\t\t\t\t\t\t\tif(button.length > 0)\n\t\t\t\t\t\t\t\ttoggleItemNote(button, true);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tgetProductRows();\n\t\t\t\t\t\t}\n\t\t\t\t}, 710);\n\t\t\t},\n\t\t\terror : function( data ) {\n\t\t\t\tshowErrorNotification();\n\t\t\t}\n\t\t});\n\t}\n\n var setCartArray = function(setTotal)\n\t{\n\t\tif(typeof itemList != 'undefined') {\n\t\t\tcartArray = [];\n\t\t\tcartPriceArray = [];\n\n\t\t\tlet cartItemIDIndex = itemList.COLUMNS.indexOf('CARTITEMID'),\n\t\t\t\tsfitemIndex = itemList.COLUMNS.indexOf('SFITEM'),\n\t\t\t\tusfitemIndex = itemList.COLUMNS.indexOf('USFITEM'),\n\t\t\t\titemDescIndex = itemList.COLUMNS.indexOf('ITEMDESC'),\n\t\t\t\tunitQtyIndex = itemList.COLUMNS.indexOf('ITEMQUANTITY'),\n\t\t\t\tcaseQtyIndex = itemList.COLUMNS.indexOf('CASEQUANTITY'),\n\t\t\t\tunitPriceIndex = itemList.COLUMNS.indexOf('UNITSELLPRICE'),\n\t\t\t\tunitRegIndex = itemList.COLUMNS.indexOf('UNITREGPRICE'),\n\t\t\t\tcasePriceIndex = itemList.COLUMNS.indexOf('CASESELLPRICE'),\n\t\t\t\tcaseRegIndex = itemList.COLUMNS.indexOf('CASEREGPRICE'),\n\t\t\t\tscaleItemIndex = itemList.COLUMNS.indexOf('SCALEITEM'),\n\t\t\t\tavgCaseWeightIndex = itemList.COLUMNS.indexOf('AVGCASEWEIGHT');\n\n\t\t\tfor (var i = 0; i < itemList.DATA.length; i++)\n\t\t\t{\n\t\t\t\tlet cartItemID = itemList.DATA[i][cartItemIDIndex],\n\t\t\t\t\tsfitem = itemList.DATA[i][usfitemIndex].length > 0 ? itemList.DATA[i][usfitemIndex] : itemList.DATA[i][sfitemIndex],\n\t\t\t\t\ttoMultiply = itemList.DATA[i][scaleItemIndex] == 1 && parseInt(itemList.DATA[i][avgCaseWeightIndex]) > 0 ? parseInt(itemList.DATA[i][avgCaseWeightIndex]) : 1,\n\t\t\t\t\tprice = ((itemList.DATA[i][unitPriceIndex] * itemList.DATA[i][unitQtyIndex]) + (itemList.DATA[i][casePriceIndex] * itemList.DATA[i][caseQtyIndex])) * toMultiply,\n\t\t\t\t\tregPrice = ((itemList.DATA[i][unitRegIndex] * itemList.DATA[i][unitQtyIndex]) + (itemList.DATA[i][caseRegIndex] * itemList.DATA[i][caseQtyIndex])) * toMultiply;\n\n\t\t\t\tcartArray.push({\n\t\t\t\t\t\"id\" : sfitem,\n\t\t\t\t\t\"name\" : itemList.DATA[i][itemDescIndex],\n\t\t\t\t\t\"unitQty\" : itemList.DATA[i][unitQtyIndex],\n\t\t\t\t\t\"caseQty\" : itemList.DATA[i][caseQtyIndex],\n\t\t\t\t\t\"price\" : price.toFixed(2)\n\t\t\t\t});\n\n cartPriceArray.push({\n \"cartItemID\" : cartItemID,\n\t\t\t\t\t\"sfitem\" : sfitem,\n \"regTotal\" : regPrice,\n\t\t\t\t\t\"total\" : price,\n \"savings\" : regPrice - price\n });\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(setTotal != undefined && setTotal == true)\n setTotals();\n\t}\n\n\tvar updateCartArray = function(widget, itemData)\n\t{\n\t\tif(widget && itemData) {\n\t\t\tlet itemIndex = cartArray.map(function(x) {return x.id; }).indexOf(itemData.sfitem),\n savings = itemData.regTotal - itemData.total;\n\t\t\t\n\t\t\tif(itemIndex >= 0) {\n // Cart Array\n\t\t\t\tcartArray[itemIndex].unitQty = itemData.unitQty;\n\t\t\t\tcartArray[itemIndex].caseQty = itemData.caseQty;\n\t\t\t\tcartArray[itemIndex].price = itemData.total.toFixed(2);\n\n // Cart Price Array\n\t\t\t\tcartPriceArray[itemIndex].regTotal = itemData.regTotal;\n\t\t\t\tcartPriceArray[itemIndex].total = itemData.total;\n cartPriceArray[itemIndex].savings = savings;\n\t\t\t} else {\n // Cart Array\n\t\t\t\tcartArray.push({\n\t\t\t\t\t\"id\" : itemData.sfitem,\n\t\t\t\t\t\"name\" : itemData.name,\n\t\t\t\t\t\"unitQty\" : itemData.unitQty,\n\t\t\t\t\t\"caseQty\" : itemData.caseQty,\n\t\t\t\t\t\"price\" : itemData.total.toFixed(2)\n\t\t\t\t});\n\n // Cart Price Array\n cartPriceArray.push({\n\t\t\t\t\t\"cartItemID\" : itemData.cartItemID,\n \"sfitem\" : itemData.sfitem,\n \"regTotal\" : itemData.regTotal,\n \"total\" : itemData.total,\n \"savings\" : itemData.regTotal - itemData.total\n });\n\t\t\t}\n\n // Set totals\n setTotals();\n\t\t}\n\t}\n\n\tfunction saveFavoriteToSession(sfitem)\n\t{\n\t\tif(sfitem)\n\t\t{\n\t\t\tvar dataObject = { method : 'addFavoriteSessionAJAX' }\n\t\t\t\tdataObject.usfitem = sfitem;\n\n\t\t\tjQuery.ajax( {\n\t\t\t\ttype : 'post',\n\t\t\t\turl : '/cfcs/shopDAO.cfc',\n\t\t\t\tcache : false,\n\t\t\t\tasync : true,\n\t\t\t\tdataType : 'json',\n\t\t\t\tdata : dataObject\n\t\t\t});\n\t\t}\n\t}\n\n\tvar setFavorite = function(sfitem, isAdd){\n\t\t/* Adds or removes an item from the user's favorites */\n\t\tvar dataObject = { method : 'setFavoriteAJAX' }\n\t\t\n\t\tdataObject.sfitem = sfitem;\n\t\tdataObject.isAdd = isAdd;\n\n\t\tjQuery.ajax( {\n\t\t\ttype : 'post',\n\t\t\turl : '/cfcs/shopDAO.cfc',\n\t\t\tcache : false,\n\t\t\tasync : true,\n\t\t\tdataType : 'json',\n\t\t\tdata : dataObject,\n\t\t\tsuccess : function( data ){\n\t\t\t\tif( data ) {\n\t\t\t\t\tif(dataObject.isAdd > 0) {\n\t\t\t\t\t\tjQuery('.star[data-sfitem=\"' + sfitem + '\"], .addToFavorites[data-sfitem=\"' + sfitem + '\"]').addClass('active');\n\t\t\t\t\t\tjQuery('.addToFavorites[data-sfitem=\"' + sfitem + '\"] span').html('Remove from favorites');\n\t\t\t\t\t} else if(thisData.productType == 'favorites') {\n\t\t\t\t\t\tremoveFavoriteRow(sfitem);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery('.star[data-sfitem=\"' + sfitem + '\"], .addToFavorites[data-sfitem=\"' + sfitem + '\"]').removeClass('active');\n\t\t\t\t\t\tjQuery('.addToFavorites[data-sfitem=\"' + sfitem + '\"] span').html('Add to favorites');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tshowErrorNotification()\n\t\t\t\t}\n\t\t\t},\n\t\t\terror : function( data ) {\n\t\t\t\tshowErrorNotification();\n\t\t\t}\n\t\t});\n\t}\n\n\t// Event Tracking\n\t\t// This is only for 'AddToCart' events\n\t\t// Other actions are tracked on display pages\n\tvar setTracking = function(data) {\n\t\tlet itemLocation = 'Shopping Cart',\n\t\t\ttrackFB = thisData.trackFB != 'undefined' ? thisData.trackFB : false,\n\t\t\tshowFB = thisData.showFB != 'undefined' ? thisData.showFB : false,\n\t\t\titemDesc = typeof data.itemDesc !== 'undefined' && data.itemDesc != null ? data.itemDesc.replace(/(['\"])/g, \"\\\\$1\") : '';\n\n\t\t// Units\n\t\tif(data.hasUnit)\n\t\t\tvar itemChange = [{'id': data.sfitem, 'name': itemDesc, 'type': 'unit', 'quantity': data.unitQty, 'price': data.unitTotal}, {}];\n\n\t\t// Cases\n\t\tif(data.hasCase)\n\t\t\tvar itemChange = [{'id': data.sfitem, 'name': itemDesc, 'type': 'case', 'quantity': data.caseQty, 'price': data.caseTotal}, {}];\n\n\t\tif(data.hasUnit || data.hasCase)\n\t\t{\n\t\t\tif(trackFB) {\n\t\t\t\tlet thisData = {\n\t\t\t\t\t'event': 'cartUpdated',\n\t\t\t\t\t'item_location': itemLocation,\n\t\t\t\t\t'cart_contents': cartArray,\n\t\t\t\t\t'item_change': itemChange,\n\t\t\t\t\t'button_method': data.btnMethod\n\t\t\t\t}\n\n\t\t\t\tdataLayer.push(thisData);\n\t\t\t\tsetDBEventTracking(JSON.stringify(thisData));\n\t\t\t}\n\t\t\telse if(showFB) {\n\t\t\t\tconsole.log(\"****** AVIBE Only -- Google Analytics event tracking code ******\");\n\t\t\t\tconsole.log(\"dataLayer.push({ 'event': 'cartUpdated', 'item_location': '\" + itemLocation + \"', 'cart_contents': \" + JSON.stringify(cartArray) + \", 'item_change': \" + JSON.stringify(itemChange) + \", 'button_method': '\" + data.btnMethod + \"' });\");\n\t\t\t}\n\t\t}\n\t}\n\n\tvar setEventTracking = function(target, widget, itemData)\n\t{\n\t\tlet el = jQuery(target);\n\t\tlet data = {};\n\t\t\tdata.itemDesc = itemData.name;\n\t\t\tdata.sfitem = itemData.sfitem;\n\t\t\tdata.unitQty = itemData.unitQty;\n\t\t\tdata.caseQty = itemData.caseQty;\n\t\t\tdata.unitTotal = itemData.unitTotal.toFixed(2);\n\t\t\tdata.caseTotal = itemData.caseTotal.toFixed(2);\n\t\t\tdata.hasUnit = el.hasClass('button-unit') || el.hasClass('input-unit') ? true : false,\n\t\t\tdata.hasCase = el.hasClass('button-case') || el.hasClass('input-case') ? true : false,\n\t\t\tdata.btnMethod = widget.attr('data-method');\n\n\t\tsetTracking(data);\n\t}\n\n\tvar setDeleteTracking = function(cartItemID, sfitem, itemDesc, unitQty, caseQty)\n\t{\n\t\tlet row = jQuery('.product-row[data-cartItem=\"' + cartItemID + '\"]');\n\n\t\tif(typeof itemDesc == 'undefined') {\n\t\t\tlet itemDesc = row.length > 0 ? row.attr('data-name') : '';\n\t\t}\n\t\tif(typeof sfitem == 'undefined') {\n\t\t\tlet sfitem = row.length > 0 ? row.attr('data-sfitem') : '';\n\t\t}\n\t\tif(typeof unitQty == 'undefined') {\n\t\t\tlet unitQty = 0;\n\t\t}\n\t\tif(typeof caseQty == 'undefined') {\n\t\t\tlet caseQty = 0;\n\t\t}\n\n\t\tlet data = {};\n\t\t\tdata.itemDesc = itemDesc;\n\t\t\tdata.sfitem = sfitem;\n\t\t\tdata.unitQty = 0;\n\t\t\tdata.caseQty = 0;\n\t\t\tdata.unitTotal = 0;\n\t\t\tdata.caseTotal = 0;\n\t\t\tdata.btnMethod = 'qtyDown';\n\n\t\tif(sfitem.length > 0 && unitQty > 0) {\n\t\t\tdata.hasUnit = true;\n\t\t\tdata.hasCase = false;\n\n\t\t\tsetTracking(data);\n\t\t}\n\n\t\tif(sfitem.length > 0 && caseQty > 0) {\n\t\t\tdata.hasUnit = false;\n\t\t\tdata.hasCase = true;\n\n\t\t\tsetTracking(data);\n\t\t}\n\t}\n\n return {\n init : function(data) {\n thisData = data;\n\n if(thisData.callback != undefined)\n\t\t\t\tgetProductRows(0, thisData.callback);\n\t\t\telse\n\t\t\t\tgetProductRows();\n }\n };\n}());\n"],"names":["jQuery","noConflict","itemOptions","thisData","isLoading","cartUUID","itemUUID","productData","itemNums","isUserAuthenticated","hasStore","favoritesList","sessionFavorite","trackFB","showFB","callback","storePhone","freezerClosed","freezerClosedCase","freezerClosedMessage","pickupMin","cartArray","cartPriceArray","textareaInitialSizes","handleResizeStart","event","textarea","target","prop","width","outerWidth","height","outerHeight","document","on","handleResizing","handleResizeEnd","ready","setCartArray","window","setWrapperHeight","setTitleHeight","setMobileCheckoutDebounce","setLoadMore","setMobileCheckout","this","addClass","setTimeout","getProductRows","let","cartItemID","attr","cartItemIDs","push","confirmAction","removeItem","i","length","evt","input","value","val","keyCode","which","prevValue","parseInt","isUnit","hasClass","isCart","parents","widget","limit","btnMethod","setItem","button","isAdd","find","startQty","quantity","removeClass","activeWidget","hasActiveWidget","preventDefault","star","sfitem","isActive","setFavorite","dataObject","method","usfitem","ajax","type","url","cache","async","dataType","data","openSignInModal","toggleItemNote","itemNoteID","itemNote","success","result","ERROR","showErrorNotification","parent","error","hasBuyAgainLoop","Swiper","loop","preloadImages","lazy","navigation","nextEl","prevEl","breakpoints","569","slidesPerView","1025","1301","init","debounce","initialSize","undefined","off","setInput","setMobileBtn","productTotal","pickupMinimum","limitChangeDown","limitChangeUp","message","buttonWrapper","parseFloat","prodTotal","replace","toFixed","setTotals","regTotal","total","savings","regTotalCont","savingsCont","totalCont","minMessage","html","remainder","setClickCarryBtn","setDisplayCount","cartCount","productCount","count","toString","itemHTML","hide","setItemAjax","itemData","el","inputUnit","inputCase","itemID","name","image","container","sale","scaleItem","multiply","unitPrice","unitreg","casePrice","casereg","unitQty","caseQty","unitTotal","caseTotal","unitRegTotal","caseRegTotal","JSON","stringify","CARTCOUNT","setCartCount","updateCartArray","setEventTracking","ITEMS","itemList","hasValue","caseInput","isNaN","setQuantity","add","inputLen","minusDisabled","addDisabled","thisGap","minus","getGap","carouselWidgets","checkQuantity","row","messageBox","hideBox","hideMessage","each","thisQty","setQuantityCarousel","widgets","unitInput","slide","unitLen","caseLen","thisLen","unitMinusDisabled","unitAddDisabled","caseMinusDisabled","unitMinus","unitAdd","caseMinus","unitCount","caseCount","messagePlaceholder","boxHeight","css","text","resetQuantity","productId","unitValue","caseValue","buyAgainItemTile","e","dataset","scroll","isOpen","title","toggleClass","removeAttr","focus","top","offset","documentElement","body","animate","scrollTop","countContainer","countTotal","lastRow","last","lastRowVisible","visible","countContainerVisible","footerVisible","footer","cartContainer","removeItemDisplay","rowPrev","prev","rowNext","next","rowHeight","remove","removeItemData","cartItemIDIndex","COLUMNS","indexOf","itemIndex","DATA","findIndex","x","cartPriceIndex","map","cartIndex","id","itemDesc","splice","setDeleteTracking","modal","focusElement","openModal","one","closeModal","delay","reduceWrapperHeight","transitionWrapper","removeOnLoad","wrapperHeight","loadHeight","wrapper","func","wait","immediate","timeout","context","args","arguments","callNow","clearTimeout","apply","end","startRow","endRow","productType","deptTitle","isPrint","appendTo","addFavorite","setTotal","sfitemIndex","usfitemIndex","itemDescIndex","unitQtyIndex","caseQtyIndex","unitPriceIndex","unitRegIndex","casePriceIndex","caseRegIndex","scaleItemIndex","avgCaseWeightIndex","toMultiply","price","regPrice","setTracking","itemChange","itemLocation","hasUnit","hasCase","item_location","cart_contents","item_change","button_method","dataLayer","setDBEventTracking","console","log","removeFavoriteRow"],"mappings":"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"}