{"version":3,"sources":["webpack:///../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///../node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///../node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///../node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///../node_modules/webpack/buildin/global.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/int_energy_launch/cartridge/client/default/js/energyLaunch.js","webpack:///./cartridges/int_tealium_sfra/cartridge/client/default/js/pages/tealium.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/common/loadScript.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/components/jquery-zoom.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/product/base.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/product/components/attrHelpers.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/product/components/utilHelper.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/product/zoom.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/util/measures.js","webpack:///./cartridges/org_newbalance/cartridge/client/default/js/utils.js"],"names":["module","exports","arr","len","length","i","arr2","Array","arrayLikeToArray","require","isArray","iter","Symbol","iterator","Object","from","TypeError","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","o","minLen","n","prototype","toString","call","slice","constructor","name","test","g","this","Function","e","window","setTabNextFocus","focusParams","event","key","keyCode","firstFocusableEl","$","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","is","nextToLastElementSelector","linkElements","shiftKey","focus","preventDefault","ageVerificationCheckbox","howEarlyAccessWorksLink","termsConditionsLink","customerHasNotEnteredEarlyAccess","document","querySelector","customerHasEnteredEarlyAccess","earlyAccessButton","energyLaunchAddToCartButton","rowAttribute","shipInStore","handleButtonRenderingOnEnergyLaunchPDP","launchEventContainer","currentDateTimeUTC","Date","toISOString","launchEventStartTimeUtc","dataset","nextLaunchEvent","notifyMeButton","classList","add","remove","containerType","updateEarlyAccessPassNumber","$earlyAccessPassesValue","earlyAccessPassesWord","number","singleDigit","doubleDigit","belowHundred","result","translate","num","word","rem","Math","trunc","parseInt","trim","convertNumberToWord","text","addEventListener","checked","off","on","url","attributes","value","launchEventId","addClass","find","spinner","start","ajax","type","dataType","data","success","earlyAccessButtonEntered","ageVerificationCheckboxWrapper","removeClass","error","err","responseJSON","correlationId","complete","stop","EventsQueue","list","timer","eventData","unshift","runDelayed","setTimeout","run","bind","pop","utag","page_path","pathname","eventType","view","callbackFn","event_type","link","utag_data","extend","tealium","eventCount","checkElement","obj","href","label","target","tagName","parent","attr","triggerEvent","location","getDevice","navUserAgent","navigator","userAgent","match","getProductDetails","pid","Promise","resolve","reject","preUrl","productInfo","productArray","product_name","product_brand","product_unit_price","product_currency","product_sku","product_style_number","adobe_product_id","product_id","product_variant_id","product_master","product_category","product_subcategory","product_quantity","product_availability","product_vat","product_gender","product_color","product_size","product_width","product_gbu","product_line","product_type","product_silhouette","original_product_unit_price","category_path","push","round","tealiumHelper","PageName","eventMessage","gaAction","galabel","selectedpaymentmethod","tealiumObject","page_name","event_message","ga_action","ga_label","selected_payment_method","ajaxProductImpressionTriggerEvent","productImpressions","tlProductImpressionsObjectvil","item_list_results","item_id","tealiumMasterIds","item_id_price","tealiumPIProdPrices","item_name","tealiumPIProdNames","item_price","item_brand","tealiumPIProdBrands","item_category","tealiumPIProdCategory","item_variant","tealiumPIProdIds","item_list_id","item_list_name","index","tealiumPIProdPosition","page_group","page_context_type","page_context_title","site","site_section","site_type","login_status","customer_status","user_id","element_type","element_text","product_list","tealiumProdStyles","tealiumProdColors","product_impression_price","product_impression_brand","product_impression_category","product_impression_color","product_impression_gender","tealiumProdGenders","product_impression_id","product_impression_position","product_impression_line","tealiumProdLine","product_impression_list","product_impression_master_id","product_impression_name","product_impression_size","tealiumProdSizes","product_impression_sku","product_impression_style_number","product_impression_silhouette","tealiumProdSilhouette","product_impression_variant_id","product_impression_subcategory","tealiumPIProdSubCategory","product_impression_item_category","product_impression_item_category2","product_impression_item_category3","product_impression_item_category4","product_impression_item_category5","scriptCache","promise","script","createElement","onerror","Error","onload","async","src","currentScript","parentNode","insertBefore","head","getElementsByTagName","appendChild","then","global","defaults","callback","duration","touch","onZoomIn","onZoomOut","magnify","zoom","source","img","targetHeight","targetWidth","sourceHeight","sourceWidth","xRatio","yRatio","offset","$target","position","css","$source","style","overflow","width","height","top","left","opacity","border","maxWidth","maxHeight","appendTo","init","outerWidth","outerHeight","move","pageX","pageY","max","min","fn","options","each","settings","$img","mousemove","clicked","touched","srcElement","getAttribute","currentSrc","one","fadeTo","support","isFunction","which","originalEvent","touches","changedTouches","setAttribute","alt","jQuery","measures","focusHelper","attrHelpers","carouselConfig","zoomImage","afterpayWidget","utils","pdpInstoreInventory","selectedRefinementColorClasses","ADD_TO_CART_SELECTOR","CAROUSEL_ITEM_CLASS","SPINNER_REQUIRED_MODALS","getPidValue","$el","hasClass","closest","getQuantitySelector","getQuantitySelected","val","updateNotifyMeButtonAttributes","data1","undefined","currentButton","id","productName","sellableFrom","images","productDetail","stickyProductDescription","requestAnimationFrame","$productImgContainer","$productDetails","addModelData","imgs","carousel","product","showModelSizeData","brand","title","insertAfter","last","append","hideProductAvailabilityElements","resetUnisexFitConversion","$unisexSizes","$unisexHead","$unisexBody","isUnisexProduct","$isUnisexProduct","toggleUnisexFitConversion","$sizeElement","sizeValue","$unisexDiv","$unisexBlock","displaySelectableVariant","$variants","first","displayFitConversion","$unisexFitConversion","$selectedVariant","handleVariantResponse","response","$productContainer","isVariant","availability","isAvailable","preorderEl","isChoiceOfBonusProducts","parents","variationAttributes","updateAttrs","resources","productType","readyToOrder","filter","videoAsset","isEditCartorWishlist","$selectSizeProductModal","$historyEditProductModal","isSelectSizeProductModal","isHistoryEditProductModal","hasVideoAsset","videoUrl","carouselId","empty","sliderImageText","k","pictureSource","j","media","srcset","carouselIem","videoContainer","videoElement","videoUrlPoster","$carousel","l","zoomPictureSource","m","zoomsrc","zoomModalCall","detach","wrap","toggleCarouselControls","instantiateProductVideos","split","forEach","className","startsWith","imageTotal","createCarousel","videoUrlFromImageGroup","videoPosterUrlFromImageGroup","videoPosterUrl","getVideoObject","preOrder","backorder","$priceSelector","$tempSelector","getPriceSelector","replaceWith","price","html","$stickyCart","sales","formatted","decimalPrice","promotionsHtml","availabilityValue","availabilityMessages","messages","info_selectforstock","message","threshHoldMsg","thresholdMsg","count","productsLeft","trigger","updateAvailability","modelSizingInfo","modelSizingInformation","$modelList","wishlistUrl","jsonResponse","itemExistsFlag","getWidget","qtyLimit","limit","prop","attributeGroup","ID","attribute","getAttributesHtml","sitePrefs","bopisEnabled","selectStoreBtn","available","availableForInStorePickup","removeAttr","toggleSelectStoreButton","updateBopis","pickUpInStore","storeInventoryMessageTemplate","storePlaceholder","inStores","storesModel","stores","bopisEligible","storePlaceholderID","storeAts","currentStore","storeATS","storeNavigationHtml","isSizeSelected","querySelectorAll","isCupSelected","updatePISMessage","showPickupStoreRadio","lastArguments","Bopis","update","loader","args","SpinnerOnModal","nbModals","startspinner","modalId","addTOCartShowHide","$productAttributes","checkIfSelectedValueOOS","productDetails","returnVal","values","selected","fullyOOSInd","replaceAddToCartWithBISN","isBISNEnabled","bisnEnabled","isBISNEligibleProduct","hasSelectedUnorderableVariant","isBISNEnabledStyle","bisnEnabledStyle","isBOPISFulfillment","updateButtonOnLoadingAttributeFromUrl","fullyOutOfStock","nonSellable","isForcedSoldOut","isNonSellable","todayDate","availableDate","availableTime","$nonSellableMessage","$date","$time","updateNonSellableMessage","sellableFromFormattedDate","sellableFromFormattedTime","filterRecommendations","element","enableFilterRecommendations","$currentElement","$filterRecommendation","isFootwear","gender","size","params","filterEinsteinRecommendationOnPDP","attributeSelect","selectedValueUrl","currentElement","container","method","$volumentalContainer","$volProdWidth","volumentalWidth","$volRecommendedSize","volLengthSizeDiff","volWidth","volHeight","volInstepHeight","volHeelWidth","volumentalLengthSizeDiff","volumentalArchHeight","volumentalInstepHeight","volumentalHeelWidth","updateVolumental","optionsHtml","updateOptions","quantities","map","quantity","join","updateQuantities","productImages","imgToUpdate","updateStickyImage","energyLaunchEnabled","energyLaunch","updateUrlOnAttributeSelectionFromParameters","el","queryObject","URL","search","substring","JSON","parse","decodeURI","replace","queryParameters","stringToAppend","param","newurl","protocol","host","history","replaceState","path","parseHtml","$html","parseHTML","body","footer","children","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","addToCartUrl","pageSize","labels","selectprods","parsedHtml","renderedTemplate","enterDialogMessage","closeButtonText","modal","showMiniCartOnAdd","$minicart","miniCartUrl","$popover","initalizePaypal","prepend","minicartSuccessMsg","$miniCartPopOver","$document","miniCartTimer","clearTimeout","miniCartShowHandler","handlePostCartAdd","newBonusDiscountLineItem","keys","eq","preOrderData","hasPreOrder","backOrderData","hasBackOrder","$addedToCartSuccessMsgCont","msg","minicartCountOfItems","getOptions","$elOption","urlValue","selectedValueId","optionId","toArray","stringify","miniCartReportingUrl","hideFilters","$this","toggleClass","thumTouchImg","stopPropagation","$slideEl","pidUrl","$productTile","standardUrl","largeUrl","isMobile","replaceAll","getUrl","hoverStandardUrl","getHoverUrl","badgeName","searchResultsContainer","productBadgeName","toLowerCase","pgpWishlist","isUserLoggedIn","listView","next","localStorage","setItem","gridView","selectSwatch","cs","csImg","scope","productTile","srcSetUrls","srcSetHoverUrls","initSlickSlider","colorOverride","colors","pgptilesEl","slick","$notSlickEl","swatchFirstEl","$carouselSelector","slideCompare","currentSlide","$slideActive","$currentSlideActive","horizontalCarouselDirection","prevAll","_index","nextSlide","infinite","speed","slidesToShow","slidesToScroll","variableWidth","respondTo","responsive","breakpoint","prevArrow","nextArrow","color","productColors","defaultColors","c","hasOwnProperty","filterColor","foundPrimaryColor","indexOf","$tileEl","colorway","$colorSwatch","colorSwatchUrl","setSlickSliderWithSearch","searchValue","foundSearchMatch","displayValue","$selectedSizeElement","substr","inputEl","inputVal","removeListView","resize","methods","editBonusProducts","focusChooseBonusProductModal","siblings","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","selector","$notifyCart","hide","selectAttribute","currentTarget","addToCart","pidsObj","setPids","isSticky","parentElement","productWrapper","not","errorElementOffset","headerHeight","animate","scrollTop","qty","childProducts","form","estimatedDelivery","csrfName","csrfValue","checkForSessionLogout","reportingURL","redirectUrl","selectBonusProduct","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeBonusProduct","$selected","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","productId","errorMessage","msgSuccess","initLocally","robisWrap","robisButton","robisAction","productMarkup","uniq","initLocallyInternal","upc","_locallyindexer","config","widgetwrap","endpoint","reduce","a","encodeURIComponent","scriptele","getElementById","detail","n_items_stocking_upc","show","click","prodType","selectedQuantity","$shippingRadioButton","$bopisRadioButton","storeSelected","collapse","isUnavailableVariationAttributeSelected","$storeFinderModal","toggleAvailabilityMessage","$dynamicAttr","$outOfStockMessage","$noneSellableMessage","$productAvailability","ready","selectedViewStyle","getItem","commonAttrHelper","attrs","msgs","attrExtension","updateAttributes","baseAttribute","attrsWithSwatches","dataAttr","attrValue","$attrValue","$swatchButton","assistiveSelectedText","selectable","assistiveUnavailableText","variantID","masterProductID","prodObj","adobe_user_flow","processSwatchValues","$attr","resetUrl","processNonSwatchValues","resetPinchZoom","setTransform","scale","x","y","mobileZoom","$zoomModalBody","primaryImages","clone","$videoElem","selectedIndex","mobilecontent","$carouselIndicator","timeout","lastTap","curTime","getTime","tapLen","slidIndex","pinchZoolEle","pinchElement","thumImagesWrapper","thumbImages","dataIndex","$modalLargeImage","$modalThumbImage","contents","unwrap","wrapAll","BREAKPOINTS","query","matchMedia","matches","isSmallDesktop","isLargeDesktop","isInViewport","toleratedMargin","viewPortMin","viewPortMax","innerHeight","elementRect","getBoundingClientRect","elementMin","elementMax","mobileAgentHash","loadUrl","loadPromises","fetch","mode","headers","innerHTML","oldScript","newScript","createTextNode","replaceChild","catch","reload","all","isZipCodeValid","postalCode","country","zipCodeFieldSelector","zipCodeJSON","regEx","countryCode","regex","RegExp","exec","errorMsg","loadScript","paypalUtils","capitalizeFirstLetter","string","charAt","toUpperCase","appendToUrl","newUrl","forcedLogout","getAmountToDisplay","amount","showTaxIncludedText","taxIncludedText","includes","TAB_KEY_CODE","ENTER_KEY_CODE","ESC_KEY_CODE","UP_ARROW_KEY_CODE","DOWN_ARROW_KEY_CODE"],"mappings":"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","file":"prod-base-chunk.js","sourcesContent":["function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nmodule.exports = {\n setTabNextFocus: function (focusParams) {\n var KEYCODE_TAB = 9;\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n if (!isTabPressed) {\n return;\n }\n\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n if ($('.product-quickview.product-set').length > 0) {\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n lastFocusableEl = linkElements[linkElements.length - 1];\n }\n }\n\n if (focusParams.event.shiftKey) /* shift + tab */ {\n if ($(':focus').is(firstFocusableEl)) {\n lastFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n } else /* tab */ {\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n firstFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n }\n }\n};\n","/* eslint-disable no-undef, no-unused-expressions */\n\n'use strict';\n\nconst customerHasNotEnteredEarlyAccess = document.querySelector('#customer-has-not-entered-early-access');\nconst customerHasEnteredEarlyAccess = document.querySelector('#customer-has-entered-early-access');\nconst earlyAccessButton = document.querySelector('#early-access-button');\nconst energyLaunchAddToCartButton = document.querySelector('.energy-launch-add-to-cart');\nconst rowAttribute = document.querySelector('.attributes .row.dyanamic-attr');\nconst shipInStore = document.querySelector('.dyanamic-product-availability.ship-instore');\n\n/**\n* Updates rendering the correct button on load, or during a variant selection on the energy launch pdp\n*/\nconst handleButtonRenderingOnEnergyLaunchPDP = () => {\n const launchEventContainer = document.querySelector('.launch-event-date');\n const currentDateTimeUTC = new Date().toISOString();\n\n if (launchEventContainer) {\n const launchEventStartTimeUtc = launchEventContainer.dataset.launchEventStartTimeUtc;\n const nextLaunchEvent = launchEventContainer.dataset.nextLaunchEvent;\n const notifyMeButton = document.querySelector('.container.product-detail .cart-and-ipay button.notify-cart');\n\n if (nextLaunchEvent === null) {\n energyLaunchAddToCartButton.classList.add('d-none');\n notifyMeButton.classList.remove('d-none');\n notifyMeButton.dataset.containerType = 'out-of-stock-notify';\n shipInStore.classList.add('d-none');\n return;\n }\n\n if (launchEventStartTimeUtc > currentDateTimeUTC) {\n // ongoing event\n energyLaunchAddToCartButton.classList.remove('d-none');\n notifyMeButton.classList.add('d-none');\n rowAttribute.classList.remove('d-none');\n if (shipInStore) shipInStore.classList.remove('d-none');\n } else {\n energyLaunchAddToCartButton.classList.add('d-none');\n notifyMeButton.classList.remove('d-none');\n notifyMeButton.dataset.containerType = 'not-available-yet';\n rowAttribute.classList.add('d-none');\n if (shipInStore) shipInStore.classList.add('d-none');\n }\n }\n};\n\n/**\n* Determines what text is shown to the customer\n*/\nconst handleCustomerHasEnteredEarlyAccessText = () => {\n const successfullyEnteredButton = document.querySelector('#early-access-successfully-entered-button');\n\n if (successfullyEnteredButton && customerHasNotEnteredEarlyAccess) {\n customerHasEnteredEarlyAccess.classList.remove('d-none');\n customerHasEnteredEarlyAccess.classList.add('d-block');\n customerHasNotEnteredEarlyAccess.remove();\n }\n};\n\n/**\n* Require age verification before allowing a consumer to login for early access\n*/\nconst handleAgeVerificationCheckboxClick = () => {\n const ageVerificationCheckbox = document.querySelector('#age-verification-checkbox');\n\n if (ageVerificationCheckbox) {\n ageVerificationCheckbox.addEventListener('click', () => {\n ageVerificationCheckbox.checked ? earlyAccessButton.classList.remove('disabled') : earlyAccessButton.classList.add('disabled');\n });\n }\n};\n\n/**\n* Sets up early access entry button\n*/\nconst handleEarlyAccessButtonClick = () => {\n let sendResponseToAPI = (event) => {\n event.preventDefault();\n if (earlyAccessButton) {\n let url = earlyAccessButton.attributes['data-access-event'].value;\n let launchEventId = earlyAccessButton.attributes['data-launch-event-id'].value;\n // hide error message if it was previously shown\n $('.early-access-error')\n .addClass('d-none')\n .find('.error-id')\n .text('');\n\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n launchEventId: launchEventId\n },\n success: function () {\n const earlyAccessButtonEntered = document.querySelector('#early-access-entered-button');\n const ageVerificationCheckboxWrapper = document.querySelector('#age-verification-wrapper');\n\n earlyAccessButton.remove();\n ageVerificationCheckboxWrapper.remove();\n $('.official-rules-link').removeClass('d-none');\n if (customerHasEnteredEarlyAccess && customerHasNotEnteredEarlyAccess) {\n customerHasNotEnteredEarlyAccess.classList.add('d-none');\n customerHasEnteredEarlyAccess.classList.remove('d-none');\n customerHasEnteredEarlyAccess.classList.add('d-block');\n }\n\n if (earlyAccessButtonEntered) {\n earlyAccessButtonEntered.classList.remove('d-none');\n earlyAccessButtonEntered.classList.add('d-block');\n }\n },\n error: function (err) {\n // show error message with correlation id\n $('.early-access-error')\n .removeClass('d-none')\n .find('.error-id')\n .text(err.responseJSON.correlationId);\n },\n complete: function () {\n $.spinner().stop();\n }\n });\n }\n };\n\n if (earlyAccessButton) {\n $(earlyAccessButton).off('click');\n $(earlyAccessButton).on('click', sendResponseToAPI);\n }\n};\n\n/**\n * Converts the integer value of early access passes to a word\n * @param {number} number - int value representing the number of passes\n * @returns {string} returns the number spelled out as a word\n */\nconst convertNumberToWord = (number) => {\n var singleDigit = ['', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine'];\n var doubleDigit = ['Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen'];\n var belowHundred = ['Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety'];\n\n if (number < 0) return false;\n if (number === 0) return 'Zero';\n\n /**\n * Takes a number as an int value and returns the number spelled out\n * @param {number} num - int value representing the number of passes\n * @returns {string} spelled out number of passes\n */\n function translate(num) {\n var word = '';\n if (num < 10) {\n word = singleDigit[num];\n } else if (num < 20) {\n word = doubleDigit[num - 10];\n } else if (num < 100) {\n var rem = translate(num % 10);\n word = belowHundred[(num - (num % 10)) / 10 - 2] + ' ' + rem;\n } else if (num < 1000) {\n word = singleDigit[Math.trunc(num / 100)] + ' Hundred ' + translate(num % 100);\n } else if (num < 1000000) {\n word = translate(parseInt(num / 1000, 10)).trim() + ' Thousand ' + translate(num % 1000);\n }\n\n return word;\n }\n var result = translate(number);\n result.trim();\n\n return result;\n};\n\n/**\n * Show or hide the input for order number based on select.\n */\nconst updateEarlyAccessPassNumber = () => {\n var $earlyAccessPassesValue = $('#early-access-passes-value');\n if ($earlyAccessPassesValue.length > 0) {\n var earlyAccessPassesWord = convertNumberToWord($earlyAccessPassesValue.text());\n $('#early-access-passes').text(earlyAccessPassesWord + ' (' + $earlyAccessPassesValue.text() + ')');\n }\n};\n\nconst showFooterLinks = () => {\n const howEarlyAccessWorksLink = document.querySelector('#how-early-access-works-link');\n const termsConditionsLink = document.querySelector('#tc-early-access');\n\n if (termsConditionsLink) {\n termsConditionsLink.classList.remove('d-none');\n }\n\n if (howEarlyAccessWorksLink) {\n howEarlyAccessWorksLink.classList.remove('d-none');\n }\n};\n\n// Immediately Invoked Functional Expression to make these functions available at load time\n(() => {\n handleAgeVerificationCheckboxClick();\n handleButtonRenderingOnEnergyLaunchPDP();\n handleCustomerHasEnteredEarlyAccessText();\n handleEarlyAccessButtonClick();\n showFooterLinks();\n updateEarlyAccessPassNumber();\n})();\n\n// We are exporting out the same function thats in the IIFE above, as it is needed in a separate file\nmodule.exports = {\n handleButtonRenderingOnEnergyLaunchPDP: handleButtonRenderingOnEnergyLaunchPDP\n};\n","/* eslint-disable no-undef */\n/* eslint-disable no-param-reassign */\n\n'use strict';\n\n/**\n * Queue for interaction events.\n */\nvar EventsQueue = {\n\n list: [],\n timer: null,\n\n add: function addTealium(eventData) {\n this.list.unshift(eventData); // Add to beginning of array.\n\n if (!this.timer) {\n this.runDelayed();\n }\n },\n\n runDelayed: function runTealiumDelayed() {\n if (this.list.length > 0) {\n this.timer = window.setTimeout(\n this.run.bind(this, this.list.pop()), // Remove last item.\n 3 // Run call with a tiny delay to allow the browser to repaint.\n );\n }\n },\n\n run: function runTealium(eventData) {\n this.timer = null; // Reset timer property.\n var utag = window.utag;\n\n if (typeof (utag) !== 'undefined') {\n utag.page_path = eventData.pathname;\n if (eventData.eventType === 'view') {\n utag.view(eventData.data, eventData.callbackFn);\n } else if (typeof (eventData.data.event_type) !== 'undefined') {\n utag.link(eventData.data, eventData.callbackFn);\n }\n }\n\n if (eventData.data.event_type !== 'view_item_list' && typeof (window.utag_data) !== 'undefined') { /* eslint-disable-line camelcase */\n window.utag_data = $.extend({}, utag_data, eventData.data); /* eslint-disable-line camelcase */\n }\n\n this.runDelayed();\n }\n};\n\nvar tealium = {\n eventCount: 0,\n checkElement: function (e) {\n var obj = {\n href: '',\n label: ''\n };\n if (e) {\n if (e.target.tagName === 'A') {\n obj.href = e.target.href;\n obj.label = e.target.text.trim();\n } else {\n obj.href = $(e.target).parent().attr('href');\n obj.label = $(e.target).parent().text().trim();\n }\n }\n return obj;\n },\n triggerEvent: function (data, eventType, callbackFn) {\n if (typeof (data) === 'undefined') {\n return;\n }\n if (typeof (eventType) === 'undefined') {\n eventType = 'link';\n }\n\n if (!callbackFn && typeof (callbackFn) !== 'function') {\n callbackFn = false;\n }\n\n EventsQueue.add({\n data: data,\n eventType: eventType,\n pathname: window.location.pathname,\n callbackFn: callbackFn\n });\n },\n getDevice: function () {\n var navUserAgent = navigator.userAgent;\n var userAgent = '';\n if (navUserAgent.match(/Phone/i) || navUserAgent.match(/DROID/i) || navUserAgent.match(/Android/i) || navUserAgent.match(/webOS/i) || navUserAgent.match(/iPhone/i) || navUserAgent.match(/iPod/i) || navUserAgent.match(/BlackBerry/) || navUserAgent.match(/Windows Phone/i) || navUserAgent.match(/ZuneWP7/i) || navUserAgent.match(/IEMobile/i)) {\n userAgent = 'Mobile';\n } else if (navUserAgent.match(/Tablet/i) || navUserAgent.match(/iPad/i) || navUserAgent.match(/Kindle/i) || navUserAgent.match(/Playbook/i) || navUserAgent.match(/Nexus/i) || navUserAgent.match(/Xoom/i) || navUserAgent.match(/SM-N900T/i) || navUserAgent.match(/GT-N7100/i) || navUserAgent.match(/SAMSUNG-SGH-I717/i) || navUserAgent.match(/SM-T330NU/i)) {\n userAgent = 'Tablet';\n } else {\n userAgent = 'Desktop';\n }\n return userAgent;\n },\n getProductDetails: function (pid) {\n return new Promise(function (resolve, reject) {\n setTimeout(function () {\n var preUrl = $('.wishlist-api').data('wishlisturl');\n if (!preUrl || !pid) {\n return;\n }\n var url = preUrl + '?pid=' + pid;\n $.ajax({\n url: url,\n type: 'POST',\n dataType: 'json',\n success: function (data) {\n var productInfo = data.productInfo;\n var productArray = {\n product_name: [],\n product_brand: [],\n product_unit_price: [],\n product_currency: [],\n product_sku: [],\n product_style_number: [],\n adobe_product_id: [],\n product_id: [],\n product_variant_id: [],\n product_master: [],\n product_category: [],\n product_subcategory: [],\n product_quantity: [],\n product_availability: [],\n product_vat: [],\n product_gender: [],\n product_color: [],\n product_size: [],\n product_width: [],\n product_gbu: [],\n product_line: [],\n product_type: [],\n product_silhouette: [],\n original_product_unit_price: [],\n category_path: []\n };\n\n if (productInfo) {\n productArray.product_brand.push(productInfo.product_brand);\n productArray.product_name.push(productInfo.product_name);\n productArray.product_unit_price.push(productInfo.product_unit_price);\n productArray.product_currency.push(productInfo.product_currency);\n productArray.product_sku.push(productInfo.product_sku);\n productArray.product_style_number.push(productInfo.product_style_number);\n productArray.product_id.push(productInfo.product_id);\n productArray.adobe_product_id.push(productInfo.adobe_product_id);\n if (productInfo.product_variant_id !== '') {\n productArray.product_variant_id.push(productInfo.product_variant_id);\n }\n productArray.product_master.push(productInfo.product_master);\n productArray.product_category.push(productInfo.product_category);\n productArray.product_subcategory.push(productInfo.product_subcategory);\n productArray.product_quantity.push(Math.round(productInfo.product_quantity));\n productArray.product_availability.push(productInfo.product_availability);\n productArray.product_vat.push(productInfo.product_vat);\n productArray.product_gender.push(productInfo.product_gender);\n productArray.product_color.push(productInfo.product_color);\n productArray.product_size.push(productInfo.product_size);\n productArray.product_width.push(productInfo.product_width);\n productArray.product_gbu.push(productInfo.product_gbu);\n productArray.product_line.push(productInfo.product_line);\n productArray.product_type.push(productInfo.product_type);\n productArray.product_silhouette.push(productInfo.product_silhouette);\n productArray.original_product_unit_price.push(productInfo.original_product_unit_price);\n productArray.category_path.push(productInfo.category_path);\n }\n resolve(productArray);\n },\n error: function (e) {\n reject(e);\n }\n });\n // this timeout is to ensure that the ajax call is held till the product variant is fetched and rendered\n }, 1100);\n });\n },\n tealiumHelper: function (eventType, PageName, eventMessage, gaAction, galabel, selectedpaymentmethod) {\n if (!eventType) {\n return;\n }\n\n var tealiumObject = {\n event_type: eventType,\n page_name: PageName,\n event_message: eventMessage,\n ga_action: gaAction,\n ga_label: galabel\n };\n\n if (selectedpaymentmethod) {\n tealiumObject.selected_payment_method = selectedpaymentmethod;\n }\n\n tealium.triggerEvent(tealiumObject);\n },\n /**\n * Get url and element when user selects any category\n * @param {Object} productImpressions - object\n */\n ajaxProductImpressionTriggerEvent: function (productImpressions) {\n if (window.utag_data && productImpressions) {\n var tlProductImpressionsObjectvil = {\n event_type: 'view_item_list',\n item_list_results: window.utag_data.item_list_results,\n item_id: productImpressions.tealiumMasterIds,\n item_id_price: productImpressions.tealiumPIProdPrices,\n item_name: productImpressions.tealiumPIProdNames,\n item_price: productImpressions.tealiumPIProdPrices,\n item_brand: productImpressions.tealiumPIProdBrands,\n item_category: productImpressions.tealiumPIProdCategory,\n item_variant: productImpressions.tealiumPIProdIds,\n item_list_id: window.utag_data.item_list_id,\n item_list_name: window.utag_data.category_path,\n index: productImpressions.tealiumPIProdPosition,\n page_name: window.utag_data.page_name,\n page_group: 'product listing',\n page_context_type: window.utag_data.page_context_type,\n page_context_title: window.utag_data.page_context_title,\n site: window.utag_data.site,\n site_section: 'product listing',\n site_type: window.utag_data.site_type,\n login_status: window.utag_data.customer_status,\n user_id: window.utag_data.user_id,\n element_type: '',\n element_text: '',\n category_path: window.utag_data.category_path,\n product_list: [window.utag_data.category_path],\n product_sku: window.tealiumProdStyles,\n product_style_number: window.tealiumProdStyles,\n product_color: window.tealiumProdColors,\n product_impression_price: productImpressions.tealiumPIProdPrices,\n product_impression_brand: productImpressions.tealiumPIProdBrands,\n product_impression_category: productImpressions.tealiumPIProdCategory,\n product_impression_color: window.tealiumProdColors,\n product_impression_gender: window.tealiumProdGenders,\n product_impression_id: productImpressions.tealiumMasterIds,\n product_impression_position: productImpressions.tealiumPIProdPosition,\n product_impression_line: window.tealiumProdLine,\n product_impression_list: [window.utag_data.category_path],\n product_impression_master_id: productImpressions.tealiumMasterIds,\n product_impression_name: productImpressions.tealiumPIProdNames,\n product_impression_size: window.tealiumProdSizes,\n product_impression_sku: window.tealiumProdStyles,\n product_impression_style_number: window.tealiumProdStyles,\n product_impression_silhouette: window.tealiumProdSilhouette,\n product_impression_variant_id: productImpressions.tealiumPIProdIds,\n product_impression_subcategory: productImpressions.tealiumPIProdSubCategory,\n product_impression_item_category: productImpressions.tealiumPIProdCategory,\n product_impression_item_category2: window.tealiumProdLine,\n product_impression_item_category3: window.tealiumProdGenders,\n product_impression_item_category4: window.tealiumProdColors,\n product_impression_item_category5: window.tealiumProdStyles\n };\n tealium.triggerEvent(tlProductImpressionsObjectvil);\n }\n }\n};\n\nmodule.exports = tealium;\n","/* global Promise */\n\n'use strict';\n\nvar scriptCache = {};\n\n/**\n * Load an external script.\n * @param {string} url Absolute URL of script to load\n * @param {string=} name Name of global variable that the script is expected to define\n * @return {Promise} A returned promise for the loading of the script\n */\nmodule.exports = function loadScript(url, name) {\n var promise;\n\n if (scriptCache[url]) {\n // TODO: normalize URL\n promise = scriptCache[url];\n } else {\n promise = new Promise(function (resolve, reject) {\n var script = document.createElement('script');\n script.onerror = function () {\n return reject(new Error('Failed to load ' + url));\n };\n script.onload = resolve;\n script.async = true;\n script.src = url;\n\n if (document.currentScript) {\n document.currentScript.parentNode.insertBefore(script, document.currentScript);\n } else {\n (document.head || document.getElementsByTagName('head')[0]).appendChild(script);\n }\n });\n\n scriptCache[url] = promise;\n }\n\n return promise.then(function () {\n if (global[name]) {\n return global[name];\n }\n throw new Error(name + ' was not created by ' + url);\n });\n};\n","/* eslint-disable no-lonely-if */\n/* eslint-disable consistent-return */\n/* eslint-disable no-mixed-operators */\n/* eslint-disable require-jsdoc */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-tabs */\n\n'use strict';\n\n(function ($) {\n var defaults = {\n url: false,\n callback: false,\n target: false,\n duration: 120,\n on: 'mouseover', // other options: grab, click, toggle\n touch: true, // enables a touch fallback\n onZoomIn: false,\n onZoomOut: false,\n magnify: 1\n };\n\n // Core Zoom Logic, independent of event listeners.\n $.zoom = function (target, source, img, magnify) {\n var targetHeight;\n var targetWidth;\n var sourceHeight;\n var sourceWidth;\n var xRatio;\n var yRatio;\n var offset;\n var $target = $(target);\n var position = $target.css('position');\n var $source = $(source);\n\n // The parent element needs positioning so that the zoomed element can be correctly positioned within.\n target.style.position = /(absolute|fixed)/.test(position) ? position : 'relative';\n target.style.overflow = 'hidden';\n img.style.width = '';\n img.style.height = '';\n\n $(img)\n .addClass('zoomImg')\n .css({\n position: 'absolute',\n top: 0,\n left: 0,\n opacity: 0,\n width: img.width * magnify,\n height: img.height * magnify,\n border: 'none',\n maxWidth: 'none',\n maxHeight: 'none'\n })\n .appendTo(target);\n\n return {\n init: function () {\n targetWidth = $target.outerWidth();\n targetHeight = $target.outerHeight();\n\n if (source === target) {\n sourceWidth = targetWidth;\n sourceHeight = targetHeight;\n } else {\n sourceWidth = $source.outerWidth();\n sourceHeight = $source.outerHeight();\n }\n\n xRatio = (img.width - targetWidth) / sourceWidth;\n yRatio = (img.height - targetHeight) / sourceHeight;\n\n offset = $source.offset();\n },\n move: function (e) {\n var left = (e.pageX - offset.left);\n var top = (e.pageY - offset.top);\n\n top = Math.max(Math.min(top, sourceHeight), 0);\n left = Math.max(Math.min(left, sourceWidth), 0);\n\n img.style.left = (left * -xRatio) + 'px';\n img.style.top = (top * -yRatio) + 'px';\n }\n };\n };\n\n $.fn.zoom = function (options) {\n return this.each(function () {\n var\n settings = $.extend({}, defaults, options || {});\n // target will display the zoomed image\n var target = settings.target && $(settings.target)[0] || this;\n // source will provide zoom location info (thumbnail)\n var source = this;\n var $source = $(source);\n var img = document.createElement('img');\n var $img = $(img);\n var mousemove = 'mousemove.zoom';\n var clicked = false;\n var touched = false;\n\n // If a url wasn't specified, look for an image element.\n if (!settings.url) {\n var srcElement = source.querySelector('img');\n if (srcElement) {\n settings.url = srcElement.getAttribute('data-src') || srcElement.currentSrc || srcElement.src;\n }\n if (!settings.url) {\n return;\n }\n }\n\n $source.one('zoom.destroy', function (position, overflow) {\n $source.off('.zoom');\n target.style.position = position;\n target.style.overflow = overflow;\n img.onload = null;\n $img.remove();\n }.bind(this, target.style.position, target.style.overflow));\n\n img.onload = function () {\n var zoom = $.zoom(target, source, img, settings.magnify);\n\n function start(e) {\n zoom.init();\n zoom.move(e);\n\n // Skip the fade-in for IE8 and lower since it chokes on fading-in\n // and changing position based on mousemovement at the same time.\n $img.stop()\n .fadeTo($.support.opacity ? settings.duration : 0, 1, $.isFunction(settings.onZoomIn) ? settings.onZoomIn.call(img) : false);\n }\n\n function stop() {\n $img.stop()\n .fadeTo(settings.duration, 0, $.isFunction(settings.onZoomOut) ? settings.onZoomOut.call(img) : false);\n }\n\n // Mouse events\n if (settings.on === 'grab') {\n $source\n .on('mousedown.zoom',\n function (e) {\n if (e.which === 1) {\n $(document).one('mouseup.zoom',\n function () {\n stop();\n\n $(document).off(mousemove, zoom.move);\n });\n\n start(e);\n\n $(document).on(mousemove, zoom.move);\n\n e.preventDefault();\n }\n });\n } else if (settings.on === 'click') {\n $source.on('click.zoom',\n function (e) {\n if (clicked) {\n // bubble the event up to the document to trigger the unbind.\n\n } else {\n clicked = true;\n start(e);\n $(document).on(mousemove, zoom.move);\n $(document).one('click.zoom',\n function () {\n stop();\n clicked = false;\n $(document).off(mousemove, zoom.move);\n });\n return false;\n }\n });\n } else if (settings.on === 'toggle') {\n $source.on('click.zoom',\n function (e) {\n if (clicked) {\n stop();\n } else {\n start(e);\n }\n clicked = !clicked;\n });\n } else if (settings.on === 'mouseover') {\n zoom.init(); // Preemptively call init because IE7 will fire the mousemove handler before the hover handler.\n\n $source\n .on('mouseenter.zoom', start)\n .on('mouseleave.zoom', stop)\n .on(mousemove, zoom.move);\n }\n\n // Touch fallback\n if (settings.touch) {\n $source\n .on('touchstart.zoom', function (e) {\n e.preventDefault();\n if (touched) {\n touched = false;\n stop();\n } else {\n touched = true;\n start(e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]);\n }\n })\n .on('touchmove.zoom', function (e) {\n e.preventDefault();\n zoom.move(e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]);\n })\n .on('touchend.zoom', function (e) {\n e.preventDefault();\n if (touched) {\n touched = false;\n stop();\n }\n });\n }\n if ($.isFunction(settings.callback)) {\n settings.callback.call(img);\n }\n };\n\n img.setAttribute('role', 'presentation');\n img.alt = '';\n img.src = settings.url;\n });\n };\n\n $.fn.zoom.defaults = defaults;\n}(window.jQuery));\n","'use strict';\n\nconst measures = require('../util/measures');\nconst focusHelper = require('base/components/focus');\nconst attrHelpers = require('./components/attrHelpers');\nconst carouselConfig = require('../components/carousel-config');\nconst zoomImage = require('./zoom');\nconst afterpayWidget = require('./afterpayWidget');\nconst utils = require('../utils');\nconst pdpInstoreInventory = require('../product/pdpInstoreInventory');\n\n// ID Selectors\nconst bopisMethodID = '#bopis-method';\nconst selectProductSizeModalID = '#selectProductSizeModal';\nconst chooseBonusProductModalID = '#chooseBonusProductModal';\nconst pdpCarouselID = '#pdpCarousel';\nconst productAttributesID = '#productAtributes';\n\n// Class Selectors\nconst nonSellableMessageClass = '.non-sellable-msg';\nconst addToCartClass = '.add-to-cart';\nconst productQuickViewClass = '.product-quickview';\nconst productIdClass = '.product-id';\nconst productDetailClass = '.product-detail';\nconst notifyCartClass = '.notify-cart';\nconst dynamicAttrClass = '.dyanamic-attr';\nconst limitedQtyMsgClass = '.limited-qty-msg';\nconst storeNameClass = '.store-name';\nconst modalContentClass = '.modal-content';\nconst bonusProductItemClass = '.bonus-product-item';\nconst carouselInnerClass = '.carousel-inner';\nconst gridListClass = '.grid-list';\nconst quantitySelectClass = '.quantity-select';\nconst carouselIndicatorsClass = '.carousel-indicators';\nconst chooseBonusProductDialogClass = '.choose-bonus-product-dialog';\nconst dynamicProductAvailabilityClass = '.dyanamic-product-availability';\nconst productTileClass = '.product-tile';\nconst pgpGridsClass = '.pgp-grids';\nconst preCartProductsClass = '.pre-cart-products';\nconst modalBodyClass = '.modal-body';\nconst addToWishlistClass = '.add-to-wishlist';\nconst promotionsClass = '.promotions';\nconst addToCartMessagesClass = '.add-to-cart-messages';\nconst csrfClass = '.csrf-add-prod';\nconst bisnContainerClass = '.enable-bisn';\n\n// Multi-class Selectors\nconst activeGridClasses = '.grid-list .gridview-active';\nconst sizeSelectedClasses = '.size-value.selected';\nconst outOfStockMessageClasses = '.non-input-label.out-of-stock-message';\nconst nonSellableMessageClasses = '.non-input-label.non-sellable-msg';\nconst selectedRefinementColorClasses = '.refinements.desktop .refinement-refinementcolor .selected-value';\nconst selectedBonusSummaryClasses = '.selected-bonus-products .bonus-summary';\n// unavailable variation attributes (selectable = false) are marked by the unselectable class, but can still be selected\nconst selectedUnavailableAttributeClasses = '.selected .unselectable';\n\n// Variables\nconst ARIA_HIDDEN = 'aria-hidden';\nconst BUTTON_SLIDES = 'button.sildes';\nconst PICTURE_PINCH_ZOOM = 'picture pinch-zoom';\nconst ALERT_DANGER = 'alert-danger';\nconst UPC_AVAILABLE = 'upc-available';\nconst UPC_UNAVAILABLE = 'upc-unavailable';\nconst DATA_CONTAINER_TYPE = 'data-containertype';\nconst IMAGE_CONTAINER_ANCHOR = '.image-container > a';\nconst ADD_TO_CART_SELECTOR = '.prices-add-to-cart-actions .add-to-cart';\nconst ADD_TO_CART_SPAN = '.add-to-cart span span';\nconst CAROUSEL_ITEM_CLASS = '.carousel-inner .carousel-item.zoom-image-js';\nconst SPINNER_REQUIRED_MODALS = ['#editWishlistProductModal', '#editProductModal', '#historyEditProductModal', selectProductSizeModalID];\n\n/**\n* determines the display style from local storage\n*/\nfunction determineDisplayStyle() {\n const selectedViewStyle = localStorage.getItem('selectedViewStyle');\n if (selectedViewStyle === 'gridView') {\n $(activeGridClasses).click();\n } else if (selectedViewStyle === 'listView') {\n $('.grid-list .listview-inactive').click();\n } else {\n $(activeGridClasses).click();\n }\n}\n\n/**\n * Return the video object needed to create the carousel.\n * @param {Object} response - Response from the variation attributes API.\n * @return {Object} videoAsset to be used by create carousel.\n */\nfunction getVideoObject(response) {\n const videoUrl = 'videoUrlFromImageGroup' in response.product && response.product.videoUrlFromImageGroup !== '' ? response.product.videoUrlFromImageGroup : response.product.videoUrl;\n const videoUrlPoster = 'videoPosterUrlFromImageGroup' in response.product && response.product.videoPosterUrlFromImageGroup !== '' ? response.product.videoPosterUrlFromImageGroup : response.product.videoPosterUrl;\n return {\n videoUrl: videoUrl,\n videoUrlPoster: videoUrlPoster\n };\n}\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n const productSetClass = '.product-set';\n let pid;\n if ($(selectProductSizeModalID).hasClass('show') && !$(productSetClass).length) {\n pid = $(productQuickViewClass).data('pid');\n } else if ($('#quickViewModal').hasClass('show') && !$(productSetClass).length) {\n pid = $($el).closest(modalContentClass).find(productQuickViewClass).data('pid');\n } else if ($('.product-set-detail').length || $(productSetClass).length) {\n pid = $($el).closest(productDetailClass).find(productIdClass).text();\n } else {\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n }\n\n return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n return $el && $('.set-items').length\n ? $($el).closest(productDetailClass).find(quantitySelectClass)\n : $(quantitySelectClass);\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n return getQuantitySelector($el).val();\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n let availabilityValue = '';\n const availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder && response.resources.info_selectforstock) {\n availabilityValue = '<li><div>' + response.resources.info_selectforstock + '</div></li>';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '<li><div>' + message + '</div></li>';\n });\n }\n const threshHoldMsg = response.product.availability.thresholdMsg;\n const count = response.product.availability.productsLeft;\n if (threshHoldMsg && count > 0) {\n availabilityValue = '<li><div>' + threshHoldMsg + ' ' + count + ' left. </div></li>';\n }\n\n $($productContainer).trigger('product:updateAvailability', {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n}\n\n/**\n * Updates the notifyMeButton data attributes to be sent to backend.\n * @param {Object} data1 - data1\n */\nfunction updateNotifyMeButtonAttributes(data1) {\n const notifyMeButton = $(notifyCartClass);\n if (notifyMeButton !== undefined && notifyMeButton.length && data1 !== undefined) {\n $(notifyMeButton).each(function (index, currentButton) {\n currentButton.setAttribute('data-pid', data1.id);\n currentButton.setAttribute('data-pname', data1.productName);\n currentButton.setAttribute('data-productavailbilitydate', data1.sellableFrom);\n currentButton.setAttribute('data-pimage', data1.images.productDetail[0].src);\n });\n }\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n if (!attributes) {\n return '';\n }\n\n let html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '<div class=\"attribute-values\">' + attribute.label + ': '\n + attribute.value + '</div>';\n });\n }\n });\n\n return html;\n}\n\n/**\n * Updates the volumental data\n *\n * @param {OptionSelectionResponse} product - Product with Volumental data\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateVolumental(product, $productContainer) {\n var $volumentalContainer = $productContainer.find('#pdp-volumental');\n if ($volumentalContainer.length) {\n var $volProdWidth = product.volumentalWidth;\n var $volRecommendedSize = $productContainer.find('.volumental-length-recommendation');\n var volLengthSizeDiff = $productContainer.find('.vol-length-size-diff');\n var volWidth = $volumentalContainer.find('.vol-width p');\n var volHeight = $volumentalContainer.find('.vol-height p');\n var volInstepHeight = $volumentalContainer.find('.vol-instep-height p');\n var volHeelWidth = $volumentalContainer.find('.vol-heel-width p');\n if ($volProdWidth) {\n volLengthSizeDiff.empty().append(product.volumentalLengthSizeDiff);\n volWidth.empty().append(product.volumentalWidth);\n volHeight.empty().append(product.volumentalArchHeight);\n volInstepHeight.empty().append(product.volumentalInstepHeight);\n volHeelWidth.empty().append(product.volumentalHeelWidth);\n $volRecommendedSize.removeClass('d-none');\n $volumentalContainer.removeClass('d-none');\n } else {\n $volRecommendedSize.addClass('d-none');\n $volumentalContainer.addClass('d-none');\n }\n }\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n // Update options\n $productContainer.find('.product-options').empty().html(optionsHtml);\n}\n\n/**\n * Shows and hides the wishlist option\n * @param {Object} availability - Object containing product details\n */\nfunction updateWishListIcon(availability) {\n var isAvailable = availability ? (availability.preOrder || availability.backorder) : false;\n var preorderEl = $('.wishlist-preorder');\n if (isAvailable) {\n if (!preorderEl.hasClass('hidden')) {\n preorderEl.addClass('hidden');\n }\n } else {\n preorderEl.removeClass('hidden');\n }\n}\n\n/**\n * Called to check if product images or product details is sticky\n */\nfunction stickyProductDescription() {\n window.requestAnimationFrame(function () {\n var $productImgContainer = $('.pdpimg-container');\n var $productDetails = $('#productDetails');\n if ($(window).width() > 992) {\n var carouselHeight = $(pdpCarouselID).height();\n var productDetailsHeight = $productDetails.height();\n if (carouselHeight < productDetailsHeight) {\n $productImgContainer.css({\n position: 'sticky',\n top: $('#header').height()\n });\n }\n } else {\n $productDetails.css({ position: 'unset' });\n $productImgContainer.css({ position: 'unset' });\n }\n });\n}\n\n$('body').on('stickyHeaderUpdate', stickyProductDescription);\n\n/**\n * Adds the model information to the PDP Gallery\n * Called from createCarousel\n * @param {Object} imgs - Array item of a product image, along with related information\n * @param {jQuery} carousel - the pdp carousel element\n * @param {Object} product - product object\n */\nfunction addModelData(imgs, carousel, product) {\n var showModelSizeData = $(pdpCarouselID).data('showmodeldata');\n var label = $(pdpCarouselID).data('modeldatalabel') && $(pdpCarouselID).data('modeldatalabel').length ? $(pdpCarouselID).data('modeldatalabel') : 'Sizing';\n // Only add div container model data if it exists\n // Default Alt is New Balance {productname}, variationvalue\n if (showModelSizeData && (imgs.alt !== product.brand + ' ' + imgs.title)) {\n $('<div class=\"model-info-wrapper\"><button type=\"button\" class=\"model-info-btn\" title=\"Model Info Button\"><span class=\"model-btn-text display-color-name color-name-mobile font-body regular\">' + label + '</span></button><div class=\"model-content d-none\"><div class=\"content-btn-text\"><span class=\"model-btn-text display-color-name color-name-mobile font-body regular\">' + label + '</span><span class=\"model-close-btn\"><svg role=\"img\" aria-label=\"close icon\" width=\"12\" height=\"12\" focusable=\"false\"><use href=\"#close-icon\" aria-hidden=\"true\"></use></svg></span></div><div class=\"model-info\"></div></div></div>').insertAfter($(carousel).find(CAROUSEL_ITEM_CLASS).last().find('picture'));\n // Add the model info\n $(carousel).find(CAROUSEL_ITEM_CLASS).last().find('.model-info')\n .append(imgs.alt);\n }\n}\n\n/**\n * Dynamically creates Bootstrap carousel from response containing images\n * @param {Object[]} imgs - Array of large product images,along with related information\n * @param {Object} $productContainer - DOM element for a given product\n * @param {Object} videoAsset - video assets\n * @param {Object} product - product object\n */\nfunction createCarousel(imgs, $productContainer, videoAsset, product) {\n var carousel = $productContainer.find('.carousel');\n var isEditCartorWishlist = $productContainer.find('.carouseldk-true').length;\n var $selectSizeProductModal = $(selectProductSizeModalID);\n var $historyEditProductModal = $('#historyEditProductModal');\n var isSelectSizeProductModal = $selectSizeProductModal.length ? $selectSizeProductModal.hasClass('show') : false;\n var isHistoryEditProductModal = $historyEditProductModal.length ? $historyEditProductModal.hasClass('show') : false;\n var hasVideoAsset = !!videoAsset.videoUrl;\n $(carousel).carousel('dispose');\n var carouselId = $(carousel).attr('id');\n $(carousel).find(carouselInnerClass).empty();\n var sliderImageText = $(pdpCarouselID).attr('data-slide-index-text');\n\n if (!isEditCartorWishlist && !isSelectSizeProductModal && !isHistoryEditProductModal) {\n if (imgs.length === 1) {\n $(carousel).empty().append('<ol class=\"carousel-indicators\" tabindex=\"0\"></ol><div class=\"carousel-inner carousel-desktop d-flex\" aria-label=\"carousel\" role=\"listbox\"></div><div class=\"carousel-inner carousel-inner-zoom carousel-desktop d-none\" aria-label=\"carousel-inner\" role=\"listbox\"></div>');\n } else {\n $(carousel).empty().append('<ol class=\"carousel-indicators\" tabindex=\"0\"></ol><div class=\"carousel-inner carousel-desktop\" role=\"listbox\"></div><div class=\"carousel-inner carousel-inner-zoom carousel-desktop d-none\" role=\"listbox\"></div>');\n }\n // PDP base page images\n for (var i = 0; i < imgs.length; i += 1) {\n // need anchor tag for ContentSquare tracking\n $('<div class=\"carousel-item zoom-image-js\"><button aria-label=\"' + imgs[i].alt + '\" data-target=\"#zoommodal\" class = \"p-0 w-100\" data-modelinfo=\"' + imgs[i].alt + '\" data-src=\"' + imgs[i].src + '\" data-toggle=\"modal\"\"><picture></picture></button></div>').appendTo($(carousel).find(carouselInnerClass).first());\n if (imgs[i].pictureSource.length > 0) {\n for (var j = 0; j < imgs[i].pictureSource.length; j += 1) {\n // eslint-disable-next-line sonarjs/no-duplicate-string\n $('<source media=\"' + imgs[i].pictureSource[j].media + '\" type=\"' + imgs[i].pictureSource[j].type + '\" data-srcset=\"' + imgs[i].pictureSource[j].srcset + '\"></source>')\n .appendTo($(carousel)\n .find(CAROUSEL_ITEM_CLASS).last().find('picture'));\n }\n\n // eslint-disable-next-line sonarjs/no-duplicate-string\n $('<img src=\"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\" data-src=\"' + imgs[i].src + '\" alt=\"' + imgs[i].alt + '\" class=\"tile-image img-fluid zoom-in lazypreload lazyload\" title=\"' + imgs[i].title + '\" data-index=' + i + ' data-backdrop=\"false\" />').appendTo($(carousel).find(CAROUSEL_ITEM_CLASS).last().find('picture'));\n\n // only add model data for the first image\n if (i === 0) {\n addModelData(imgs[i], carousel, product);\n }\n }\n var slideIndexText = sliderImageText + ' ' + (((hasVideoAsset && i > 1) ? i + 1 : i) + 1);\n // eslint-disable-next-line sonarjs/no-duplicate-string\n $('<li data-target=\"#pdpCarousel\" data-slide-to=\"' + ((hasVideoAsset && i > 1) ? i + 1 : i) + '\" ><button aria-label=\"' + slideIndexText + '\"></button></li>').appendTo($(carousel).find(carouselIndicatorsClass));\n if (hasVideoAsset && i === 1) {\n $('<li data-target=\"#pdpCarousel\" data-slide-to=\"' + (i + 1) + '\" ><button aria-label=\"' + sliderImageText + ' ' + (i + 2) + '\"></button></li>').appendTo($(carousel).find(carouselIndicatorsClass));\n }\n\n if (i === 1 && hasVideoAsset) {\n var carouselIem = $('<div class=\"carousel-item carousel-video\"></div>');\n var videoContainer = $('<div class=\"nb-video__product nb-video__product-js\"></div>');\n var videoElement = $('<video poster=\"' + videoAsset.videoUrlPoster + '\" preload=\"none\" loop playsinline muted data-isproductvideo=\"true\"></div>');\n videoElement.append('<source src=\"' + videoAsset.videoUrl + '\" type=\"video/mp4\">');\n // var videoButton = $('<button class=\"nb-video__play-button\"></button>');\n\n var $carouselContainer = $(pdpCarouselID);\n var $carousel = $carouselContainer.find(carouselIndicatorsClass);\n $($($carousel).find('li:nth-child(3)')).first().addClass('video');\n\n videoContainer.append(videoElement);\n // videoContainer.append(videoButton);\n\n videoElement.appendTo(videoContainer);\n // videoButton.appendTo(videoContainer);\n videoContainer.appendTo(carouselIem);\n\n carouselIem.appendTo($('#pdpCarousel > div:nth-child(2)'));\n }\n }\n\n // PDP zoom images\n for (var l = 0; l < imgs.length; l += 1) {\n $('<div class=\"carousel-item zoom-image-js\"><a href=\"javascript:void(0);\"><picture><pinch-zoom min-scale=\"1\"></pinch-zoom></picture></a></div>').appendTo($(carousel).find(carouselInnerClass).last());\n if (imgs[l].zoomPictureSource.length > 0) {\n if ($(window).width() > 991) {\n for (var m = 0; m < imgs[l].zoomPictureSource.length; m += 1) {\n // eslint-disable-next-line sonarjs/no-duplicate-string\n $('<source media=\"' + imgs[l].zoomPictureSource[m].media + '\" type=\"' + imgs[l].zoomPictureSource[m].type + '\" srcset=\"' + imgs[l].zoomPictureSource[m].srcset + '\"></source>')\n .appendTo($(carousel)\n .find(CAROUSEL_ITEM_CLASS).last().find(PICTURE_PINCH_ZOOM));\n }\n $('<img src=\"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\" data-src=\"' + imgs[l].zoomsrc + '\" srcset=\"' + imgs[l].srcset + '\" data-index=\"' + l + '\" alt=\"' + imgs[l].alt + '\" class=\"tile-image img-fluid zoom-in lazyload lazypreload\" data-toggle=\"modal\" data-index=' + l + ' data-target=\"#zoommodal\" data-backdrop=\"false\"/>').appendTo($(carousel).find(CAROUSEL_ITEM_CLASS).last().find(PICTURE_PINCH_ZOOM));\n } else {\n $('<img src=\"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\" data-src=\"' + imgs[l].zoomsrc + '\" srcset=\"' + imgs[l].srcset + '\" data-index=\"' + l + '\" alt=\"' + imgs[l].alt + '\" class=\"tile-image img-fluid zoom-in lazyload lazypreload\" data-toggle=\"modal\" data-index=' + l + ' data-target=\"#zoommodal\" data-backdrop=\"false\"/>').appendTo($(carousel).find(CAROUSEL_ITEM_CLASS).last().find(PICTURE_PINCH_ZOOM));\n for (var n = 0; n < imgs[l].zoomPictureSource.length; n += 1) {\n $('<source media=\"' + imgs[l].zoomPictureSource[n].media + '\" type=\"' + imgs[l].zoomPictureSource[n].type + '\" srcset=\"' + imgs[l].zoomPictureSource[n].srcset + '\"></source>')\n .appendTo($(carousel)\n .find(CAROUSEL_ITEM_CLASS).last().find(PICTURE_PINCH_ZOOM));\n }\n }\n }\n }\n } else {\n $(carousel).empty().append('<ol class=\"carousel-indicators\" tabindex=\"0\"></ol><div class=\"carousel-inner carousel-desktop\" role=\"listbox\"></div>');\n for (var k = 0; k < imgs.length; k += 1) {\n $('<div class=\"carousel-item col-12 p-1 caro-' + k + '\"></div>').appendTo($(carousel).find(carouselInnerClass));\n $('<img src=\"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\" data-src=\"' + imgs[k].src + '\" class=\"tile-image img-fluid lazypreload lazyload\"/>').appendTo($(carousel).find(carouselInnerClass).last().find('.caro-' + k));\n $('<li data-target=\"#' + carouselId + '\" data-slide-to=\"' + k + '\" class=\"\"><button aria-label= \"' + sliderImageText + ' ' + k + '\"></button></li>').appendTo($(carousel).find(carouselIndicatorsClass));\n }\n $(carousel).append('<a class=\"carousel-control-prev\" href=\"#' + carouselId + '\" role=\"button\" data-label=\"prev\" data-slide=\"prev\">');\n $('<span class=\"sr-only\">Previous</span>').appendTo($(carousel).find('.carousel-control-prev'));\n $(carousel).append('<a class=\"carousel-control-next\" href=\"#' + carouselId + '\" role=\"button\" data-label=\"next\" data-slide=\"next\">');\n $('<span class=\"sr-only\">Next</span>').appendTo($(carousel).find('.carousel-control-next'));\n }\n zoomImage.zoomModalCall();\n $($(carousel).find('.carousel-item')).first().addClass('active');\n $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n if (imgs.length === 1) {\n $($(carousel).find('.carousel-indicators, button[class^=\"carousel-control-\"]')).detach();\n }\n\n $(carousel).carousel({ wrap: false });\n carouselConfig.toggleCarouselControls($(carousel));\n if (!isEditCartorWishlist && typeof window.instantiateProductVideos === 'function') {\n window.instantiateProductVideos();\n }\n\n stickyProductDescription();\n // update class name to indicate the # of images in the carousel for styling purposes\n // server-side function is maintained in uiHelpers - getUiControls for use in standardImageGallery.isml\n $(carousel).attr('class').split(' ').forEach(function (className) {\n if (className.startsWith('carousel-length-')) {\n let imageTotal = (hasVideoAsset) ? imgs.length + 1 : imgs.length;\n $(carousel).removeClass(className);\n $(carousel).addClass('carousel-length-' + imageTotal);\n }\n });\n}\n\n$('body').on('slid.bs.carousel', '#zoom-modal', function () {\n carouselConfig.toggleCarouselControls($('#zoom-modal'));\n});\n\n// play any current playing videos when changing slides\n$('body').on('slide.bs.carousel', pdpCarouselID, function () {\n $('#pdpCarousel video').trigger('play');\n});\n\n/**\n * toggle elements view when product is Out of stock or non sellable\n */\nfunction hideProductAvailabilityElements() {\n $(ADD_TO_CART_SELECTOR).addClass('d-none');\n $(notifyCartClass).removeClass('d-none');\n $('.afterpay-pdp-wrapper').addClass('d-none');\n}\n\n/**\n * toggle elements view when product is available\n */\nfunction showProductAvailabilityElements() {\n $(ADD_TO_CART_SELECTOR).removeClass('d-none');\n $(notifyCartClass).addClass('d-none');\n $('.afterpay-pdp-wrapper').removeClass('d-none');\n}\n\n/**\n * Toggle Variations view and availability message.\n */\nfunction toggleAvailabilityMessage() {\n var $dynamicAttr = $(dynamicAttrClass);\n var $outOfStockMessage = $('.out-of-stock-message');\n var $noneSellableMessage = $(nonSellableMessageClass);\n var $productAvailability = $('.product-availability');\n if ($dynamicAttr.length) {\n $dynamicAttr.removeClass('d-none');\n }\n\n if ($outOfStockMessage.length) {\n $outOfStockMessage.addClass('d-none');\n }\n\n if ($noneSellableMessage.length) {\n $noneSellableMessage.addClass('d-none');\n }\n\n if ($productAvailability.length) {\n $productAvailability.removeClass('d-none');\n }\n}\n\n/**\n * Toggle store select button\n * @param {Object} response - response object\n */\nfunction toggleSelectStoreButton(response) {\n if (window.sitePrefs.bopisEnabled) {\n var selectStoreBtn = $('.btn-get-in-store-inventory');\n if (response.product.readyToOrder && response.product.available && response.product.availableForInStorePickup) {\n selectStoreBtn.removeAttr('disabled');\n } else {\n selectStoreBtn.attr('disabled', 'disabled');\n }\n }\n}\n\n/**\n * Update Product details\n * @param {string} availableDate 09/01/2020\n * @param {string} availableTime 09:00 am\n */\nfunction updateNonSellableMessage(availableDate, availableTime) {\n var $nonSellableMessage = $(nonSellableMessageClass);\n if ($nonSellableMessage.length) {\n $nonSellableMessage.removeClass('d-none');\n var $date = $nonSellableMessage.find('.date');\n var $time = $nonSellableMessage.find('.time');\n\n if ($date.length && availableDate) {\n $date.html(availableDate);\n }\n\n if ($time.length && availableTime) {\n $time.html(availableTime);\n }\n }\n}\n\n/**\n * Method to reset the unisex fit conversion head and body elements\n */\nfunction resetUnisexFitConversion() {\n var $unisexSizes = $(\"div[class*='js-unisex-size-']\");\n if ($unisexSizes && $unisexSizes.length) {\n $unisexSizes.removeClass('d-none').addClass('d-none');\n }\n\n var $unisexHead = $('.unisex-fit-conversion-head');\n if ($unisexHead && $unisexHead.length && !$unisexHead.hasClass('d-none')) {\n $unisexHead.addClass('d-none');\n }\n\n var $unisexBody = $('.unisex-fit-conversion-body');\n if ($unisexBody && $unisexBody.length && $unisexBody.hasClass('d-none')) {\n $unisexHead.removeClass('d-none');\n }\n}\n/**\n * Method to check if the pdp if of the unisex product\n * @returns {boolean} true if unisex-fit-conversion div is present\n */\nfunction isUnisexProduct() {\n var $isUnisexProduct = $('.unisex-fit-conversion');\n return ($isUnisexProduct && $isUnisexProduct.length);\n}\n/**\n * Method to toggle the unisex fit conversion div elements\n * @param {Object} $sizeElement current size element\n */\nfunction toggleUnisexFitConversion($sizeElement) {\n resetUnisexFitConversion();\n var sizeValue = $sizeElement.attr('title') || $sizeElement.data('attrValue');\n if (sizeValue) {\n var $unisexDiv = $('.js-unisex-size-' + sizeValue);\n if ($unisexDiv && $unisexDiv.length) {\n $unisexDiv.removeClass('d-none');\n var $unisexBlock = $(\"div[class*='unisex-fit-conversion-']\");\n if ($unisexBlock && $unisexBlock.length) {\n $unisexBlock.removeClass('d-none');\n }\n }\n }\n}\n/**\n * Method to display selectable variant\n */\nfunction displaySelectableVariant() {\n var $variants = $('button.variation-attribute.unisex-size.nb-button.selectable');\n if ($variants && $variants.length) {\n toggleUnisexFitConversion($variants.first());\n } else {\n resetUnisexFitConversion();\n }\n}\n\n/**\n * Method to display fit conversion\n */\nfunction displayFitConversion() {\n var $unisexFitConversion = $('.unisex-fit-conversion');\n if ($unisexFitConversion && $unisexFitConversion.length) {\n var $selectedVariant = $('button.variation-attribute.unisex-size.nb-button.selected.selectable');\n if ($selectedVariant && !$selectedVariant.length) {\n displaySelectableVariant();\n } else {\n toggleUnisexFitConversion($selectedVariant);\n }\n }\n}\n/**\n * Method to get price selector\n * @param {Object} $productContainer placeholder for productContainer\n * @return {Object} price selector object\n */\nfunction getPriceSelector($productContainer) {\n var $priceSelector = $('.quick-view .price', $productContainer);\n if (!$priceSelector.length) {\n var $tempSelector = $('.prices .price', $productContainer);\n $priceSelector = ($tempSelector.length) ? $tempSelector : $('.prices .price');\n }\n return $priceSelector;\n}\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n var isChoiceOfBonusProducts = $productContainer.parents(chooseBonusProductDialogClass).length > 0;\n var isVariant;\n if (response.product.variationAttributes) {\n attrHelpers.updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVariant = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVariant) {\n $productContainer.parent(bonusProductItemClass)\n .data('pid', response.product.id);\n\n $productContainer.parent(bonusProductItemClass)\n .data('ready-to-order', response.product.readyToOrder);\n }\n var sizeAttributes = response.product.variationAttributes.filter(function (arr) {\n return arr.id === 'size';\n });\n // Handle showing unisex size details via toggle fn\n if (sizeAttributes.length > 0 && isUnisexProduct()) {\n displayFitConversion();\n }\n }\n\n // Update primary images\n var primaryImageUrls = response.product.images.productDetail;\n\n createCarousel(primaryImageUrls, $productContainer, getVideoObject(response), response.product);\n\n updateWishListIcon(response.product.availability);\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = getPriceSelector($productContainer);\n $priceSelector.replaceWith(response.product.price.html);\n var $stickyCart = $('.add-to-cart-sticky');\n if ($stickyCart !== undefined && response.product.price.sales !== undefined) {\n if ($stickyCart.find(ADD_TO_CART_SPAN) !== undefined) {\n $stickyCart.find(ADD_TO_CART_SPAN).text(response.product.price.sales.formatted);\n $stickyCart.find(ADD_TO_CART_SPAN).attr('content', response.product.price.sales.decimalPrice);\n } else if ($stickyCart.find('.add-to-cart span') !== undefined) {\n $stickyCart.find('.add-to-cart span').text(response.product.price.sales.formatted);\n }\n }\n }\n\n // Update promotions\n if (response.product.promotionsHtml) {\n $productContainer.find(promotionsClass).empty().html(response.product.promotionsHtml);\n }\n\n updateAvailability(response, $productContainer);\n\n var modelSizingInfo = response.product.modelSizingInformation;\n if (modelSizingInfo && modelSizingInfo.length > 0) {\n var $modelInfoContainer = $productContainer.find('.model-sizing-info');\n var $modelList = $modelInfoContainer.empty().append('<ul class=\"m-3\"></ul>').find('ul');\n for (var i = 0; i < modelSizingInfo.length; i += 1) {\n $modelList.append('<li>' + modelSizingInfo[i] + '</li>');\n }\n } else {\n $productContainer.find('.model-sizing-info').empty();\n }\n\n // Refresh wishlist changes\n var wishlistUrl = $('.wishlist-url').text();\n if (wishlistUrl) {\n $.ajax({\n url: wishlistUrl,\n type: 'get',\n dataType: 'json',\n data: {\n pid: response.product.id,\n jsonResponse: true\n },\n success: function (data) {\n if (data.itemExistsFlag) {\n $(addToWishlistClass).addClass('d-none');\n $('.added-to-wishlist').removeClass('d-none');\n } else {\n $('.added-to-wishlist').addClass('d-none');\n $(addToWishlistClass).removeClass('d-none');\n }\n },\n error: function () {\n }\n });\n }\n\n if ($('.edit-wl-product-id').length) {\n $('.edit-wl-product-id').text(response.product.id);\n }\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find('.select-bonus-product');\n $selectButton.trigger('bonusproduct:updateSelectButton', {\n product: response.product, $productContainer: $productContainer\n });\n } else {\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product, $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n\n // Refresh Afterpay Widget\n if (response.product.price.sales && response.product.price.sales.value) {\n afterpayWidget.getWidget(response.product.id, response.product.price.sales.value, 'pdp-afterpay-message', $productContainer);\n }\n }\n\n if (response.qtyLimit && response.qtyLimit.limit) {\n $productContainer.find(limitedQtyMsgClass).removeClass('d-none');\n $productContainer.find(addToCartClass).prop('disabled', true);\n } else {\n $productContainer.find(limitedQtyMsgClass).addClass('d-none');\n }\n\n // Update attributes\n if (response.product.attributes) {\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\n }\n\n toggleSelectStoreButton(response);\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n * etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n if ($productContainer.parent(bonusProductItemClass).length <= 0) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '<option value=\"' + quantity.value + '\" data-url=\"' + quantity.url + '\"'\n + selected + '>' + quantity.value + '</option>';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\n/**\n * Updates the sticky element image post Ajax call\n * @param {ProductImages[]} productImages -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateStickyImage(productImages, $productContainer) {\n var imgToUpdate = productImages && productImages.productDetail && productImages.productDetail.length && productImages.productDetail[0].src;\n if (imgToUpdate) {\n $productContainer.find('.add-to-cart-sticky .sticky-img img').attr({\n src: imgToUpdate,\n alt: productImages.productDetail[0].alt\n });\n }\n}\n\n/**\n * Update BOPIS display on PDP\n * @param {Object} pickUpInStore - data object with bopis information\n * @param {Object} product - data object with product information\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {string} storeInventoryMessageTemplate - template for product store inventory message\n */\nfunction updateBopis(pickUpInStore, product, $productContainer, storeInventoryMessageTemplate) {\n const inStores = pickUpInStore && pickUpInStore.storesModel && pickUpInStore.storesModel.stores.length > 0;\n const bopisEligible = pickUpInStore && pickUpInStore.bopisEligible;\n let storePlaceholder;\n\n $('.change-store').each(function () {\n $(this).data('validate-ats', bopisEligible);\n $(this).data('pid', product.id);\n });\n\n $('.btn-storelocator-search').each(function () {\n $(this).data('search-ats', bopisEligible);\n $(this).data('search-pid', product.id);\n });\n\n if (bopisEligible) {\n let storePlaceholderID;\n $productContainer.find(bopisMethodID).removeClass('disable');\n storePlaceholderID = $productContainer.find(storeNameClass).data('store-placeholder');\n $productContainer.find(storeNameClass).removeAttr('data-placeholder').attr({ 'data-store-id': storePlaceholderID });\n\n let storeAts = 0;\n\n if (inStores) {\n const currentStore = pickUpInStore.storesModel.stores[0];\n storeAts = currentStore.storeATS;\n $('.store-map-link').html(currentStore.storeNavigationHtml);\n }\n\n let isSizeSelected = document.querySelector(sizeSelectedClasses);\n\n // If it is a bra, we should also check for a cup value\n if (document.querySelectorAll('.cup-value').length) {\n const isCupSelected = document.querySelector('.cup-value.selected');\n isSizeSelected = isSizeSelected && isCupSelected;\n }\n\n pdpInstoreInventory.updatePISMessage(isSizeSelected, inStores, storeAts, storeInventoryMessageTemplate);\n pdpInstoreInventory.showPickupStoreRadio();\n } else {\n // disable ship to store for selected variant\n $productContainer.find(bopisMethodID).addClass('disable');\n storePlaceholder = $productContainer.find(storeNameClass).data('store-id');\n $productContainer.find(storeNameClass).removeAttr('data-store-id').attr({ 'data-store-placeholder': storePlaceholder });\n $('.change-store').removeAttr('data-validate-ats').attr({ 'data-validate-ats': 'false' });\n }\n}\n\nconst Bopis = (function () {\n let lastArguments = null;\n const loaderSelector = '.pdp-in-store-inventory-loader';\n\n const updateWithLastArguments = function () {\n if (lastArguments) {\n updateBopis(...lastArguments);\n }\n };\n document.addEventListener('bopis:pdpBlockLoaded', updateWithLastArguments);\n\n return {\n update(...args) {\n const loader = document.querySelector(loaderSelector);\n\n if (loader) {\n lastArguments = args;\n } else {\n updateBopis(...args);\n }\n }\n };\n}());\n\n/**\n * starts or stops the spinner based on condition\n * @param {array} nbModals - selector for all product edit modal's\n * @param {boolean} startspinner - whether the spinner should start or stop\n */\nfunction SpinnerOnModal(nbModals, startspinner) {\n if (!nbModals.length) {\n return;\n }\n\n nbModals.forEach(function (modalId) {\n if ($(modalId).hasClass('show') && startspinner) {\n $(modalId).find(modalBodyClass).spinner().start();\n } else {\n $(modalId).find(modalBodyClass).spinner().stop();\n }\n });\n}\n\n/**\n * Method to show and hide condition for add to cart at common place\n * @param {Object} $productAttributes - product details\n */\nfunction addTOCartShowHide($productAttributes) {\n $productAttributes.find(outOfStockMessageClasses).addClass('d-none');\n $productAttributes.find(dynamicProductAvailabilityClass).removeClass('d-none');\n $productAttributes.find(promotionsClass).removeClass('d-none');\n $productAttributes.find(nonSellableMessageClasses).addClass('d-none');\n showProductAvailabilityElements();\n $(dynamicAttrClass).removeClass('d-none');\n}\n\n/**\n * Method to check if selected attribute value is OOS\n * @param {Object} productDetails - product details\n * @return {boolean} - true or false\n */\nfunction checkIfSelectedValueOOS(productDetails) {\n var returnVal = false;\n productDetails.variationAttributes.forEach(function (data) {\n data.values.forEach(function (value) {\n if (value.selected && value.fullyOOSInd) {\n returnVal = true;\n }\n });\n });\n return returnVal;\n}\n\n/**\n * Replace 'Add to cart' button with 'Notify me' button when product is OOS and\n * represents a BISN-enabled style that is not unorderable (ie. offline or non-existent)\n * @param {Object} product - product model\n */\nfunction replaceAddToCartWithBISN(product) {\n const isBISNEnabled = window.sitePrefs.bisnEnabled;\n const isBISNEligibleProduct = !product.available && !product.hasSelectedUnorderableVariant;\n const isBISNEnabledStyle = product.bisnEnabledStyle;\n const isBOPISFulfillment = $('#bopisMethodRadioButton').is(':checked');\n\n if (isBISNEnabled && isBISNEligibleProduct && isBISNEnabledStyle && !isBOPISFulfillment) {\n // this 'notify me' button differs from the fully OOS/non-sellable 'notify me' button\n $(bisnContainerClass).removeClass('d-none');\n $(addToCartClass).addClass('d-none');\n }\n}\n\n/**\n * Method to update PDP button when productVariation API is called from hashURL\n * @param {Object} productDetails - product details\n */\nfunction updateButtonOnLoadingAttributeFromUrl(productDetails) {\n var fullyOutOfStock = false;\n var nonSellable = false;\n var isForcedSoldOut = false;\n const $productAttributes = $(productAttributesID);\n productDetails.variationAttributes.forEach(function (data) {\n data.values.forEach(function (value) {\n if (value.selected) {\n if (value.isNonSellable) {\n nonSellable = true;\n } else if (value.fullyOOSInd) {\n fullyOutOfStock = true;\n }\n if (value.isForcedSoldOut) {\n isForcedSoldOut = true;\n }\n }\n });\n });\n\n // hide BISN modal trigger button\n $(bisnContainerClass).addClass('d-none');\n\n if (fullyOutOfStock) {\n $(dynamicAttrClass).addClass('d-none');\n $productAttributes.find(outOfStockMessageClasses).removeClass('d-none');\n $productAttributes.find(nonSellableMessageClasses).addClass('d-none');\n $productAttributes.find(dynamicProductAvailabilityClass).addClass('d-none');\n $productAttributes.find(promotionsClass).addClass('d-none');\n hideProductAvailabilityElements();\n updateNotifyMeButtonAttributes(productDetails);\n $(notifyCartClass).attr(DATA_CONTAINER_TYPE, 'out-of-stock-notify');\n } else if (nonSellable) {\n $(dynamicAttrClass).addClass('d-none');\n $productAttributes.find(outOfStockMessageClasses).addClass('d-none');\n $productAttributes.find(nonSellableMessageClasses).removeClass('d-none');\n $productAttributes.find(dynamicProductAvailabilityClass).addClass('d-none');\n $productAttributes.find(promotionsClass).addClass('d-none');\n hideProductAvailabilityElements();\n updateNotifyMeButtonAttributes(productDetails);\n if (productDetails.sellableFrom) {\n var todayDate = new Date();\n var tempCompareSellableDate = new Date(productDetails.sellableFrom);\n if (tempCompareSellableDate <= todayDate) {\n if (!checkIfSelectedValueOOS(productDetails)) {\n addTOCartShowHide($productAttributes);\n replaceAddToCartWithBISN(productDetails);\n } else {\n $productAttributes.find(nonSellableMessageClasses).addClass('d-none');\n $productAttributes.find(outOfStockMessageClasses).removeClass('d-none');\n }\n $(notifyCartClass).attr(DATA_CONTAINER_TYPE, 'out-of-stock-notify');\n } else {\n updateNonSellableMessage(productDetails.sellableFromFormattedDate, productDetails.sellableFromFormattedTime);\n $(notifyCartClass).attr(DATA_CONTAINER_TYPE, 'not-available-yet');\n }\n } else if (!checkIfSelectedValueOOS(productDetails)) {\n addTOCartShowHide($productAttributes);\n replaceAddToCartWithBISN(productDetails);\n }\n } else {\n addTOCartShowHide($productAttributes);\n replaceAddToCartWithBISN(productDetails);\n }\n\n if (isForcedSoldOut) {\n $(addToCartClass).attr('disabled', true);\n }\n\n $('#bisn-modal-trigger').data('isbisnenabledstyle', productDetails.bisnEnabledStyle);\n\n // Following logic to be refactored with completion of CHO-636. Hiding the fulfillment options\n // toggle if an unavailable variation attribute is selected, as these only represent online inventory.\n if (!productDetails.available || productDetails.hasSelectedUnorderableVariant || isForcedSoldOut) {\n $('.pdp-in-store-inventory').addClass('d-none');\n } else {\n $('.pdp-in-store-inventory').removeClass('d-none');\n }\n}\n\n/**\n * Function for filter recommendations on PDP\n * @param {*} element current size element\n */\nfunction filterEinsteinRecommendationOnPDP(element) {\n var $currentElement = $(element);\n if ($currentElement.data('attr') === 'size-value' && $currentElement.hasClass('selected')) {\n var $filterRecommendation = $('.filter-recommendations');\n if ($filterRecommendation && $filterRecommendation.length > 0) {\n var isFootwear = $filterRecommendation.data('footwear');\n var gender = $filterRecommendation.data('gender');\n var size = $currentElement.data('attrvalue');\n if (isFootwear && size && gender) {\n var params = 'size=' + size + '&gender=' + gender;\n $(document).trigger('filterEinsteinRecommendations', params);\n }\n }\n }\n}\n\n/**\n * Method to trigger filter recommendations script\n * @param {*} element current size element\n */\nfunction filterRecommendations(element) {\n if ((window.sitePrefs.enableFilterRecommendations === true) && element) {\n filterEinsteinRecommendationOnPDP(element);\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n * @param {jQuery} currentElement - current clicked element\n */\nfunction attributeSelect(selectedValueUrl, $productContainer, currentElement) {\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n // Initiating an AJAX call on a protected Shape end point is slow.\n // Prevent script from blocking UI updates via minute timeout.\n var callback = function () {\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n $('.product__id').html(data.product.id);\n handleVariantResponse(data, $productContainer);\n updateVolumental(data.product, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n updateStickyImage(data.product.images, $productContainer);\n updateButtonOnLoadingAttributeFromUrl(data.product);\n $('body').trigger('product:afterAttributeSelect',\n { data: data, container: $productContainer });\n $productContainer.trigger('product.variantselectionchange', data);\n if (window.sitePrefs.energyLaunchEnabled === true) {\n var energyLaunch = require('energyLaunch/energyLaunch');\n\n if (energyLaunch) {\n energyLaunch.handleButtonRenderingOnEnergyLaunchPDP();\n }\n }\n $.spinner().stop();\n $(document).trigger('product:initialattrselect');\n Bopis.update(data.pickUpInStore, data.product, $productContainer, data.storeInventoryMessageTemplate);\n filterRecommendations(currentElement);\n },\n error: function () {\n SpinnerOnModal(SPINNER_REQUIRED_MODALS, false);\n $.spinner().stop();\n }\n });\n };\n setTimeout(callback, 5);\n } else {\n SpinnerOnModal(SPINNER_REQUIRED_MODALS, false);\n }\n}\n\n/**\n * Get query parameters\n * @param {string} url - url to play on\n * @return {Object} - Query Object to play with.\n */\nfunction queryParameters(url) {\n var attributeUrl = new URL(url);\n var params = attributeUrl.search.substring(1);\n return JSON.parse('{\"' + decodeURI(params).replace(/\"/g, '\\\\\"').replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}');\n}\n\n/**\n* Update the URL of the basis of attribute selected.\n* @param {string} el - representing the clicked object.\n*\n* @return {void} - The provided URL to use when adding a product to the cart\n*/\nfunction updateUrlOnAttributeSelectionFromParameters(el) {\n var url = $(el).attr('data-url');\n if (url !== 'undefined' && url !== undefined && url !== null && url !== 'null') {\n var queryObject = queryParameters(url);\n // Create the final string to append.\n var stringToAppend = $.param(queryObject);\n var newurl = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search + '#' + stringToAppend;\n window.history.replaceState({ path: newurl }, '', newurl);\n }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n return $('.add-to-cart-url').val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $('<div>').append($.parseHTML(html));\n\n var body = $html.find('.choice-of-bonus-product');\n var footer = $html.find('.modal-footer').children();\n\n return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n $(modalBodyClass).spinner().start();\n\n if ($(chooseBonusProductModalID).length !== 0) {\n $(chooseBonusProductModalID).remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = '<!-- Modal -->'\n + '<div class=\"modal fade\" id=\"chooseBonusProductModal\" tabindex=\"-1\" role=\"dialog\">'\n + '<span class=\"enter-message sr-only\" ></span>'\n + '<div class=\"modal-dialog choose-bonus-product-dialog\" '\n + 'data-total-qty=\"' + data.maxBonusItems + '\"'\n + 'data-UUID=\"' + data.uuid + '\"'\n + 'data-pliUUID=\"' + data.pliUUID + '\"'\n + 'data-addToCartUrl=\"' + data.addToCartUrl + '\"'\n + 'data-pageStart=\"0\"'\n + 'data-pageSize=\"' + data.pageSize + '\"'\n + 'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"'\n + 'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">'\n + '<!-- Modal content-->'\n + '<div class=\"modal-content\">'\n + '<div class=\"modal-header\">'\n + ' <span class=\"\">' + data.labels.selectprods + '</span>'\n + ' <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">'\n + ' <span aria-hidden=\"true\">×</span>'\n + ' <span class=\"sr-only\"> </span>'\n + ' </button>'\n + '</div>'\n + '<div class=\"modal-body\"></div>'\n + '<div class=\"modal-footer\"></div>'\n + '</div>'\n + '</div>'\n + '</div>';\n $('body').append(htmlString);\n $(modalBodyClass).spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: 'GET',\n dataType: 'json',\n success: function (response) {\n var parsedHtml = parseHtml(response.renderedTemplate);\n $('#chooseBonusProductModal .modal-body').empty();\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\n $(chooseBonusProductModalID).modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * This method imposes conditions to show the Mini-Cart o addition of item on the basis of platforms: -\n * 1. When on mobile, the minicart persists on screen.\n * 2. When on desktop, the minicart hides after 3 second.\n */\nfunction miniCartShowHandler() {\n var $miniCartPopOver = $('.minicart .popover');\n var $document = $(document);\n $miniCartPopOver.spinner().stop();\n if ($(window).width() <= 1024) {\n $miniCartPopOver.addClass('show');\n $('body').addClass('modal-open');\n setTimeout(function () {\n $document.find('.minicart select.custom-select').prop('disabled', true);\n }, 3000);\n } else {\n var miniCartTimer = setTimeout(function () {\n $miniCartPopOver.removeClass('show');\n }, 3000);\n $document.on('minicart:hovered', function () {\n if (miniCartTimer) {\n clearTimeout(miniCartTimer);\n }\n });\n }\n}\n\n/**\n * Opens the Mini-Cart after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction showMiniCartOnAdd(response) {\n var $minicart = $('.minicart');\n var miniCartUrl = $minicart.length ? $('.minicart').data('action-url') : '';\n var $popover = $minicart.find('.popover');\n var count = parseInt($minicart.find('.minicart-quantity').text(), 10);\n\n if (count !== 0 && $popover.length && !$popover.hasClass('show')) {\n $.spinner().start();\n $.ajax({\n url: miniCartUrl,\n method: 'GET',\n success: function (data) {\n $.spinner().stop();\n $popover.spinner().start();\n $popover.addClass('show');\n $popover.empty().append(data);\n utils.initalizePaypal();\n $('.minicart .container.cart').prepend('<div class=\"minicart-success-msg col-12 py-3\"></div>');\n var checkMark = '<span class=\"checkmark mr-3\"></span>';\n $('.minicart').find('.minicart-success-msg').html(checkMark + response.minicartSuccessMsg);\n $('body').trigger('minicart:updateProductRecommendator');\n miniCartShowHandler();\n },\n error: function () {\n // Hide spinner\n $.spinner().stop();\n }\n });\n }\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n $('.minicart').trigger('count:update', response);\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n }\n\n showMiniCartOnAdd(response);\n\n var $productContainer = $(productDetailClass).eq(0);\n if (response.qtyLimit && response.qtyLimit.limit) {\n $productContainer.find(limitedQtyMsgClass).removeClass('d-none');\n $productContainer.find(addToCartClass).prop('disabled', true);\n } else {\n $productContainer.find(limitedQtyMsgClass).addClass('d-none');\n }\n\n if ((response.preOrderData && response.preOrderData.hasPreOrder) || (response.backOrderData && response.backOrderData.hasBackOrder)) {\n $productContainer.find('button.add-to-cart').prop('disabled', true);\n $productContainer.find('.preorder-qty-msg').removeClass('d-none');\n }\n var $addedToCartSuccessMsgCont = $('.js-added-to-cart-success-msg');\n var productName = $addedToCartSuccessMsgCont.data('productname');\n var miniCartSuccessMsg = $addedToCartSuccessMsgCont.data('minicartsuccessmsg');\n var quantity = response.minicartCountOfItems;\n var msg = '<span class=\"sr-only\">' + productName + ' ' + miniCartSuccessMsg + ' ' + quantity + '</span>';\n $addedToCartSuccessMsgCont.html(msg);\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n var childProducts = [];\n $('.bundle-item').each(function () {\n childProducts.push({\n pid: $(this).find(productIdClass).text(),\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\n });\n });\n\n return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n var options = $productContainer\n .find('.product-option')\n .map(function () {\n var $elOption = $(this).find('.options-select');\n var urlValue = $elOption.val();\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\n .data('value-id');\n return {\n optionId: $(this).data('option-id'),\n selectedValueId: selectedValueId\n };\n }).toArray();\n\n return JSON.stringify(options);\n}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n if (url) {\n $.ajax({\n url: url,\n method: 'GET',\n success: function () {\n // reporting urls hit on the server\n },\n error: function () {\n // no reporting urls hit on the server\n }\n });\n }\n}\n\n/**\n * hide desktop filters\n*/\nfunction hideFilters() {\n $(document).on('click', '.filters-hideshow-btn span.hide-filters', function (e) {\n e.preventDefault();\n var $this = $(this);\n\n $this.closest('.container').find('.hide-show-filter').toggleClass('hidden');\n $this.closest('.container').find(pgpGridsClass).toggleClass('col-lg-9');\n $this.find('.filter-hide, .filter-show').toggleClass('active');\n\n if ($('.refinement-bar').is(':visible') === true) {\n $('.filter-tabs-js').removeClass('d-lg-block');\n $('.category-seo-text').removeClass('hidefilter');\n $(pgpGridsClass).addClass('pl-lg-7');\n } else {\n $('.filter-tabs-js').addClass('d-lg-block');\n $('.category-seo-text').addClass('hidefilter');\n $(pgpGridsClass).removeClass('pl-lg-7');\n }\n\n $('body').trigger('carousels:reinit');\n });\n} hideFilters();\n\n/**\n *Activate color swatches\n */\nfunction thumTouchImg() {\n $('body').on('click touchstart focus', '.color-swatches button.sildes', function (e) {\n e.stopPropagation();\n var $this = $(this).find('img.swatch-circle');\n var $slideEl = $this.closest(BUTTON_SLIDES);\n var pidUrl = $slideEl.attr('href');\n var $productTile = $this.closest(productTileClass);\n\n var standardUrl = $this.attr('data-src');\n var largeUrl = $this.attr('data-large-srcset');\n\n // Apply new dimensions using replaceAll only for mobile devices and .enlarged-mobile-image\n if (measures.isMobile() && $productTile.closest('.pgptiles').hasClass('enlarged-mobile-image')) {\n if (largeUrl) {\n largeUrl = largeUrl.replaceAll('wid=880', 'wid=920').replaceAll('hei=880', 'hei=920');\n }\n if (standardUrl) {\n standardUrl = standardUrl.replaceAll('wid=880', 'wid=920').replaceAll('hei=880', 'hei=920');\n }\n }\n\n var getUrl = largeUrl || standardUrl;\n\n var hoverStandardUrl = $this.attr('data-src-next');\n var hoverLargeUrl = $this.attr('data-large-srcset-next');\n var getHoverUrl = hoverLargeUrl || hoverStandardUrl;\n\n // New Badge (localized)\n var badgeName = $this.closest('.sildes').find('.badge-name-to-show').text();\n // Replace Image Source\n $productTile.find('.image-container picture.firstImage source, .image-container img').attr({ srcset: getUrl, src: getUrl });\n\n if (!measures.isMobile()) {\n // Replace Image source on hover element\n $productTile.find('.image-container picture.nextImage source, .image-container img').attr({ srcset: getHoverUrl, src: getHoverUrl });\n }\n\n // update selected outline\n $slideEl.closest('.color-swatches').find(BUTTON_SLIDES).removeClass('selected');\n $slideEl.addClass('selected');\n\n // update the link on the main image\n var anchorEl = $slideEl.parents(productTileClass).find(IMAGE_CONTAINER_ANCHOR);\n anchorEl.attr('href', pidUrl);\n\n // clear the current badge\n $productTile.find('.tile-badges').empty(); // eslint-disable-line sonarjs/no-duplicate-string\n\n var searchResultsContainer = $('.container.search-results.js-search-results');\n\n // Remove unavailable class from quick view button/icon\n if (searchResultsContainer.hasClass('quick-view-button-style')) {\n $productTile.find('.quick-view-button.only-desktop').removeClass('unavailable');\n $productTile.find('.quick-view-button.only-mobile').removeClass('no-btn');\n $productTile.find('.quick-view-button.only-mobile button.button-style').removeClass('unavailable');\n }\n\n if (searchResultsContainer.hasClass('quick-view-icon-style')) {\n $productTile.find('.quick-view-icon').removeClass('unavailable');\n }\n\n // Show the badge name\n if (badgeName) {\n $productTile.find('.tile-badges').html('<span class=\"sub-badges pb-2 font-weight-bold d-inline-block\">' + badgeName + '</span>');\n\n // Get non-localized badge name from DOM\n var productBadgeName = $this.closest('.sildes').find('.badge-name-to-show').data('badge-name');\n\n // Hide quick view icon for sold out and coming soon products\n if (productBadgeName && (productBadgeName.toLowerCase().trim() === 'sold out' || productBadgeName.toLowerCase().trim() === 'coming soon')) {\n if (searchResultsContainer.hasClass('quick-view-button-style')) {\n $productTile.find('.quick-view-button.only-desktop').addClass('unavailable');\n $productTile.find('.quick-view-button.only-mobile').addClass('no-btn');\n $productTile.find('.quick-view-button.only-mobile button.button-style').addClass('unavailable');\n }\n\n if (searchResultsContainer.hasClass('quick-view-icon-style')) {\n $productTile.find('.quick-view-icon').addClass('unavailable');\n }\n }\n }\n });\n} thumTouchImg();\n\n/**\n * Mouseover size swatches\n */\nfunction mouseOverSizeSwatches() {\n $(document).on('mouseenter mouseleave', '.unisex-size', function (event) {\n if (isUnisexProduct()) {\n if (event.type === 'mouseenter') {\n toggleUnisexFitConversion($(this));\n } else {\n var $selectedSizeElement = $('button.unisex-size .selected');\n if ($selectedSizeElement && $selectedSizeElement.length > 0) {\n toggleUnisexFitConversion($selectedSizeElement);\n } else {\n displaySelectableVariant();\n }\n }\n }\n });\n}\nmouseOverSizeSwatches();\n\n/**\n * wishlist on pgp\n */\nfunction pgpWishlist() {\n var isUserLoggedIn = $('.is-wishlist-valid').length;\n $(document).on('click', '.wishListToggle .wishlist-inactive', function () {\n if (isUserLoggedIn) {\n $(this).toggleClass('active');\n $(this).closest('.wishListToggle').find('.wishlist-active').toggleClass('active');\n }\n });\n $(document).on('click', '.wishListToggle .wishlist-active', function () {\n if (isUserLoggedIn) {\n $(this).toggleClass('active');\n $(this).closest('.wishListToggle').find('.wishlist-inactive').toggleClass('active');\n }\n });\n} pgpWishlist();\n\n/**\n * mobile list view\n */\nfunction listView() {\n $(document).on('click', '.grid-list .listview-inactive', function () {\n $('body').find('.product-grid .pgptiles').removeClass('col-6').addClass('col-12');\n $(this).removeClass('active');\n $(this).next().addClass('active');\n $(this).closest(gridListClass).find('.gridview-active').removeClass('active');\n $(this).closest(gridListClass).find('.gridview-inactive').addClass('active');\n localStorage.setItem('selectedViewStyle', 'listView');\n });\n} listView();\n\n/**\n * mobile grid view\n */\nfunction gridView() {\n $(document).on('click', activeGridClasses, function () {\n $('body').find('.product-grid .pgptiles').removeClass('col-12').addClass('col-6');\n $(this).addClass('active');\n $(this).next().removeClass('active');\n $(this).closest(gridListClass).find('.list-view .listview-active').removeClass('active');\n $(this).closest(gridListClass).find('.list-view .listview-inactive').addClass('active');\n localStorage.setItem('selectedViewStyle', 'gridView');\n });\n} gridView();\n\n/**\n * select colorswatch\n * @param {Object} cs - color swatch instance\n * @param {Object} csImg - color swatch image instance\n * @param {Object} scope - this scope of colorswatch image\n */\nfunction selectSwatch(cs, csImg, scope) {\n var productTile = scope.closest(productTileClass);\n\n var standardUrl = scope.attr('data-src');\n var largeUrl = scope.attr('data-large-src');\n var getUrl = largeUrl || standardUrl;\n\n var hoverStandardUrl = scope.attr('data-src-next');\n var hoverLargeUrl = scope.attr('data-large-srcset-next');\n var getHoverUrl = hoverLargeUrl || hoverStandardUrl;\n\n var srcSetUrls = getUrl + ' 1x, ' + getUrl.replace(/440/gi, '880') + ' 2x';\n var srcSetHoverUrls = getHoverUrl + ' 1x, ' + getHoverUrl.replace(/440/gi, '880') + ' 2x';\n\n var pidUrl = scope.closest(BUTTON_SLIDES).attr('href');\n\n productTile.find('.image-container picture source, .image-container img').attr({ src: getUrl, srcset: getUrl, 'data-srcset': srcSetUrls });\n\n if (!measures.isMobile()) {\n productTile.find('.image-container picture.nextImage source, .image-container img').attr({\n src: getHoverUrl,\n srcset: getHoverUrl,\n 'data-srcset': srcSetHoverUrls\n });\n }\n\n productTile.find(IMAGE_CONTAINER_ANCHOR).attr('href', pidUrl);\n $(cs).find('button').removeClass('selected');\n $(csImg).closest('button').addClass('selected');\n}\n\n/**\n * This function enhances the accessibility of a carousel by setting the proper ARIA attributes\n * @param {Element} $carouselSelector - The element that contains the carousel.\n */\nfunction enhanceCarouselAccessibility($carouselSelector) {\n var slideCompare;\n $carouselSelector.on('afterChange', function (event, slick, currentSlide) {\n if (slideCompare !== currentSlide) {\n const $slideActive = $carouselSelector.find('.slick-slide.slick-active');\n const $currentSlideActive = $carouselSelector.find('.slick-slide.slick-current.slick-active');\n var horizontalCarouselDirection = $carouselSelector.attr('data-direction');\n var newSlideIn = horizontalCarouselDirection === 'left' ? $currentSlideActive.first() : $slideActive.last();\n newSlideIn.find('button').focus();\n setTimeout(function () {\n if (horizontalCarouselDirection === 'left') {\n $currentSlideActive.prevAll().each(function (_index, element) {\n $(element).attr(ARIA_HIDDEN, 'true').find('button').attr('tabindex', -1);\n });\n }\n });\n }\n });\n\n $carouselSelector.on('beforeChange', function (event, slick, currentSlide, nextSlide) {\n slideCompare = currentSlide;\n if (currentSlide !== nextSlide) {\n $carouselSelector.attr('data-direction', currentSlide < nextSlide ? 'left' : 'right');\n }\n });\n}\n\n/**\n * Initiates slick slider carousel on the PGP\n * for product tiles with more than 3 colorways\n * @param {string} colorOverride - optional color to set\n */\nfunction initSlickSlider(colorOverride) {\n var colors = [];\n var pgptilesEl = $('.pgptiles');\n\n // check for slick\n if (typeof $.fn.slick !== 'undefined') {\n // update the swatches width class\n pgptilesEl.find('.product-tile .color-swatches .swatches.w-100').removeClass('w-100').addClass('mx-auto');\n pgptilesEl.find('.product-tile .color-swatches .swatches.mx-auto').css('overflow', 'visible');\n\n // initialize the slider\n let $notSlickEl = pgptilesEl.find('.product-tile .color-swatches .swatches.mx-auto .getproduct:not(.slick-initialized)');\n const swatchFirstEl = $notSlickEl.first();\n $notSlickEl.on('init', function () {\n enhanceCarouselAccessibility($(this));\n });\n $notSlickEl.slick({\n infinite: false,\n speed: 300,\n slidesToShow: 6,\n slidesToScroll: 6,\n variableWidth: true,\n respondTo: 'window',\n responsive: [\n {\n breakpoint: 1441,\n settings: {\n slidesToShow: 5,\n slidesToScroll: 5\n }\n },\n {\n breakpoint: 1273,\n settings: {\n slidesToShow: 4,\n slidesToScroll: 4\n }\n },\n {\n breakpoint: 1101,\n settings: {\n slidesToShow: 3,\n slidesToScroll: 3\n }\n },\n {\n breakpoint: 991,\n settings: {\n slidesToShow: 6,\n slidesToScroll: 6\n }\n },\n {\n breakpoint: 544,\n settings: {\n slidesToShow: 5,\n slidesToScroll: 5\n }\n },\n {\n breakpoint: 451,\n settings: {\n slidesToShow: 3,\n slidesToScroll: 3\n }\n }\n ],\n prevArrow: `<div class=\"prev\"><button type=\"button\" aria-label=\"${swatchFirstEl.data('previous-swatch')}\"></button></div>`,\n nextArrow: `<div class=\"next\"><button type=\"button\" aria-label=\"${swatchFirstEl.data('next-swatch')}\"></button></div>`\n });\n }\n\n if ($(selectedRefinementColorClasses).length >= 1 || colorOverride !== undefined) {\n $(selectedRefinementColorClasses).each(function () {\n var color = $(this).data('color').replace(/,/g, '').trim();\n if (color) {\n colors.push(color);\n }\n });\n\n if (colorOverride !== undefined) {\n colors.length = 0;\n colors.push(colorOverride);\n }\n\n $('.color-swatches').each(function (j, cs) {\n $(cs).find('img').each(function (k, csImg) {\n var productColors = $(csImg).data('colors');\n var defaultColors = $(csImg).data('defaultcolors');\n /* eslint-disable no-restricted-syntax */\n for (let c in colors) {\n if (Object.prototype.hasOwnProperty.call(colors, c)) {\n var filterColor = colors[c];\n var foundPrimaryColor = false;\n\n if (productColors.indexOf(filterColor) !== -1) {\n if ((defaultColors && (productColors === defaultColors)) || (!defaultColors && productColors.indexOf(filterColor) === 0)) {\n foundPrimaryColor = true;\n }\n selectSwatch(cs, csImg, $(this));\n }\n\n if (foundPrimaryColor === true) {\n return false;\n }\n }\n }\n return true;\n });\n });\n }\n\n // adds an outline to the currently selected swatch\n pgptilesEl.find(productTileClass).each(function () {\n var $tileEl = $(this);\n if (!$tileEl.find('.color-swatches button.sildes.selected').length) {\n var colorway = $tileEl.find('.image-container img').attr('title').split(', ').pop();\n var $colorSwatch = $tileEl.find('.color-swatches button.sildes[title=\"' + colorway + '\"]');\n $colorSwatch.addClass('selected');\n var colorSwatchUrl = $colorSwatch.attr('href');\n if (colorSwatchUrl) {\n $tileEl.find(IMAGE_CONTAINER_ANCHOR).attr('href', colorSwatchUrl);\n }\n }\n });\n}\n\n/**\n * Sets the carousel slider on pgp with or without search phrase\n * @return {boolean} return out of the function\n */\nfunction setSlickSliderWithSearch() {\n var searchValue = ($('.search-field').attr('value') || '').toLowerCase();\n\n if (searchValue) {\n var foundSearchMatch = false;\n $('.refinements.desktop .refinement-color .color-attribute, .refinements.desktop .refinement-refinementcolor .color-attribute').each(function () {\n var displayValue = $(this).data('displayvalue');\n var color = $(this).data('color');\n if (searchValue.indexOf(displayValue.toLowerCase()) > -1) {\n initSlickSlider(color);\n foundSearchMatch = true;\n return false;\n }\n\n if (searchValue.indexOf(color.toLowerCase()) > -1) {\n initSlickSlider(color);\n foundSearchMatch = true;\n return false;\n }\n\n return true;\n });\n\n if (foundSearchMatch) {\n return false;\n }\n }\n\n initSlickSlider();\n return false;\n}\n\nsetSlickSliderWithSearch();\n\n// event for ajax calls\n$('body').on('initSlickSlider', function () {\n if ($(selectedRefinementColorClasses).length >= 1) {\n initSlickSlider();\n } else {\n setSlickSliderWithSearch();\n }\n});\n\n// prevent clicks on mobile swatches\n$('body').on('click touchstart', '.product-tile .color-swatches', function (e) {\n if (measures.isMobile()) {\n e.preventDefault();\n }\n});\n\n// minimize file names\n$('.pname').each(function () {\n var $nameLength = $(this).text().length;\n if ($nameLength > 38) {\n $(this).text($(this).text().substr(0, 38) + '窶ヲ');\n }\n});\n\n/**\n * close mini cart in PDP\n */\n\n$(document).on('click touchstart', '#mini-cart-close', function () {\n $(document).find('.popover.popover-bottom').removeClass('show');\n $('body').removeClass('modal-open');\n});\n\n/**\n * Moves focus to first input element when subscribe modal is opened.\n */\n$(document).on('shown.bs.modal', '#subscribe-global-modal', function () {\n setTimeout(function () {\n var inputEl = $('#subscribe-global-modal').find('input[type!=hidden]');\n var inputVal = inputEl.val();\n inputEl.trigger('focus').val('').val(inputVal);\n }, 1000);\n});\n\n/**\n * Shipping method change event in PDP\n */\nfunction shippingRadioChangeEvent() {\n $(document).on('change', '.js-radio-btn', function () {\n const $shippingRadioButton = $('#shippingMethodRadioButton');\n const $bopisRadioButton = $('#bopisMethodRadioButton');\n const storeSelected = $bopisRadioButton.data('store-id');\n\n if ($shippingRadioButton.is(':checked')) {\n $('#pdpShippingCollapseDetails').collapse('show');\n $('#shipping-method').addClass('selected');\n\n $('#pdpBopisCollapseDetails').collapse('hide');\n $(bopisMethodID).removeClass('selected');\n\n // variation attributes can be selected even when unavailable (ie. selectable = false)\n const isUnavailableVariationAttributeSelected = $(productAttributesID).find(selectedUnavailableAttributeClasses).length > 0;\n const isBISNEnabledStyle = $('#bisn-modal-trigger').data('isbisnenabledstyle');\n\n if (isUnavailableVariationAttributeSelected && isBISNEnabledStyle) {\n $(bisnContainerClass).removeClass('d-none');\n $(addToCartClass).addClass('d-none');\n }\n } else {\n if (!storeSelected) {\n // reverse fulfillment method selection\n $bopisRadioButton.prop('checked', false);\n $shippingRadioButton.prop('checked', true);\n\n // prompt user to select store\n var $storeFinderModal = $('#storeFinderModal');\n $storeFinderModal.data('prompt-store-selection', true);\n $storeFinderModal.modal('show');\n $('#store-postal-code').trigger('focus');\n\n return;\n }\n\n $('#pdpShippingCollapseDetails').collapse('hide');\n $('#shipping-method').removeClass('selected');\n\n $('#pdpBopisCollapseDetails').collapse('show');\n $(bopisMethodID).addClass('selected');\n\n // hide BISN 'notify me' button if BOPIS is selected\n $(bisnContainerClass).addClass('d-none');\n $(addToCartClass).removeClass('d-none');\n }\n pdpInstoreInventory.showPickupStoreRadio(true);\n });\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n thumTouchImg: thumTouchImg,\n pgpWishlist: pgpWishlist,\n listView: listView,\n gridView: gridView,\n removeListView: function () {\n $(window).resize(gridView);\n },\n\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n }\n },\n\n focusChooseBonusProductModal: function () {\n $('body').on('shown.bs.modal', chooseBonusProductModalID, function () {\n $(chooseBonusProductModalID).siblings().attr(ARIA_HIDDEN, 'true');\n $('#chooseBonusProductModal .close').focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $('body').on('hidden.bs.modal', chooseBonusProductModalID, function () {\n $(chooseBonusProductModalID).siblings().attr(ARIA_HIDDEN, 'false');\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $('body').on('keydown', chooseBonusProductModalID, function (e) {\n var focusParams = {\n event: e,\n containerSelector: chooseBonusProductModalID,\n firstElementSelector: '.close',\n lastElementSelector: '.add-bonus-products'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n colorAttribute: function () {\n // The method colorAttribute() can be called more than once.\n // Calling off() before on() to prevent double event listeners and double HTTP calls.\n // The off() and on() selector strings need to be identical for this to work.\n var selector = '[data-attr=\"size-value\"], [data-attr=\"style-value\"], [data-attr=\"width-value\"], [data-attr=\"cup-value\"]';\n // eslint-disable-next-line sonarjs/cognitive-complexity\n $(document).off('click', selector).on('click', selector, function (e) {\n e.preventDefault();\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest(productDetailClass);\n }\n\n if (!$productContainer.hasClass('product-quickview') && this.classList.value.indexOf('selected') < 0) {\n updateUrlOnAttributeSelectionFromParameters(this);\n }\n\n var $notifyCart = $(notifyCartClass);\n // deselect action\n if (!$(this).hasClass('selected') || $(this).is('[data-attr=\"size-value\"], [data-attr=\"width-value\"], [data-attr=\"cup-value\"]')) {\n $(this).closest('.attributes').find('.row').each(function () {\n if (!$(this).hasClass('enable-bisn')) {\n $(this).removeClass('d-none');\n }\n });\n $(this).parent('div').find('button').removeClass('selected');\n $(this).parent('div').find('span').removeClass('selected');\n\n $(ADD_TO_CART_SELECTOR, $productContainer).attr('disabled', '');\n $('.out-of-stock-message').addClass('d-none');\n $(nonSellableMessageClass).addClass('d-none');\n $('.product-availability').removeClass('d-none');\n\n if ($notifyCart.length && !$notifyCart.hasClass('d-none')) {\n $(dynamicAttrClass).addClass('d-none');\n $(nonSellableMessageClass).removeClass('d-none');\n $(addToWishlistClass).addClass('d-none');\n }\n\n SpinnerOnModal(SPINNER_REQUIRED_MODALS, true);\n $('.availability-msg').hide();\n if ($(this).data('attrid') === 'size' && isUnisexProduct()) {\n toggleUnisexFitConversion($(this));\n e.stopPropagation();\n }\n if ($(this).attr('data-url') !== undefined) {\n attributeSelect($(this).attr('data-url'), $productContainer, this);\n } else {\n $('.update-cart-product-global').prop('disabled', true);\n SpinnerOnModal(SPINNER_REQUIRED_MODALS, false);\n }\n }\n });\n },\n\n selectAttribute: function () {\n $(document).off('change', 'select[class*=\"select-\"], .options-select').on('change', 'select[class*=\"select-\"], .options-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest(productDetailClass);\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n });\n },\n\n availability: function () {\n $(document).on('change', quantitySelectClass, function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest(productDetailClass);\n if (!$productContainer.length) {\n $productContainer = $(this).closest(modalContentClass).find(productQuickViewClass);\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer);\n }\n });\n },\n\n addToCart: function () {\n $(document).off('click', 'button.add-to-cart, button.add-to-cart-global').on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n\n var isSticky = $(this.parentElement).hasClass('sticky-content');\n var productWrapper = $(this).closest('div.nb-modal__panel');\n if (!productWrapper.length) {\n productWrapper = $(this).closest('.product-wrapper');\n }\n\n $('.attribute', productWrapper).each(function () {\n var $this = $(this);\n var lenVal = $this.find('.selected').length;\n if (lenVal < 1) {\n $this.addClass('error');\n } else {\n $this.removeClass('error');\n }\n });\n\n if ($('.attribute.error', productWrapper).not('.attribute.quantity').length) {\n var element = $('.attribute.error', productWrapper).eq(0).parent();\n var errorElementOffset = element && element.length ? element.offset().top : 0;\n var headerHeight = $('.header-fixed').outerHeight();\n $('html, body').animate({\n scrollTop: errorElementOffset - headerHeight\n }, 500);\n return;\n }\n\n $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $(productDetailClass).each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find(productIdClass).text(),\n qty: $(this).find(quantitySelectClass).val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n\n var $productContainer = $(this).closest(productDetailClass);\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find(productDetailClass);\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this)),\n estimatedDelivery: $('.delivery-estimate-message').text()\n };\n\n var csrfName = $(csrfClass).attr('name');\n var csrfValue = $(csrfClass).val();\n form[csrfName] = csrfValue;\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n $('.js-added-to-cart-success-msg label').remove();\n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n setTimeout(function () {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n utils.checkForSessionLogout(data);\n if (isSticky) {\n $('html, body').animate({ scrollTop: 0 }, 700);\n }\n $('body').trigger('product:afterAddToCart', data);\n handlePostCartAdd(data);\n miniCartReportingUrl(data.reportingURL);\n },\n error: function (err) {\n if (err && err.responseJSON && err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n $.spinner().stop();\n }\n }\n });\n }, 2);\n }\n });\n },\n selectBonusProduct: function () {\n $(document).on('click', '.select-bonus-product', function () {\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n var pid = $(this).data('pid');\n var maxPids = $(chooseBonusProductDialogClass).data('total-qty');\n var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\n var totalQty = 0;\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n totalQty += $(this).data('qty');\n });\n totalQty += submittedQty;\n var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\n var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\n if (totalQty <= maxPids) {\n var selectedBonusProductHtml = ''\n + '<div class=\"selected-pid row\" '\n + 'data-pid=\"' + pid + '\"'\n + 'data-qty=\"' + submittedQty + '\"'\n + 'data-optionID=\"' + (optionID || '') + '\"'\n + 'data-option-selected-value=\"' + (valueId || '') + '\"'\n + '>'\n + '<div class=\"col-sm-11 col-9 bonus-product-name\" >'\n + $choiceOfBonusProduct.find('.product-name').html()\n + '</div>'\n + '<div class=\"col-1\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></div>'\n + '</div>';\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $(preCartProductsClass).html(totalQty);\n $(selectedBonusSummaryClasses).removeClass(ALERT_DANGER);\n } else {\n $(selectedBonusSummaryClasses).addClass(ALERT_DANGER);\n }\n });\n },\n removeBonusProduct: function () {\n $(document).on('click', '.selected-pid', function () {\n $(this).remove();\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\n var count = 0;\n if ($selected.length) {\n $selected.each(function () {\n count += parseInt($(this).data('qty'), 10);\n });\n }\n\n $(preCartProductsClass).html(count);\n $(selectedBonusSummaryClasses).removeClass(ALERT_DANGER);\n });\n },\n enableBonusProductSelection: function () {\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n var pid = response.product.id;\n $('button.select-bonus-product', response.$productContainer).data('pid', pid);\n });\n },\n showMoreBonusProducts: function () {\n $(document).on('click', '.show-more-bonus-products', function () {\n var url = $(this).data('url');\n $(modalContentClass).spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $(modalBodyClass).append(parsedHtml.body);\n $('.show-more-bonus-products:first').remove();\n $(modalContentClass).spinner().stop();\n },\n error: function () {\n $(modalContentClass).spinner().stop();\n }\n });\n });\n },\n addBonusProductsToCart: function () {\n $(document).on('click', '.add-bonus-products', function () {\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\n var queryString = '?pids=';\n var url = $(chooseBonusProductDialogClass).data('addtocarturl');\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption = parseInt($(this).data('qty'), 10);\n\n var option = null;\n if (qtyOption > 0) {\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\n option = {};\n option.optionId = $(this).data('optionid');\n option.productId = $(this).data('pid');\n option.selectedValueId = $(this).data('option-selected-value');\n }\n pidsObject.bonusProducts.push({\n pid: $(this).data('pid'),\n qty: qtyOption,\n options: [option]\n });\n pidsObject.totalQty = parseInt($(preCartProductsClass).html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + '&uuid=' + $(chooseBonusProductDialogClass).data('uuid');\n queryString = queryString + '&pliuuid=' + $(chooseBonusProductDialogClass).data('pliuuid');\n $.spinner().start();\n $.ajax({\n url: url + queryString,\n method: 'POST',\n success: function (data) {\n $.spinner().stop();\n if (data.error) {\n $(chooseBonusProductModalID).modal('hide');\n if ($(addToCartMessagesClass).length === 0) {\n $('body').append('<div class=\"add-to-cart-messages\"></div>');\n }\n $(addToCartMessagesClass).append(\n '<div class=\"alert alert-danger add-to-basket-alert text-center\"'\n + ' role=\"alert\">'\n + data.errorMessage + '</div>'\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 3000);\n } else {\n $('.configure-bonus-product-attributes').html(data);\n $('.bonus-products-step2').removeClass('hidden-xl-down');\n $(chooseBonusProductModalID).modal('hide');\n\n if ($(addToCartMessagesClass).length === 0) {\n $('body').append('<div class=\"add-to-cart-messages\"></div>');\n }\n $('.minicart-quantity').html(data.totalQty);\n $(addToCartMessagesClass).append(\n '<div class=\"alert alert-success add-to-basket-alert text-center\"'\n + ' role=\"alert\">'\n + data.msgSuccess + '</div>'\n );\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n if ($('.cart-page').length) {\n // location.reload();\n }\n }, 1500);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n initLocally: function (container) {\n var robisWrap = container.find('.robis-wrap');\n var robisButton = robisWrap.find('.robis-button');\n var robisAction = robisButton.find('.robis-button-action');\n var productMarkup = robisButton.closest(productDetailClass);\n var uniq = -1;\n\n $('.robis-wrap span.upc-available, .robis-wrap .icon-upc-available').hide();\n\n // This is a callback when data from Locally is returned\n window.addEventListener('LOCALLY_data_update', function (event) {\n if (event.detail.id !== uniq.toString()) {\n return;\n }\n if (event.detail.n_items_stocking_upc > 0) { // this product is in stock locally\n robisAction.removeClass('disabled').removeClass('unavailable');\n robisAction.removeClass(UPC_UNAVAILABLE).addClass(UPC_AVAILABLE);\n $('span.upc-available, .robis-wrap .icon-upc-available').show();\n $('.robis-button-action .icon-locator').hide();\n } else {\n robisAction.addClass('disabled');\n robisAction.removeClass(UPC_AVAILABLE).addClass(UPC_UNAVAILABLE);\n $('span.upc-available, .robis-wrap .icon-upc-available').hide();\n $('.robis-button-action .icon-locator').show();\n }\n }, false);\n // This triggers the locally modal; just catches the pretty robis button to fire the hidden Locally button\n robisAction.on('click', function () {\n if (!robisAction.hasClass('disabled')) {\n robisWrap.find('#lcly-button-' + uniq).find('.lcly-primary-trigger').click();\n }\n }); // trigger the locally modal\n\n // Gets a unique index for the Locally widget instance, zero based (can't use underscorejs)\n function getIndex() { // eslint-disable-line require-jsdoc\n if (window._locallyindexer >= 0) { // eslint-disable-line no-underscore-dangle\n window._locallyindexer += 1; // eslint-disable-line no-underscore-dangle\n } else {\n window._locallyindexer = 0; // eslint-disable-line no-underscore-dangle\n }\n return window._locallyindexer; // eslint-disable-line no-underscore-dangle\n }\n\n // triggered on initial variant selection change\n function initLocallyInternal(upc) { // eslint-disable-line require-jsdoc\n uniq = getIndex();\n\n // this configuration is stored in the locallyConfiguration site preference\n var config = robisWrap.data('locally-config');\n if (!config) {\n return;\n }\n\n var widgetwrap = $('<div>');\n widgetwrap.append($('<div>', { id: 'lcly-button-' + uniq, style: 'display: none;' }).html($('<a>', { id: 'lcly-link-' + uniq, href: 'https://brands.locally.com', target: '_blank' })));\n widgetwrap.append($('<script>', { id: 'lcly-script-' + uniq, async: 'async' }));\n widgetwrap.appendTo(robisWrap);\n\n config.upc = upc;\n var query = Object.keys(config).reduce(function (a, k) {\n a.push(encodeURIComponent(k) + '=' + encodeURIComponent(config[k]));\n return a;\n }, []).join('&');\n\n var endpoint = 'https://NewBalance.locally.com/stores/map.js?' + query;\n var scriptele = 'lcly-script-' + uniq;\n document.getElementById(scriptele).src = endpoint;\n robisButton.data('initialized', true);\n robisWrap.addClass('locally-' + uniq);\n }\n\n // called after every successive variant change\n function reloadLocally(upc) { // eslint-disable-line require-jsdoc\n var rel = 'lcly_reload_' + uniq;\n window[rel]({ upc: upc });\n }\n\n // Variant change handler\n productMarkup.on('product.variantselectionchange', function (e, data) {\n var prodType = data.product.productType;\n var pid = data.product.id;\n var quantity = data.product.selectedQuantity;\n\n if ((prodType === 'variant' || prodType === 'master') && quantity > 0) {\n if (!robisButton.data('initialized')) {\n initLocallyInternal(pid);\n } else {\n reloadLocally(pid);\n }\n } else {\n robisAction.removeClass(UPC_AVAILABLE).removeClass(UPC_UNAVAILABLE);\n robisAction.addClass('disabled');\n }\n\n var hasWidth = productMarkup.find('.attributes .variation-attribute.width-attribute').length > 0;\n if (hasWidth) {\n robisAction.addClass('has-width');\n }\n });\n var hasWidth = productMarkup.find('.attributes .variation-attribute.width-attribute').length > 0;\n if (hasWidth) {\n robisAction.addClass('has-width');\n }\n shippingRadioChangeEvent();\n },\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n miniCartReportingUrl: miniCartReportingUrl,\n hideFilters: hideFilters,\n handlePostCartAdd: handlePostCartAdd,\n stickyProductDescription: stickyProductDescription,\n toggleAvailabilityMessage: toggleAvailabilityMessage,\n displayFitConversion: displayFitConversion\n};\n\n$(document).ready(function () {\n if ($(gridListClass).length) {\n determineDisplayStyle();\n }\n});\n","'use strict';\n\nvar commonAttrHelper = require('./utilHelper');\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n * @param {string} attrExtension - customizable data-attr-value extension\n */\nfunction updateAttrs(attrs, $productContainer, msgs, attrExtension) {\n // Currently, the only attribute type that has image swatches is Color.\n commonAttrHelper.updateAttributes(attrs, $productContainer, msgs, attrExtension, 'normal');\n}\n\nmodule.exports = {\n updateAttrs: updateAttrs\n};\n","'use strict';\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n * @param {string} attrExtension - customizable data-attr-value extension\n * @param {string} baseAttribute - check for baseAttribute\n * @param {string} type - check for type\n */\nfunction processSwatchValues(attr, $productContainer, msgs, attrExtension, baseAttribute, type) {\n var dataAttr = '';\n if (attrExtension) {\n dataAttr = '-' + attrExtension;\n }\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data' + dataAttr + '-attr-value=\"'\n + attrValue.value + '\"]');\n var $swatchButton = $attrValue.parent();\n\n if (attrValue.selected) {\n if (attr.id === 'width') {\n $productContainer.find('[data-attr=\"width\"] .width-attribute, [data-attr=\"width\"] .width-value').removeClass('selected');\n }\n\n $attrValue.addClass('selected');\n $swatchButton.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n\n if (!attrValue.selectable) {\n $attrValue.siblings('.selected-assistive-text').append(msgs.assistiveUnavailableText);\n }\n // $swatchButton.next('.display-color-name').text(attrValue.displayValue);\n\n if (attr.id === 'style') {\n $productContainer.find('.color-display-name').show();\n $productContainer.find('.display-color-name').text(attrValue.displayValue);\n $productContainer.find('.display-color-name').attr('data-productid', attrValue.variantID);\n $productContainer.find('.product-id-value').text(attrValue.id);\n\n if (window.utag_data && (!$productContainer.find('.display-color-name').hasClass('pdp-update-event-triggerd'))) {\n var tealium = require('tealium/pages/tealium');\n var productInfo = tealium.getProductDetails(attrValue.masterProductID);\n productInfo.then(function (data) {\n var prodObj = {\n event_type: 'pdp_update',\n page_name: window.utag_data.page_name,\n adobe_user_flow: 'product details',\n item_list_name: data.category_path,\n product_name: data.product_name,\n product_brand: data.product_brand,\n product_unit_price: data.product_unit_price,\n product_sku: data.product_sku,\n product_style_number: data.product_style_number,\n product_id: data.product_master,\n adobe_product_id: data.adobe_product_id,\n product_variant_id: data.product_variant_id,\n product_master: data.product_master,\n product_category: data.product_category,\n product_subcategory: data.product_subcategory,\n product_quantity: data.product_quantity,\n product_vat: data.product_vat,\n product_gender: data.product_gender,\n product_color: window.tealiumProdColors,\n product_size: data.product_size,\n product_width: data.product_width,\n product_line: data.product_line,\n product_type: data.product_type,\n ga_action: 'Update PDP',\n ga_label: data.product_master,\n original_product_unit_price: data.original_product_unit_price,\n category_path: data.category_path\n };\n $productContainer.find('.display-color-name').addClass('pdp-update-event-triggerd');\n tealium.triggerEvent(prodObj);\n });\n }\n }\n $swatchButton.closest('.attribute').removeClass('error');\n } else {\n $attrValue.removeClass('selected');\n $swatchButton.removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n $swatchButton.next('.display-color-name').empty();\n }\n\n $attrValue.removeClass('selectable unselectable');\n $swatchButton.removeClass('selectable unselectable');\n $swatchButton.removeAttr('aria-disabled');\n\n if (type === 'bisn') {\n if ((baseAttribute !== 'width-value') || (baseAttribute === 'width-value' && attr.id === 'width')) {\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n }\n\n // Hide if not selectable\n if (baseAttribute === 'style-value' || (baseAttribute === 'size-value' && attr.id === 'width')) {\n if (attrValue.selectable) {\n $swatchButton.removeClass('d-none');\n } else {\n $swatchButton.addClass('d-none');\n }\n }\n } else {\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n $swatchButton.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\n }\n if (attr.id === 'size') {\n $swatchButton.attr('data-variantid', attrValue.variantID);\n }\n // removing the fully-oos-ind class from a swatch if the attribute fullyOOSInd is false\n if ($swatchButton.hasClass('fully-oos-ind') && !attrValue.fullyOOSInd) {\n $swatchButton.removeClass('fully-oos-ind');\n }\n });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {string} attrExtension - customizable data-attr-value extension\n */\nfunction processNonSwatchValues(attr, $productContainer, attrExtension) {\n var dataAttr = '';\n if (attrExtension) {\n dataAttr = '-' + attrExtension;\n }\n var $attr = '[data-attr=\"' + attr.id + '\"]';\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n $defaultOption.attr('value', attr.resetUrl);\n\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer\n .find($attr + ' [data' + dataAttr + '-attr-value=\"' + attrValue.value + '\"]');\n $attrValue.attr('value', attrValue.url)\n .removeAttr('disabled');\n\n if (!attrValue.selectable) {\n $attrValue.attr('disabled', true);\n }\n });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n * @param {string} attrExtension - customizable data-attr-value extension\n * @param {string} type - check for type\n * @param {string} baseAttribute - check for baseAttribute\n */\nfunction updateAttributes(attrs, $productContainer, msgs, attrExtension, type, baseAttribute) {\n // Currently, the only attribute type that has image swatches is Color.\n var attrsWithSwatches = ['style', 'size', 'width', 'cup', 'storeSizes', 'storeStyles', 'storeWidths'];\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs, attrExtension, baseAttribute, type);\n } else {\n processNonSwatchValues(attr, $productContainer, attrExtension);\n }\n });\n $('body').trigger('selectors.complete');\n}\n\nmodule.exports = {\n updateAttributes: updateAttributes\n};\n","'use strict';\r\n\r\nrequire('../components/jquery-zoom');\r\n\r\n/**\r\n * @function resetPinchZoom\r\n * @description This function is used to reset the pinch-zoomed image to its original size\r\n *\r\n * @param {Object} element DOM object reference of pinch-zoom element.\r\n */\r\nfunction resetPinchZoom(element) {\r\n element.setTransform({\r\n scale: 1,\r\n x: 0,\r\n y: 0\r\n });\r\n}\r\n\r\n/**\r\n * @function doubleTapPinchZoomHandler\r\n * @description This function is used to detect double tap on mobile devices and\r\n * reset the pinch-zoomed image to its original size\r\n *\r\n * @returns {Function} detectDoubleTap for every slide in carousel.\r\n */\r\nfunction doubleTapPinchZoomHandler() {\r\n let lastTap = 0;\r\n let timeout;\r\n\r\n return function detectDoubleTap(event) {\r\n const curTime = new Date().getTime();\r\n const tapLen = curTime - lastTap;\r\n if (tapLen < 500 && tapLen > 100) {\r\n resetPinchZoom(event.currentTarget);\r\n event.preventDefault();\r\n } else {\r\n timeout = setTimeout(() => {\r\n clearTimeout(timeout);\r\n }, 100);\r\n }\r\n lastTap = curTime;\r\n };\r\n}\r\n\r\n/**\r\n * pdp modal for pinch zoom\r\n */\r\nfunction zoomModalCall() {\r\n /**\r\n * zoom mobile function\r\n * @param {number} index - Response from the variation attributes API.\r\n */\r\n function mobileZoom(index) {\r\n if ($(window).width() <= 991) {\r\n var $zoomModalBody = $('#zoommodal .modal-body');\r\n var primaryImages = $('.primary-images').clone();\r\n var $videoElem = primaryImages.find('.carousel-video');\r\n $videoElem.remove();\r\n var selectedIndex = index || primaryImages.find('.carousel-item.active').index();\r\n primaryImages.find('.carousel-inner-zoom').find('.carousel-item').removeClass('col-6 p-3 active').addClass('carousel-item');\r\n primaryImages.find('.carousel-inner-zoom').find('.carousel-item').eq(+selectedIndex).addClass('active');\r\n primaryImages.find('.carousel-inner.carousel-desktop').not('.carousel-inner-zoom').remove();\r\n primaryImages.find('.carousel-inner.carousel-desktop.carousel-inner-zoom').removeClass('d-none');\r\n var mobilecontent = primaryImages.html();\r\n\r\n $zoomModalBody.empty();\r\n $zoomModalBody.append('<div class=\"mobile-zoom d-flex align-items-center\"></div>');\r\n $('#zoommodal .modal-body .mobile-zoom').append(mobilecontent);\r\n\r\n var $document = $(document);\r\n $document.find('#zoommodal .modal-body img').removeAttr('data-toggle');\r\n var $carousel = $document.find('#zoommodal .carousel');\r\n $carousel.attr({ id: 'zoom-modal', 'data-touch': false });\r\n $carousel.addClass('w-100');\r\n $document.find('#zoommodal .modal-body').addClass('h-100');\r\n var noOfImages = $('.carousel-inner-zoom:not(.d-none)').find('.carousel-item.zoom-image-js').length;\r\n if (noOfImages > 1) {\r\n $($carousel).append('<button class=\"carousel-control-prev\" href=\"#' + $carousel.attr('id') + '\" type=\"button\" data-label=\"prev\" data-slide=\"prev\">');\r\n $('<span class=\"sr-only\">Previous</span>').appendTo($($carousel).find('.carousel-control-prev'));\r\n $($carousel).append('<button class=\"carousel-control-next\" href=\"#' + $carousel.attr('id') + '\" type=\"button\" data-label=\"next\" data-slide=\"next\">');\r\n $('<span class=\"sr-only\">Next</span>').appendTo($($carousel).find('.carousel-control-next'));\r\n }\r\n\r\n var $carouselIndicator = $document.find('#zoom-modal .carousel-indicators li');\r\n if ($videoElem.length) {\r\n $carouselIndicator.last().remove();\r\n }\r\n $carouselIndicator.attr('data-target', '#zoom-modal');\r\n $carouselIndicator.removeClass('active');\r\n $carouselIndicator.eq(+index).addClass('active');\r\n $('#zoommodal .thumb-image .thumbnail img').each(function () {\r\n $(this).removeAttr('data-target');\r\n $(this).removeAttr('data-toggle');\r\n });\r\n\r\n if ($('#zoommodal .carousel-item').length) {\r\n /* Regex test to determine if user is on mobile */\r\n if (/Android|iPhone|iPad|iPod/i.test(navigator.userAgent)) {\r\n $('#zoommodal .carousel-item').each(function () {\r\n $(this).find('pinch-zoom').on('touchend', doubleTapPinchZoomHandler());\r\n });\r\n $carousel.on('slide.bs.carousel', function (slidIndex) {\r\n var pinchZoolEle = $($(this).find('.carousel-item')[slidIndex.from]).find('pinch-zoom')[0];\r\n if (pinchZoolEle) {\r\n resetPinchZoom(pinchZoolEle);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n mobileZoom();\r\n\r\n /**\r\n * zoom plugin call\r\n */\r\n function zoomImage() {\r\n $('.modal .large-image .zoom-image-js').zoom({ on: 'toggle' });\r\n }\r\n\r\n $('body').on('click', '.modal .large-image .zoom-image-js img.zoomImg', function (e) {\r\n e.preventDefault();\r\n $(this).toggleClass('zoom-out');\r\n });\r\n\r\n /**\r\n * zoom desktop modal\r\n */\r\n function zoomModal() {\r\n if ($(window).width() > 991) {\r\n $('pinch-zoom').each(function () {\r\n var pinchElement = $(this);\r\n pinchElement.replaceWith($(pinchElement.html()));\r\n });\r\n }\r\n window.requestAnimationFrame(function () {\r\n var thumImagesWrapper = $('.carousel-inner-zoom').clone();\r\n thumImagesWrapper.find('.carousel-video').remove();\r\n var thumbImages = thumImagesWrapper.html();\r\n\r\n /**\r\n * zoom desktop fill modal\r\n */\r\n function getModalHtmlElement() {\r\n if ($('#zoommodal').length !== 0) {\r\n $('#zoommodal').remove();\r\n }\r\n var htmlString = '<!-- Modal -->'\r\n + '<div class=\"modal zoom-modal fade\" id=\"zoommodal\" tabindex=\"-1\" role=\"dialog\">'\r\n + '<span class=\"enter-message sr-only\" ></span>'\r\n + '<div class=\"modal-dialog zoommodal-dialog\">'\r\n + '<!-- Modal content-->'\r\n + '<div class=\"modal-content\">'\r\n + '<div class=\"modal-header b-0\">'\r\n + ' <button aria-label=\"close\" type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">'\r\n + ' <span aria-hidden=\"true\">×</span>'\r\n + ' </button>'\r\n + '</div>'\r\n + '<div class=\"modal-body p-0 \"><div class=\"large-image\"></div><div class=\"thumb-image\"></div></div>'\r\n + '</div>'\r\n + '</div>'\r\n + '</div>';\r\n $('body').append(htmlString);\r\n }\r\n getModalHtmlElement();\r\n\r\n // This section builds the zoom gallery\r\n $('.primary-images .carousel-inner button').each(function () {\r\n $(this).on('click', function () {\r\n var dataIndex = $(this).find('img').attr('data-index');\r\n var count = +dataIndex + 1;\r\n var $modalLargeImage = $('#zoommodal .modal-body .large-image');\r\n // This is the container for the zoom modal thumbnails\r\n var $modalThumbImage = $('#zoommodal .modal-body .thumb-image');\r\n mobileZoom(parseInt(dataIndex, 10));\r\n window.requestAnimationFrame(function () {\r\n $(document).find('#zoom-modal').carousel({ touch: false });\r\n });\r\n $modalLargeImage.empty();\r\n $modalThumbImage.empty();\r\n $modalLargeImage.append(thumbImages);\r\n $modalThumbImage.append(thumbImages);\r\n\r\n // Remove the unneeded picture element around the thumbnail images\r\n $('#zoommodal .thumb-image .carousel-item.zoom-image-js picture').contents().unwrap();\r\n // Remove the anchor tags around the thumbnail images and large image container\r\n $('#zoommodal .thumb-image .carousel-item.zoom-image-js a').contents().unwrap();\r\n $('#zoommodal .large-image .carousel-item.zoom-image-js a').contents().unwrap();\r\n\r\n $('#zoommodal .modal-body .thumb-image img').wrapAll('<div class=\"thumbnail\"></div>');\r\n $('#zoommodal .thumb-image .thumbnail img').each(function () {\r\n $(this).removeAttr('data-target');\r\n $(this).removeAttr('data-toggle');\r\n $(this).wrap('<button></button>');\r\n });\r\n $('#zoommodal .thumb-image img[data-index=' + dataIndex + ']').addClass('active');\r\n $('#zoommodal .large-image img[data-index=' + dataIndex + ']').first().addClass('active');\r\n $('#zoommodal .large-image .carousel-item:nth-child(' + count + ')').addClass('active zoom-in');\r\n $('#zoommodal .thumb-image .zoom-image-js').first().addClass('active');\r\n $modalLargeImage.removeClass('active').first().addClass('active zoom-in');\r\n zoomImage();\r\n });\r\n });\r\n });\r\n }\r\n zoomModal();\r\n\r\n // Adding accesbility keyboard handler for carousel indicators\r\n $('ol.carousel-indicators').on('keyup', function (e) {\r\n if (e.key === 'Enter' && $(window).width() < 991 && e.target.tagName.toLowerCase() === 'ol') {\r\n const foundElement = $(e.target.parentElement).find('.carousel-item.zoom-image-js.active img');\r\n foundElement[0].click();\r\n }\r\n });\r\n\r\n // This event handler - enables the thumbnail to switch the currently zoomed image\r\n $(document).on('click', '#zoommodal .thumb-image .thumbnail button', function () {\r\n var imgIndex = $('#zoommodal .thumb-image .thumbnail button').index(this);\r\n var count = imgIndex + 1;\r\n // Toggling the red border on the thumbnails\r\n $('#zoommodal .thumb-image .thumbnail button img').removeClass('active');\r\n $(this).children().addClass('active');\r\n // These lines toggle the active class on the large zoomed image\r\n $('#zoommodal .large-image .carousel-item').removeClass('active zoom-in');\r\n $('#zoommodal .large-image .carousel-item:nth-child(' + count + ')').addClass('active zoom-in');\r\n });\r\n\r\n $(window).resize(function () {\r\n mobileZoom();\r\n });\r\n} zoomModalCall();\r\n\r\nmodule.exports = {\r\n zoomModalCall: zoomModalCall\r\n};\r\n","'use strict';\n\nconst BREAKPOINTS = {\n mobile: {\n query: '(max-width:992px)',\n index: 1\n },\n smallDesktop: {\n query: '(min-width:992px) and (max-width: 1200px)',\n index: 2\n },\n largeDesktop: {\n query: '(min-width: 1200px)',\n index: 3\n }\n};\n\n/**\n * Check if we are on a mobile breakpoint.\n * @returns {boolean} - True or false.\n */\nfunction isMobile() {\n return window.matchMedia(BREAKPOINTS.mobile.query).matches;\n}\n\n/**\n * Check if we are on a small desktop breakpoint.\n * @returns {boolean} - True or false.\n */\nfunction isSmallDesktop() {\n return window.matchMedia(BREAKPOINTS.smallDesktop.query).matches;\n}\n\n/**\n * Check if we are on a large desktop breakpoint.\n * @returns {boolean} - True or false.\n */\nfunction isLargeDesktop() {\n return window.matchMedia(BREAKPOINTS.largeDesktop.query).matches;\n}\n\n/**\n * Checking if the element is in viewport.\n * @param {HTMLElement} element - The DOM Element to evaluate.\n * @param {number} toleratedMargin - Tolerated margin.\n * @returns {boolean} - If object is in view.\n */\nfunction isInViewport(element, toleratedMargin = 0) {\n if (!element) {\n return false;\n }\n\n const viewPortMin = 0 - toleratedMargin;\n const viewPortMax = window.innerHeight + toleratedMargin;\n const elementRect = element.getBoundingClientRect();\n const elementMin = elementRect.top;\n const elementMax = elementRect.top + elementRect.height;\n\n if (elementMin > viewPortMin && elementMin < viewPortMax) {\n return true;\n }\n\n return elementMax > viewPortMin && elementMax < viewPortMax;\n}\n\nmodule.exports = {\n isMobile,\n isSmallDesktop,\n isLargeDesktop,\n isInViewport\n};\n","'use strict';\n\n// var zipCodeJSON = require('../../../config/zipCodes.json');\nmodule.exports = {\n isMobile: function () {\n var mobileAgentHash = ['mobile', 'tablet', 'phone', 'ipad', 'ipod', 'android', 'blackberry', 'windows ce', 'opera mini', 'palm'];\n var index = 0;\n var isMobile = false;\n var userAgent = navigator.userAgent.toLowerCase();\n\n while (mobileAgentHash[index] && !isMobile) {\n isMobile = userAgent.indexOf(mobileAgentHash[index]) >= 0;\n index += 1;\n }\n return isMobile;\n },\n loadUrl(container) {\n var loadPromises = [];\n var loadElements = container.querySelectorAll('.js-load-url');\n loadElements.forEach(function (/** @type {HTMLElement} */ element) {\n var url = element.dataset.url;\n loadPromises.push(fetch(url, {\n mode: 'same-origin',\n headers: {\n 'Content-Type': 'text/html'\n }\n }).then(function (response) {\n return response.text();\n }).then(function (html) {\n // eslint-disable-next-line no-param-reassign\n element.innerHTML = html;\n Array.from(element.querySelectorAll('script')).forEach(oldScript => {\n var newScript = document.createElement('script');\n Array.from(oldScript.attributes)\n .forEach(attr => newScript.setAttribute(attr.name, attr.value));\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n }).catch(function () {\n window.location.reload();\n }));\n });\n // eslint-disable-next-line no-undef\n return Promise.all(loadPromises);\n },\n isZipCodeValid: function (postalCode, country, zipCodeFieldSelector, zipCodeJSON) {\n var result;\n var arrayOfCountries = Object.keys(zipCodeJSON);\n var selectedCountry = arrayOfCountries.find(function (countryCode) {\n return countryCode === country;\n });\n var regEx = zipCodeJSON[selectedCountry].regex;\n var regExSelectedCountry = new RegExp(regEx);\n result = regExSelectedCountry.exec(postalCode);\n\n if (!result) {\n var errorMsg = $('#zipCodeErrorMsg').val();\n $(zipCodeFieldSelector).addClass('is-invalid').siblings('.invalid-feedback').html(errorMsg);\n $('body').trigger('checkout:enableButton', '.next-step-button button');\n }\n if (result) {\n $(zipCodeFieldSelector).removeClass('is-invalid').siblings('.invalid-feedback').empty();\n }\n\n return result;\n },\n initalizePaypal: function () {\n var loadScript = require('./common/loadScript');\n loadScript('//www.paypalobjects.com/api/checkout.min.js', 'paypal').then(function () {\n import(/* webpackChunkName: \"paypal\" */ './paypalUtils.js').then(function () {\n import(/* webpackChunkName: \"paypal\" */ './paypalMFRA.js').then(function () {\n if (window.paypalUtils) {\n window.paypalUtils.initalizePaypal();\n }\n });\n });\n });\n },\n capitalizeFirstLetter: function (string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n },\n /**\n * appends params to a url\n * @param {string} url - Original url\n * @param {Object} params - Parameters to append\n * @returns {string} result url with appended parameters\n */\n appendToUrl: function (url, params) {\n var newUrl = url;\n newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n }).join('&');\n\n return newUrl;\n },\n\n checkForSessionLogout: function (data) {\n if (data) {\n if (data.forcedLogout) {\n $('#concurrent-sessions-modal').modal('show').on('hidden.bs.modal', function () {\n $.spinner().start();\n window.location.reload();\n });\n }\n } else if ($('[data-forcedlogout=\"true\"]').length) {\n $('#concurrent-sessions-modal').modal('show');\n }\n },\n\n /**\n * Formats the given amount to display with or without tax included text.\n * @param {number} amount - The amount to be formatted.\n * @returns {string} The formatted amount, with or without tax included text.\n */\n getAmountToDisplay: function (amount) {\n if (!window.sitePrefs.showTaxIncludedText) {\n return amount;\n }\n\n var taxIncludedText = window.sitePrefs.resources.taxIncludedText;\n if (amount.includes(taxIncludedText)) {\n return amount;\n }\n\n return `${amount} ${window.sitePrefs.resources.taxIncludedText}`;\n },\n TAB_KEY_CODE: 9,\n ENTER_KEY_CODE: 13,\n ESC_KEY_CODE: 27,\n UP_ARROW_KEY_CODE: 38,\n DOWN_ARROW_KEY_CODE: 40\n};\n"],"sourceRoot":""}