{"version":3,"file":"itemTile.min.js","sources":["scripts/itemTile.min.js"],"sourcesContent":["/**************************************************************************\nName: itemTile.js\nDescription: Product tile script. Includes lazy loading and AJAX add to cart.\nDate Created: 10/24/2023 by Jenna Hart\nModified:\n**************************************************************************/\n\njQuery.noConflict();\n\nvar itemOptions = itemOptions || (function(){\n\tvar thisData = {};\n\n\t// Data\n\tthisData.productData; // Query - Product data\n\n\t// 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; // String - usfitem saved in the session to add to favorite\n\tthisData.sortType; // String - how the products are sorted (e.g. by deparment, alphabetically, frequently used)\n\tthisData.productType; // String - type of product display (e.g. shopping list, search, order)\n\tthisData.productTypeProper; // String - type of product display in display format\n\tthisData.productTotal; // Float - dollar amount total of all products in the shopping list\n\tthisData.addDisabled; // Boolean - if true, Add buttons are disabled\n\tthisData.trackFB; // Boolean - if true, does Facebook Event Tracking\n\tthisData.showFB; // Boolean - if true, displays console log of Facebook 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\n\t// Print Option\n\tthisData.isPrint; // Boolean - if true, is a print view\n\n\tvar isLoading = false;\n\tvar listArray = [];\n\n\tjQuery( document ).ready( function( ){\n\t\tsetListArray();\n\n\t\tjQuery(window).on( 'orientationchange resize', function() {\n setWrapperHeight(false);\n setTitleHeight('.product-tile-title');\n\t\t\tsetMobileAddWidget();\n\t\t\tsetImages(600);\n });\n\n\t\tjQuery(window).on('scroll', function() {\n\t\t\tif(!isLoading) {\n\t\t\t\tsetLoadMore();\n\t\t\t\tsetWrapperHeight(false);\n\t\t\t}\n\t\t});\n\n\t\tjQuery('.layPage').on('click', function(evt) {\n\t\t\tlet activeWidget = jQuery('.product-tile-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-tile') || target.parents('.product-tile').length > 0 ? 1 : 0;\n\n\t\t\t\tif(isTile) {\n\t\t\t\t\tlet tile = target.hasClass('product-tile') ? target : target.parents('.product-tile'),\n\t\t\t\t\t\twidget = tile.find('.product-tile-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('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\tif(!thisData.hasStore) {\n\t\t\t\tjQuery(this).val(0);\n\t\t\t\topenStoreModal();\n\t\t\t} else {\n\t\t\t\tlet keyCode = evt.keyCode || evt.which,\n\t\t\t\t\tinput = jQuery(this),\n\t\t\t\t\tprevValue = parseInt(input.attr('data-value')),\n\t\t\t\t\tvalue = parseInt(input.val()),\n\t\t\t\t\tisUnit = input.hasClass('input-unit') ? true : false,\n\t\t\t\t\twidget = input.parents('.product-tile-widget'),\n\t\t\t\t\tlimit = isUnit ? parseInt(widget.attr('data-limit')) : 0,\n\t\t\t\t\tbtnMethod = '';\n\n\t\t\t\t// If value exceeds unit limit, reset the value\n\t\t\t\tif(isUnit && limit > 0 && value > limit)\n\t\t\t\t\tinput.val(limit);\n\n\t\t\t\t// If tab or shift is pressed, GNDN\n\t\t\t\tif(keyCode != 9 && keyCode != 16 && input.val().length > 0) {\n\t\t\t\t\tif(prevValue < value) btnMethod = 'qtyUp';\n\t\t\t\t\telse if(prevValue > value) btnMethod = 'qtyDown';\n\t\t\t\t\telse btnMethod = 'noChange';\n\n\t\t\t\t\twidget.attr('data-method', btnMethod);\n\n\t\t\t\t\tif(btnMethod != 'noChange')\n\t\t\t\t\t\tsetItem(evt.target, widget);\n\t\t\t\t}\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\tif(!thisData.hasStore) {\n\t\t\t\topenStoreModal();\n\t\t\t} else {\n\t\t\t\tlet input = jQuery(this);\n\n\t\t\t\tif(input.val().length == 0) {\n\t\t\t\t\tlet widget = input.parents('.product-tile-widget');\n\n\t\t\t\t\tinput.val(0);\n\t\t\t\t\tsetItem(evt.target, widget);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tjQuery('body').on('click', '.product-tile-widget-button', function(evt) {\n\t\t\tif(!thisData.hasStore) {\n\t\t\t\topenStoreModal();\n\t\t\t} else {\n\t\t\t\tlet button = jQuery(this),\n\t\t\t\t\twidget = button.parents('.product-tile-widget'),\n\t\t\t\t\tisAdd = button.hasClass('button-add') ? true : false,\n\t\t\t\t\tisUnit = button.hasClass('button-unit') ? true : false,\n\t\t\t\t\tinput = isUnit ? widget.find('input[name=\"unitQty\"]') : widget.find('input[name=\"caseQty\"]'),\n\t\t\t\t\tstartQty = parseInt(input.val()),\n\t\t\t\t\tquantity = isAdd ? startQty + 1 : startQty - 1,\n\t\t\t\t\tlimit = isUnit ? parseInt(widget.attr('data-limit')) : 0,\n\t\t\t\t\tbtnMethod = isAdd ? 'qtyUp' : 'qtyDown';\n\n\t\t\t\twidget.attr('data-method', btnMethod);\n\n\t\t\t\tif(quantity < 0)\n\t\t\t\t\tquantity = 0;\n\t\t\t\telse if(limit == 0 || quantity <= limit)\n\t\t\t\t\tsetItem(evt.target, widget, input, quantity);\n\t\t\t}\n\t\t});\n\n\t\tjQuery('body').on('click', '.product-tile-widget:not(.is-active)', function() {\n\t\t\tjQuery('.product-tile-widget').removeClass('is-active');\n\t\t\tjQuery(this).addClass('is-active');\n\t\t});\n\n\t\tjQuery('body').on('click', '.star.active, .addToFavorites.active', function(evt) {\n\t\t\tevt.preventDefault();\n\n\t\t\tvar message = 'Remove Item From Favorites?';\n\t\t\tvar sfitem = jQuery(this).attr('data-sfitem');\n\n\t\t\tif(thisData.productType == 'favorites')\n\t\t\t\tconfirmAction(message, sfitem, removeFavorite);\n\t\t\telse\n\t\t\t\tremoveFavorite(sfitem);\n\t\t});\n\n\t\tjQuery('body').on('click', '.star:not(.active, .no-hover, .gray), .addToFavorites:not(.active)', function(evt) {\n\t\t\tevt.preventDefault();\n\t\t\t\n\t\t\tvar sfitem = jQuery(this).attr('data-sfitem');\n\n\t\t\tif(!thisData.isUserAuthenticated) {\n\t\t\t\tsaveFavoriteToSession(sfitem);\n\t\t\t\topenSignInModal('', true);\n\t\t\t} else {\n\t\t\t\taddFavorite(sfitem);\n\t\t\t}\n\t\t});\n\n\t\tjQuery('#favoriteSort').on('change', function() {\n\t\t\tthisData.sortType = jQuery(this).val();\n\n\t\t\tresetOption();\n\t\t});\n\t\t\n\t\tjQuery('body').on('click', '.load-products:not(.is-loading)', function() {\n\t\t\tisLoading = true;\n\t\t\tjQuery(this).addClass('is-loading');\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tgetProductTiles();\n\t\t\t}, 100);\n\t\t});\n\n jQuery('#categoryAnchor').on('change', function() {\n if(jQuery(window).width() <= 768)\n jQuery(this).closest('form').submit();\n });\n\t});\n\n\tfunction getProductTiles(end, callback){\n jQuery('.favorite-count').removeClass('is-active');\n\n\t\tisLoading = true;\n\n\t\tlet lastTile = jQuery('.product-tile').last();\n\t\tlet perPage = 11;\n\t\tlet dataObject = { method : 'getProductTileHTMLAjax' }\n\n\t\tdataObject.data = JSON.stringify(thisData.productData);\n\t\tdataObject.startRow = lastTile.length > 0 ? parseInt(lastTile.attr('data-tile')) + 1 : 1;\n\t\tdataObject.endRow = end != undefined && end > 0 ? end : dataObject.startRow + perPage;\n\t\tdataObject.type = thisData.productType;\n\t\tdataObject.sort = thisData.sortType;\n\t\tdataObject.favoritesList = thisData.favoritesList;\n\t\tdataObject.total = thisData.productTotal;\n\t\tdataObject.addDisabled = thisData.addDisabled;\n\t\tdataObject.isPrint = thisData.isPrint;\n\t\tdataObject.storePhone = thisData.storePhone;\n\t\tdataObject.freezerClosed = (typeof thisData.freezerClosed == \"boolean\")? thisData.freezerClosed : false;\n\t\tdataObject.freezerClosedCase = (typeof thisData.freezerClosedCase == \"boolean\")? thisData.freezerClosedCase : false;\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('.product-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('.product-loading').hide();\n\n\t\t\t\t\t\tsetProductCount();\n\t\t\t\t\t\tsetTitleHeight('.product-tile-title');\n\t\t\t\t\t\tsetImages(600);\n\t\t\t\t\t\tsetMobileAddWidget();\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\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\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\tfunction resetOption()\n\t{\n\t\tjQuery('.product-transition-wrapper').css('height', 0);\n\n\t\tsetTimeout(function(){\n\t\t\tjQuery('.product-loading').show();\n\t\t}, 450);\n\n\t\tsetTimeout(function(){\n\t\t\tjQuery('.product-wrapper').html('');\n\n\t\t\tgetProductTiles();\n\t\t}, 550);\n\t}\n\n\tvar setLoadMore = debounce(function()\n\t{\n\t\tif(!isLoading) {\n\t\t\tvar countContainer = jQuery('.product-count'),\n\t\t\t\tcount = countContainer.attr('data-count'),\n\t\t\t\tcountTotal = countContainer.attr('data-totalcount'),\n\t\t\t\tlastTile = jQuery('.product-tile').last().prev().prev().prev().prev(),\n\t\t\t\tlastTileVisible = lastTile.length > 0 && lastTile.visible(true) ? true : false,\n\t\t\t\tcountContainerVisible = countContainer.visible(true) ? true : false;\n\n\t\t\tif ((lastTileVisible || countContainerVisible) && count != countTotal) {\n\t\t\t\tisLoading = true;\n\t\t\t\tjQuery('.load-products').addClass('is-loading');\n\n\t\t\t\tvar tileDebounce = debounce(function(){\n\t\t\t\t\tgetProductTiles();\n\t\t\t\t}, 300);\n\n\t\t\t\ttileDebounce();\n\t\t\t}\n\t\t}\n\t}, 100);\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('body').find('.add-selected').removeClass('is-loading');\n\t\tjQuery('.product-tile .delete').removeClass('is-disabled');\n\t}\n\n\tfunction getItemData(target)\n\t{\n\t\tlet itemData = {},\n\t\t\tel = jQuery(target),\n\t\t\titemClass = el.attr('data-ref'),\n\t\t\titem = el.parents('.' + itemClass),\n\t\t\tinputUnit = item.find('input[name=\"unitQty\"]'),\n\t\t\tinputCase = item.find('input[name=\"caseQty\"]');\n\n\t\titemData.itemID = item.attr('data-id');\n\t\titemData.sfitem = item.attr('data-sfitem');\n\t\titemData.name = item.attr('data-name');\n\t\titemData.image = item.attr('data-image');\n\t\titemData.sale = parseInt(item.attr('data-sale'));\n\t\titemData.scaleItem = parseInt(item.attr('data-scaleitem'));\n\t\titemData.multiply = parseFloat(item.attr('data-multiply'));\n\t\titemData.unitPrice = parseFloat(item.attr('data-unitprice'));\n\t\titemData.unitreg = parseFloat(item.attr('data-unitreg'));\n\t\titemData.casePrice = parseFloat(item.attr('data-caseprice'));\n\t\titemData.casereg = parseFloat(item.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\t\titemData.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.prodTotal = itemData.total.toFixed(2).replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1,\");\n\t\t\n\t\titemData.savings = itemData.unitreg > 0 || itemData.casereg > 0 ? (((itemData.unitreg * itemData.unitQty) + (itemData.casereg * itemData.caseQty)) - itemData.total ) * itemData.multiply : 0;\n\n\t\t\n\t\treturn itemData;\n\t}\n\n\tvar setSidebarDisplay = function(itemID, result, hasPrice)\n\t{\n\t\tvar sidebar = jQuery('.psSideRecent');\n\t\tvar endTotalCont = sidebar.find('.endTotal');\n\n\t\tsidebar.find('.end-total-container').removeClass('is-hidden');\n\n\t\t// Check that the total and View All link exist\n\t\t// Add them if they don't\n\t\tif(endTotalCont == undefined || endTotalCont.length <= 0)\n\t\t{\n\t\t\tvar endTotalCont = jQuery('');\n\t\t\tvar listLink = jQuery('View All');\n\n\t\t\tendTotalCont.appendTo(sidebar);\n\t\t\tlistLink.appendTo(sidebar);\n\n\t\t\tvar endTotalCont = sidebar.find('.endTotal');\n\t\t}\n\n\t\t// If the item is already in the sidebar, hide it\n\t\tjQuery('.product-row-side[data-id=\"' + itemID + '\"]').removeClass('is-active').attr('data-id', '');\n\n\t\t// Prepend the new item to the sidebar and update the count and total\n\t\tsetTimeout(function() {\n\t\t\tif(hasPrice)\n\t\t\t\tjQuery(result.html).prependTo(sidebar);\n\n\t\t\tjQuery('.itemCount').attr('data-itemcount', result.COUNT).html('(' + result.COUNT + ')');\n\t\t\tendTotalCont.html(result.TOTAL);\n\n\t\t\tsetClickCarryBtn(result.TOTAL.replace('$', ''));\n\t\t}, 50);\n\n\t\t// Animate the new item into view\n\t\tsetTimeout(function() {\n\t\t\tvar row = jQuery('body').find(jQuery('.product-row-side[data-id=\"' + itemID + '\"'));\n\t\t\trow.addClass('is-active');\n\t\t}, 100);\n\n\t\t// Animate any extra items out of view\n\t\tsetTimeout(function() {\n\t\t\tvar rows = jQuery('.product-row-side.is-active');\n\n\t\t\tif(rows.length > 5)\n\t\t\t{\n\t\t\t\tfor (var i = rows.length; i > 5; i--)\n\t\t\t\t{\n\t\t\t\t\tjQuery('.product-row-side.is-active').last().removeClass('is-active');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsetSidebar();\n\t\t}, 150);\n\t}\n\n\tvar getSidebarDisplay = function(itemData)\n\t{\n\t\tvar sidebar = jQuery('.psSideRecent'),\n\t\t\thasPrice = parseFloat(itemData.prodTotal) > 0 ? true : false;\n\n\t\tif(sidebar.length > 0)\n\t\t{\n\t\t\tvar sideDataObject = { method : 'getSidebarProductRowHTMLAjax' }\n\n\t\t\tsideDataObject.itemID = itemData.itemID;\n\t\t\tsideDataObject.itemTotal = itemData.total;\n\t\t\tsideDataObject.image = itemData.image;\n\t\t\tsideDataObject.itemDesc = itemData.name;\n\t\t\tsideDataObject.unitSellPrice = itemData.unitPrice;\n\t\t\tsideDataObject.unitQty = itemData.unitQty != undefined ? itemData.unitQty : 0;\n\t\t\tsideDataObject.caseSellPrice = itemData.casePrice;\n\t\t\tsideDataObject.caseQty = itemData.caseQty != undefined ? itemData.caseQty : 0;\n\t\t\tsideDataObject.showSpecial = itemData.sale > 0 && itemData.savings > 0 ? 1 : 0;\n\t\t\tsideDataObject.scaleItem = itemData.scaleItem;\n\n\t\t\tjQuery.ajax( {\n\t\t\t\ttype : 'post',\n\t\t\t\turl : '/cfcs/itemGW.cfc',\n\t\t\t\tcache : false,\n\t\t\t\tasync : true,\n\t\t\t\tdataType : 'json',\n\t\t\t\tdata : sideDataObject,\n\t\t\t\tsuccess : function(result){\n\t\t\t\t\tif(result)\n\t\t\t\t\t\tsetSidebarDisplay(sideDataObject.itemID, result, hasPrice);\n\t\t\t\t\telse\n\t\t\t\t\t\tshowErrorNotification();\n\t\t\t\t},\n\t\t\t\terror : function(result) {\n\t\t\t\t\tshowErrorNotification();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t// var getAddData = function(rows)\n\t// {\n\t// \tvar itemArray = [],\n\t// \t\titemIDs = [],\n\t// \t\titemNums = [],\n\t// \t\tshowQtyModal = false;\n\n\t// \tif(rows.length > 0)\n\t// \t{\n\t// \t\trows.each(function() {\n\t// \t\t\tvar row = jQuery(this),\n\t// \t\t\t\tcheckbox = row.find('input[name=\"addItem\"]'),\n\t// \t\t\t\titemID = checkbox.val(),\n\t// \t\t\t\tsfitem = row.attr('data-sfitem'),\n\t// \t\t\t\tunits = row.find('select[name=\"units\"]'),\n\t// \t\t\t\tunitQty = units.val(),\n\t// \t\t\t\tcases = row.find('select[name=\"cases\"]'),\n\t// \t\t\t\tcaseQty = cases.val() != undefined ? cases.val() : 0;\n\n\t// \t\t\tif(thisData.productType != 'shoppingList' && unitQty == 0 && caseQty == 0)\n\t// \t\t\t{\n\t// \t\t\t\tunits.addClass('error');\n\t// \t\t\t\tcases.addClass('error');\n\t// \t\t\t\tshowQtyModal = true;\n\t// \t\t\t}\n\t// \t\t\telse\n\t// \t\t\t{\n\t// \t\t\t\titemArray.push({\n\t// \t\t\t\t\t\"itemID\" : itemID,\n\t// \t\t\t\t\t\"sfitem\" : sfitem,\n\t// \t\t\t\t\t\"unitQty\" : unitQty,\n\t// \t\t\t\t\t\"caseQty\" : caseQty\n\t// \t\t\t\t});\n\n\t// \t\t\t\titemIDs.push(itemID);\n\t// \t\t\t\titemNums.push(sfitem);\n\t// \t\t\t}\n\t// \t\t});\n\n\t// \t\tif(showQtyModal)\n\t// \t\t{\n\t// \t\t\tvar modal = jQuery('.modal-notify'),\n\t// \t\t\t\tfocusElement = modal.find('.close-modal-button'),\n\t// \t\t\t\tmessage = 'Please select a quantity';\n\n\t// \t\t\topenModal(modal, focusElement, message);\n\t// \t\t\treturn;\n\t// \t\t}\n\t// \t}\n\t// \telse\n\t// \t{\n\t// \t\tvar modal = jQuery('.modal-notify'),\n\t// \t\t\tfocusElement = modal.find('.close-modal-button'),\n\t// \t\t\tmessage = 'Please check one or more items';\n\n\t// \t\topenModal(modal, focusElement, message);\n\t// \t\treturn;\n\t// \t}\n\n\t// \treturn {itemArray, itemIDs, itemNums};\n\t// }\n\n\tvar setItemAjax = debounce(function(target, widget)\n\t{\n\t\tjQuery('body').find('.add-selected').addClass('is-loading');\n\n\t\tvar itemData = getItemData(target);\n\n\t\t// If product search page, add log\n\t\tif(thisData.productType == 'search')\n\t\t\tsetSearchLogAction(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\t\tvar itemIDs = [itemData.itemID];\n\n\t\tvar dataObject = { method : 'bulkAddProductAJAX' }\n\t\t\tdataObject.data = JSON.stringify(data);\n\t\t\tdataObject.itemNums = JSON.stringify(itemNums);\n\t\t\tdataObject.itemIDs = JSON.stringify(itemIDs);\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\t\t\t\t\twidget.find('input').each(function() {\n\t\t\t\t\t\tlet input = jQuery(this),\n\t\t\t\t\t\t\tvalue = input.val();\n\n\t\t\t\t\t\tinput.attr('data-value', value);\n\t\t\t\t\t});\n\n\t\t\t\t\t// Update cart count\n\t\t\t\t\tsetCartCount(result.CARTCOUNT);\n\n\t\t\t\t\t// Update Shopping List array\n\t\t\t\t\tupdateListArray(widget, itemData);\n\n\t\t\t\t\t// Update sidebar display\n\t\t\t\t\tgetSidebarDisplay(itemData);\n\n\t\t\t\t\t// Event Tracking\n\t\t\t\t\tsetEventTracking(target, widget, itemData);\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, input, quantity)\n\t{\n\t\tif(input != undefined && quantity != undefined)\n\t\t\tinput.val(quantity);\n\n\t\tsetQuantity(widget);\n\t\tsetItemAjax(target, widget);\n\t};\n\n\tfunction getGap(inputLen) {\n\t\tswitch(inputLen) {\n\t\t\tcase 1:\n\t\t\t\tthisGap = 8;\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 = 8;\n\t\t}\n\n\t\treturn thisGap;\n\t}\n\n\tfunction checkQuantity(widget)\n\t{\n\t\tlet tile = widget.parents('.product-tile'),\n\t\t\tunitInput = widget.find('input[name=\"unitQty\"]'),\n\t\t\tcaseInput = widget.find('input[name=\"caseQty\"]'),\n\t\t\tunitQty = unitInput.val(),\n\t\t\tcaseQty = caseInput.val(),\n\t\t\tmessageBox = tile.find('.product-tile-message:not(.not-visible)'),\n\t\t\tmessagePlaceholder = tile.find('.product-tile-message.not-visible'),\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\tlinkContainer = tile.find('.tile-link-container');\n\n\t\tif(unitQty > 20 || caseQty > 20) {\n\t\t\tmessagePlaceholder.removeClass('list-only');\n\t\t\tlinkContainer.removeClass('list-only');\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\t} else if (hideBox) {\n\t\t\t\tmessagePlaceholder.addClass('list-only');\n\t\t\t\tlinkContainer.addClass('list-only');\n\t\t\t\tmessageBox.addClass('is-hidden');\n\t\t\t}\n\t\t}\n\t\t\n\t\tlet boxHeight = messageBox.height();\n\t\tif(messagePlaceholder.hasClass('list-only') && boxHeight < 18)\n\t\t\tboxHeight = 18;\n\t\tmessagePlaceholder.css('height', boxHeight + 'px');\n\t}\n\n\tfunction setQuantity(widget)\n\t{\n\t\tlet tile = widget.parents('.product-tile'),\n\t\t\tunitQty = widget.find('input[name=\"unitQty\"]').val(),\n\t\t\tcaseQty = widget.find('input[name=\"caseQty\"]').val(),\n\t\t\tunitLen = unitQty != undefined ? unitQty.length : 1,\n\t\t\tcaseLen = caseQty != undefined ? caseQty.length : 1,\n\t\t\tthisLen = unitLen > caseLen ? unitLen : caseLen,\n\t\t\tlimit = parseInt(widget.attr('data-limit')),\n\t\t\tunitMinusDisabled = unitQty != undefined && unitQty <= 0 ? true : false,\n\t\t\tunitAddDisabled = unitQty != undefined && limit > 0 && unitQty >= limit ? true : false,\n\t\t\tcaseMinusDisabled = caseQty != undefined && caseQty <= 0 ? true : false,\n\t\t\tthisGap = getGap(thisLen);\n\n\t\t// Check for quantity over/under 20\n\t\tcheckQuantity(widget);\n\n\t\ttile.find('.product-tile-widget').each(function() {\n\t\t\tlet thisWidget = jQuery(this),\n\t\t\t\tunitMinus = thisWidget.find('.button-unit.button-minus'),\n\t\t\t\tunitAdd = thisWidget.find('.button-unit.button-add'),\n\t\t\t\tcaseMinus = thisWidget.find('.button-case.button-minus'),\n\t\t\t\tunitCount = thisWidget.find('.count-value-unit'),\n\t\t\t\tcaseCount = thisWidget.find('.count-value-case');\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\tthisWidget.find('.product-controls-row').removeClass('gap-0 gap-2 gap-5 gap-8');\n\t\t\tthisWidget.find('.product-controls-row').addClass('gap-' + thisGap);\n\n\t\t\tthisWidget.find('.product-tile-widget-quantity').removeClass('product-tile-widget-quantity-1 product-tile-widget-quantity-2 product-tile-widget-quantity-3 product-tile-widget-quantity-4');\n\t\t\tthisWidget.find('.product-tile-widget-quantity').addClass('product-tile-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\tthisWidget.addClass('has-value');\n\t\t\telse\n\t\t\t\tthisWidget.removeClass('has-value');\n\t\t});\n\t}\n\n\tvar showunitSelectMsg = function( selectedVal, itemID ){\n\t\t/* Shows or hides the warning message when the user selects more than 20 units/cases of an item */\n\t\tvar warningMsg = jQuery('.qty-warning-msg' + itemID);\n\n\t\tif( selectedVal > 20)\n\t\t\twarningMsg.addClass('is-active').show();\n\t\telse\n\t\t\twarningMsg.removeClass('is-active').hide('fast');\n\n\t\tsetWrapperHeight();\n\t};\n\n\tvar reduceWrapperHeight = function(){\n\t\t/* Removes the load more section for a smooth transition when loading the next set of tiles */\n\t\tvar transitionWrapper = jQuery('.product-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(setLoading) {\n\t\tif(setLoading == undefined)\n\t\t\tvar setLoading = true;\n\n\t\t/* Sets the height of the product list wrapper */\n\t\tvar transitionWrapper = jQuery('.product-transition-wrapper'),\n\t\t\twrapper = jQuery('.product-wrapper');\n\n\t\tsetTimeout(function() {\n\t\t\ttransitionWrapper.css('height', wrapper.height() + 'px');\n\n\t\t\tif(setLoading)\n\t\t\t\tisLoading = false;\n\t\t}, 210);\n\t}, 100);\n\n\tvar setMobileAddWidget = debounce(function () {\n\t\tif(jQuery(window).width() <= 600) {\n\t\t\tjQuery('.product-tile-widget-container.showAt600.has-message').each(function() {\n\t\t\t\tlet addWidget = jQuery(this);\n\t\t\t\tlet productTile = addWidget.siblings('.product-tile-link');\n\t\t\t\tlet placeholder = productTile.find('.add-widget-wrapper');\n\n\t\t\t\tif(productTile.length > 0 && placeholder.length > 0) {\n\t\t\t\t\tlet bottom = productTile.innerHeight() - placeholder.position().top - placeholder.outerHeight() + 1;\n\t\t\t\t\tif(bottom > 56)\n\t\t\t\t\t\taddWidget.css('bottom', bottom + 'px');\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tjQuery('.product-tile-widget-container.showAt600.has-message').css('bottom', '56px')\n\t\t}\n\t}, 100);\n\n\tvar confirmAction = function(message, sfitem, callback){\n\t\t/* Prompts the user to confirm an action\n\t\t * The callback function will be passed the given sfitem if the user selects \"Yes\"\n\t\t */\n\t\tif(message == undefined || sfitem == 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\tjQuery('.modal-confirm-button').one('click', function() {\n\t\t\tcloseModal(modal);\n\t\t\tcallback(sfitem);\n\t\t});\n\n\t\tjQuery('.modal-confirm-button').one('keyup', function(evt) {\n\t\t\tif( evt.keyCode == 13 || evt.keyCode == 27 ) {\n\t\t\t\tcloseModal(modal);\n\t\t\t\tcallback(sfitem);\n\t\t\t}\n\t\t});\n\t}\n\n\tvar reduceProductCount = function(){\n\t\t/* Sets the count of visible products to the currently displayed number out of the total\n\t\t * For example, it could update the product count to read \"20 of 132\"\n\t\t */\n\t\tvar countDisplay = jQuery('.product-count'),\n\t\t\tcount = countDisplay.attr('data-count'),\n\t\t\tcountTotal = countDisplay.attr('data-totalcount'),\n\t\t\tnewCount = parseInt(count) - 1;\n\t\t\tnewCountTotal = parseInt(countTotal) - 1;\n\n\t\tcountDisplay.attr('data-count', newCount).attr('data-totalcount', newCountTotal);\n\t\tcountDisplay.html(newCount + ' of ' + newCountTotal);\n\t}\n\n\tvar setProductCount = function(){\n\t\t/* Sets the count of visible products to the currently displayed number out of the total\n\t\t * For example, it could update the product count to read \"20 of 132\"\n\t\t */\n\t\tvar countDisplay = jQuery('.product-count'),\n\t\t\tcountTotal = countDisplay.attr('data-totalcount'),\n countText = countTotal == 1 ? ' Item' : ' Items';\n\n jQuery('.favorite-count').html(countTotal + countText).addClass('is-active');\n\t}\n\n\t// var setProductData = function(tileData){\n\t// \t/* Updates item data in the product array */\n\t// \tvar sfitemIndex = thisData.productData.COLUMNS.indexOf('SFITEM'),\n\t// \t\tusfitemIndex = thisData.productData.COLUMNS.indexOf('USFITEM'),\n\t// \t\titemQtyIndex = thisData.productData.COLUMNS.indexOf('ITEM_QUANTITY'),\n\t// \t\tcaseQtyIndex = thisData.productData.COLUMNS.indexOf('CASE_QUANTITY'),\n\t// \t\titemIndex = thisData.productData.DATA.findIndex(x => x[sfitemIndex] == tileData.sfitem);\n\n\t// \tif(itemIndex < 0)\n\t// \t\titemIndex = thisData.productData.DATA.findIndex(x => x[usfitemIndex] == tileData.sfitem);\n\n\t// \tthisData.productData.DATA[itemIndex][itemQtyIndex] = tileData.unitQty;\n\t// \tthisData.productData.DATA[itemIndex][caseQtyIndex] = tileData.caseQty;\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 removeItemData = function(sfitem)\n\t{\n\t\t// Remove item from product array\n\t\tvar sfitemIndex = thisData.productData.COLUMNS.indexOf('SFITEM'),\n\t\t\tusfitemIndex = thisData.productData.COLUMNS.indexOf('USFITEM'),\n\t\t\titemIndex = thisData.productData.DATA.findIndex(x => x[sfitemIndex] == sfitem);\n\n\t\tif(itemIndex < 0)\n\t\t\titemIndex = thisData.productData.DATA.findIndex(x => x[usfitemIndex] == sfitem);\n\n\t\tthisData.productData.DATA.splice(itemIndex, 1);\n\t}\n\n\tvar removeFavoriteTile = function(sfitem)\n\t{\n\t\tvar tile = jQuery('.product-tile[data-itemNum=\"' + sfitem + '\"]');\n\n\t\ttile.addClass('is-hidden');\n\n\t\tsetTimeout(function() {\n\t\t\tif(tile)\n\t\t\t\ttile.remove();\n\n\t\t\tsetWrapperHeight();\n\t\t}, 400);\n\n\t\t// Remove item from product array\n\t\tremoveItemData(sfitem);\n\t}\n\n\tvar setFavoriteData = function(sfitem, isAdd)\n\t{\n\t\t// Update item data in product array\n\t\tvar sfitemIndex = thisData.productData.COLUMNS.indexOf('SFITEM'),\n\t\t\tusfitemIndex = thisData.productData.COLUMNS.indexOf('USFITEM'),\n\t\t\tfavoriteIndex = thisData.productData.COLUMNS.indexOf('ISFAVORITE'),\n\t\t\titemIndex = thisData.productData.DATA.findIndex(x => x[sfitemIndex] == sfitem);\n\n\t\tif(itemIndex < 0)\n\t\t\titemIndex = thisData.productData.DATA.findIndex(x => x[usfitemIndex] == sfitem);\n\n\t\tthisData.productData.DATA[itemIndex][favoriteIndex] = isAdd;\n\n\t\treduceProductCount();\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\tsetFavoriteData(sfitem, isAdd);\n\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\tremoveFavoriteTile(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\tvar removeFavorite = function(sfitem){\n\t\t/* Removes an item from the user's favorites */\n\t\tvar isAdd = 0;\n\n\t\tsetFavorite(sfitem, isAdd);\n\t}\n\n\tvar addFavorite = function(sfitem){\n\t\t/* Adds an item to the user's favorites */\n\t\tvar isAdd = 1;\n\n\t\tsetFavorite(sfitem, isAdd);\n\t}\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\tvar setListArray = function()\n\t{\n\t\tif(typeof itemList != 'undefined') {\n\t\t\tlet sfitemIndex = 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\tcasePriceIndex = itemList.COLUMNS.indexOf('CASESELLPRICE'),\n\t\t\t\tscaleItemIndex = itemList.COLUMNS.indexOf('SCALEITEM'),\n\t\t\t\tavgCaseWeightIndex = itemList.COLUMNS.indexOf('AVECASEWEIGHT');\n\n\t\t\tfor (var i = 0; i < itemList.DATA.length; i++)\n\t\t\t{\n\t\t\t\tlet toMultiply = itemList.DATA[i][scaleItemIndex] == 1 && itemList.DATA[i][avgCaseWeightIndex] > 0 ? parseInt(itemList.DATA[i][avgCaseWeightIndex]): 1,\n\t\t\t\t\titemID = itemList.DATA[i][usfitemIndex].length > 0 ? itemList.DATA[i][usfitemIndex] : itemList.DATA[i][sfitemIndex],\n\t\t\t\t\tprice = ((itemList.DATA[i][unitPriceIndex] * itemList.DATA[i][unitQtyIndex]) + (itemList.DATA[i][casePriceIndex] * itemList.DATA[i][caseQtyIndex])) * toMultiply;\n\n\t\t\t\tlistArray.push({\n\t\t\t\t\t\"id\" : itemID,\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\t\t\t}\n\t\t}\n\t}\n\n\tvar updateListArray = function(widget, itemData)\n\t{\n\t\tif(widget && itemData) {\n\t\t\tlet itemIndex = listArray.map(function(x) {return x.id; }).indexOf(itemData.sfitem),\n\t\t\t\ttoMultiply = parseInt(widget.attr('data-multiply')),\n\t\t\t\tprice = ((itemData.unitPrice * itemData.unitQty) + (itemData.casePrice * itemData.caseQty)) * toMultiply;\n\t\t\t\n\t\t\tif(itemIndex >= 0) {\n\t\t\t\tlistArray[itemIndex].unitQty = itemData.unitQty;\n\t\t\t\tlistArray[itemIndex].caseQty = itemData.caseQty;\n\t\t\t\tlistArray[itemIndex].price = price.toFixed(2);\n\t\t\t} else {\n\t\t\t\tlistArray.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\" : price.toFixed(2)\n\t\t\t\t});\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 setEventTracking = function(target, widget, itemData)\n\t{\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\n\t\tlet el = jQuery(target),\n\t\t\thasUnit = el.hasClass('button-unit') || el.hasClass('input-unit') ? true : false,\n\t\t\thasCase = el.hasClass('button-case') || el.hasClass('input-case') ? true : false,\n\t\t\ttrackFB = thisData.trackFB != 'undefined' ? thisData.trackFB : false,\n\t\t\tshowFB = thisData.showFB != 'undefined' ? thisData.showFB : false,\n\t\t\tbtnMethod = widget.attr('data-method'),\n\t\t\titemLocation = thisData.productTypeProper;\n\n\t\t// Units\n\t\tif(hasUnit)\n\t\t\tvar itemChange = [{'id': data.sfitem, 'name': data.itemDesc.replace(/(['\"])/g, \"\\\\$1\"), 'type': 'unit', 'quantity': data.unitQty, 'price': data.unitTotal}, {}];\n\n\t\t// Cases\n\t\tif(hasCase)\n\t\t\tvar itemChange = [{'id': data.sfitem, 'name': data.itemDesc.replace(/(['\"])/g, \"\\\\$1\"), 'type': 'case', 'quantity': data.caseQty, 'price': data.caseTotal}, {}];\n\n\t\tif(hasUnit || 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': listArray,\n\t\t\t\t\t'item_change': itemChange,\n\t\t\t\t\t'button_method': 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(listArray) + \", 'item_change': \" + JSON.stringify(itemChange) + \", 'button_method': '\" + btnMethod + \"' });\");\n\t\t\t}\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\tgetProductTiles(0, thisData.callback);\n\t\t\telse\n\t\t\t\tgetProductTiles();\n }\n };\n}());\n"],"names":["jQuery","noConflict","itemOptions","thisData","isLoading","productData","isUserAuthenticated","hasStore","favoritesList","sessionFavorite","sortType","productType","productTypeProper","productTotal","addDisabled","trackFB","showFB","callback","storePhone","freezerClosed","freezerClosedCase","freezerClosedMessage","isPrint","listArray","getProductTiles","end","removeClass","let","lastTile","last","dataObject","method","data","JSON","stringify","startRow","length","parseInt","attr","endRow","undefined","type","sort","total","ajax","url","cache","async","dataType","success","wrapper","reduceWrapperHeight","setTimeout","appendTo","hide","setProductCount","setTitleHeight","setImages","setMobileAddWidget","setWrapperHeight","addFavorite","error","showErrorNotification","document","ready","setListArray","window","on","setLoadMore","evt","activeWidget","hasActiveWidget","target","hasClass","parents","widget","find","preventDefault","input","this","value","val","keyCode","which","prevValue","isUnit","limit","btnMethod","setItem","openStoreModal","button","isAdd","startQty","quantity","addClass","sfitem","confirmAction","removeFavorite","usfitem","openSignInModal","css","show","html","width","closest","submit","debounce","count","countTotal","lastTileVisible","countContainerVisible","countContainer","prev","visible","modal","focusElement","delay","openModal","getSidebarDisplay","itemData","sideDataObject","sidebar","hasPrice","parseFloat","prodTotal","itemID","itemTotal","image","itemDesc","name","unitSellPrice","unitPrice","unitQty","caseSellPrice","casePrice","caseQty","showSpecial","sale","savings","scaleItem","result","endTotalCont","listLink","prependTo","COUNT","TOTAL","setClickCarryBtn","replace","rows","i","setSidebar","setItemAjax","itemClass","el","inputUnit","item","inputCase","multiply","unitreg","casereg","unitTotal","caseTotal","toFixed","setSearchLogAction","itemNums","itemIDs","each","setCartCount","CARTCOUNT","updateListArray","setEventTracking","setQuantity","tile","unitLen","caseLen","thisLen","unitMinusDisabled","unitAddDisabled","caseMinusDisabled","thisGap","inputLen","checkQuantity","unitInput","caseInput","messageBox","messagePlaceholder","message","hideBox","hideMessage","linkContainer","boxHeight","height","thisWidget","unitMinus","unitAdd","caseMinus","unitCount","caseCount","text","parent","transitionWrapper","removeOnLoad","wrapperHeight","loadHeight","remove","setLoading","addWidget","productTile","siblings","placeholder","bottom","innerHeight","position","top","outerHeight","one","closeModal","countText","setFavorite","setFavoriteData","removeFavoriteTile","sfitemIndex","usfitemIndex","COLUMNS","indexOf","itemIndex","DATA","findIndex","x","splice","favoriteIndex","countDisplay","newCount","newCountTotal","func","wait","immediate","timeout","context","args","arguments","callNow","clearTimeout","apply","itemList","itemDescIndex","unitQtyIndex","caseQtyIndex","unitPriceIndex","casePriceIndex","scaleItemIndex","avgCaseWeightIndex","toMultiply","price","push","id","map","itemChange","hasUnit","hasCase","itemLocation","event","item_location","cart_contents","item_change","button_method","dataLayer","setDBEventTracking","console","log","init"],"mappings":"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"}