{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_custom_core/cartridge/client/default/js/stockinstore.js","webpack:///./cartridges/app_custom_core/cartridge/client/default/js/product/base.js","webpack:///./cartridges/int_capency_sfra_custom/cartridge/client/default/js/capency/email/capency.verify.email.js","webpack:///./dependencies/int_capency_sfra/cartridge/client/default/js/capency/email/capency.verify.email.js","webpack:///./dependencies/storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///./dependencies/storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///./cartridges/int_capency_sfra_custom/cartridge/client/default/js/capency/email/serverActions/callWebService.js","webpack:///./cartridges/app_custom_core/cartridge/client/default/js/product/wishlistHeart.js","webpack:///./cartridges/app_custom_core/cartridge/client/default/js/giftCardProduct.js","webpack:///./cartridges/app_custom_core/cartridge/client/default/js/product/giftCardProduct.js","webpack:///./dependencies/plugin_wishlists/cartridges/plugin_wishlists/cartridge/client/default/js/product/wishlist.js","webpack:///./dependencies/int_capency_sfra/cartridge/client/default/js/capency/email/capemail.js","webpack:///./cartridges/int_capency_sfra_custom/cartridge/client/default/js/capency/email/formUtils.js","webpack:///./cartridges/int_capency_sfra_custom/cartridge/client/default/js/capency/email/function.js","webpack:///./dependencies/int_capency_sfra/cartridge/client/default/js/capency/email/function.js","webpack:///./cartridges/int_capency_sfra_custom/cartridge/client/default/js/capencyHelper.js","webpack:///./dependencies/storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///./dependencies/storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js","webpack:///./cartridges/app_custom_core/cartridge/client/default/js/product/attributes.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","getStockInStore","storeId","productId","url","$stockInStoreBlock","$","urlId","length","data","encodeURIComponent","val","spinner","start","ajax","method","dataType","success","error","renderedTemplate","html","trigger","stop","base","attributesLogic","stockInStoreHelper","getQuantitySelector","$el","quantitySelected","closest","find","quantitySelectedModal","quantitySelectedPDP","undefined","getQuantitySelected","chooseBonusProducts","bonusUrl","remove","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","uuid","pliUUID","addToCartUrl","pageSize","labels","selectprods","append","response","$html","parsedHtml","body","parseHTML","footer","children","empty","text","enterDialogMessage","closeButtonText","modal","getOptions","$productContainer","options","map","$elOption","this","urlValue","selectedValueId","optionId","toArray","JSON","stringify","handleVariantResponse","isVaraint","paramID","newValue","urlObj","params","isChoiceOfBonusProducts","parents","product","variationAttributes","attrs","msgs","attrsWithSwatches","forEach","attr","indexOf","id","values","attrValue","$attrValue","selected","addClass","siblings","assistiveSelectedText","removeClass","removeAttr","selectable","processSwatchValues","$attr","$defaultOption","$selectedBisEnabledAttribute","resetUrl","available","toggleClass","$attributesArea","hasClass","processNonSwatchValues","updateAttrs","resources","productType","parent","readyToOrder","imgs","carousel","carouselId","alt","parseInt","index","title","appendTo","first","detach","createCarousel","images","large","replaceWith","price","hasStandardDiscount","standard","sales","hasClubDiscount","club","promotionsHtml","availabilityValue","availabilityMessages","availability","messages","message","info_selectforstock","updateAvailability","attributes","attributeGroup","ID","attribute","label","getAttributesHtml","refLabel","$eReservationIframe","urlIframe","newUrl","URL","URLSearchParams","search","set","toString","attributeSelect","currentTarget","selectedValueUrl","className","container","optionsHtml","updateOptions","quantities","quantity","join","updateQuantities","toggleOverlay","show","on","evt","disable_addToCart","initEvents","$body","e","$carousel","$productVideo","videoInfo","videoIndex","$videoEl","clone","each","el","is","slick","Additional","image","$anchor","$img","class","src","productName","modalURL","slidesToShow","slidesToScroll","dots","focusOnSelect","infinite","arrows","responsive","breakpoint","settings","reloadCarousel","$fpePopinLink","EAN","updateSelectableVariationAttributes","addToCart","document","pid","pidsObj","setPids","push","qty","childProducts","productGtm","form","is_error","newBonusDiscountLineItem","keys","$tabContent","setTimeout","handlePostCartAdd","reportingURL","click","resultPli","cart","items","item","UUID","smallImageUrl","small","smallImageAlt","colorText","displayName","displayValue","sizeText","selectAttribute","preventDefault","window","capency","checkEmailPropertyResult","$emailSelector","Promise","resolve","reject","urlCapCheckEmailProp","capData","sMail","type","result","returnCode","sMessage","next","focus","Error","mail","finalDatasource","autocomplete","minLength","autoFocus","source","request","select","event","ui","$this","showCapencyVerifyEmailResult","currentEmail","$containerModal","$msgReturn","$emailError","include","focusHelper","getPidValue","$swatchButton","parseHtml","miniCartReportingUrl","methods","editBonusProducts","focusChooseBonusProductModal","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","focusParams","containerSelector","firstElementSelector","lastElementSelector","setTabNextFocus","colorAttribute","messageType","selectBonusProduct","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeBonusProduct","$selected","count","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","option","errorMessage","msgSuccess","location","reload","urlCapAddressSearchEmail","SearchMailCivWS","async","email","fname","lname","capEmailData","sInput","sNom","sPrenom","err","displayMessageAndChangeIcon","icon","msg","toggleWishlist","stopPropagation","routeType","removeFromWishlistUrl","optionVal","notAddedToWishlist","removeFromWishlist","processInclude","capencyHelper","capencyVerifyEmail","fillModalElement","valideName","match","valideText","validateField","field","impact","isValid","$currentField","currentFieldType","currentFieldValue","parseFloat","hide","validationMessage","validateFormular","prop","formSubmit","args","action","$form","jsonError","responseJSON","maxLimitError","$addGiftCardBtn","giftCardAmount","recipientName","$recipientEmail","recipientEmail","recipientConfirmEmail","isCapencyEnabled","then","apply","ready","initProductDetailLogic","toggleAttribute","selectAttributeValue","showProductDetailImageModal","target","displayMessage","button","status","addToWishlist","$iscapEmailEnable","initCapEmailByForms","keyTimer","capPEmailConfiguration","capencyFields","setConfigToCapEmail","formID","isEditableForm","$formSelector","config","getConfig","listItem","emailFieldsIDs","selectorEmail","$field","formChild","clearTimeout","EmailID","callProcessEmailFlow","keyTimer2","formIdListToInit","listFormWithCapAddress","getIdForms","String","includes","deleteAutoCompleteBrowser","callWebService","urlCapEmailConfig","capConfiguration","parse","currentFormConfig","configCurrentForm","$formID","idForm","$firstNameSelector","firstName","$lastNameSelector","lastName","searchResulat","dataSourceEmail","capAddressConfig","editableT","currentForms","filter","formEdit","editable","ids","obj","setFieldValid","$selector","state","setRequiredError","resetModifiedFlagOnFields","fields","checkFieldsModified","some","enabled","$iscapPhoneEnable","$iscapAddressEnable","removeFieldValidationResults","validatePhone","$phoneSelector","fillZipCodeWithAllCapData","$zipSelector","isAddressFormModified","isEmailFormModified","resetModifiedFlagOnAddressFields","resetModifiedFlagOnEmailFields","keyCode","firstFocusableEl","lastFocusableEl","nextToLastElementSelector","linkElements","shiftKey","updateAddToCartEnableDisableOtherElements","enableOrDisable","updateAttributesAndDetails","attributesHtml","shortDescription","longDescription","showSpinner","updateAttribute","eq","updateAddToCart","enable","every","allAvailable","allReady","sizeChart","$prodSizeChart","content","$sizeChart","has","copyProductLink","$temp","execCommand","$target","showAction","nextValue","attributeID","$variationAttributes","selectorToHide","$elmts","selector","reset","isCompatibleShippingMethod","$rootContainer","attrDataAttrID","attrDataAttrValue","attrDataAttrURL","attrDataColorSuffix","attributeValue","attributeColorSuffix","attributeDisplayValue","attributeURL","$container","$attributesElmnts","$toggleContainer","$selectedColor","$updateColorTab","$quickViewModal","selectedSizeHtml","valueAssociated"],"mappings":"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","file":"default/js/giftCardProduct.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 296);\n","'use strict';\n\n/**\n * Method to refresh stock in stock\n * @param {string} storeId the store id\n * @param {string} productId the product id\n * @param {string} url url\n */\nfunction getStockInStore(storeId, productId, url) {\n var $stockInStoreBlock = $('.js-stock-in-stock-block');\n var urlId = (url && url.length > 0 ? url : $stockInStoreBlock.data('service-url')) + '?storeId=' + storeId + '&productId=' + encodeURIComponent(productId);\n\n $('#currentStoreId').val(storeId);\n $('#currentProductId').val(productId);\n\n $.spinner().start();\n $.ajax({\n url: urlId,\n method: 'GET',\n dataType: 'json',\n success: function (data) {\n if (data.error == null && data.renderedTemplate && data.renderedTemplate.length > 0) {\n $stockInStoreBlock.html(data.renderedTemplate);\n $('body').trigger('storedrawer:reinit');\n }\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\nmodule.exports = {\n getStockInStore: getStockInStore\n};\n","'use strict';\n\nconst base = require('base:product/base');\nconst attributesLogic = require('./attributes');\nvar stockInStoreHelper = require('../stockinstore');\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 var pid;\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $($el).closest('.product-detail').find('.product-id').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 var quantitySelected;\n if ($el && $('.set-items').length) {\n quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n } else if ($el && $('.product-bundle').length) {\n var quantitySelectedModal = $($el).closest('.modal-footer').find('.quantity-select');\n var quantitySelectedPDP = $($el).closest('.bundle-footer').find('.quantity-select');\n if (quantitySelectedModal.val() === undefined) {\n quantitySelected = quantitySelectedPDP;\n } else {\n quantitySelected = quantitySelectedModal;\n }\n } else {\n quantitySelected = $('.quantity-select');\n }\n return quantitySelected;\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 * 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 = $('
').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 $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = ''\n + '
'\n + ''\n + '
'\n + ''\n + '
'\n + '
'\n + ' ' + data.labels.selectprods + ''\n + ' '\n + '
'\n + '
'\n + '
'\n + '
'\n + '
'\n + '
';\n $('body').append(htmlString);\n $('.modal-body').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 $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n* Handles post cart add response\n* @param {Object} response - response from post cart add\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 } else if ($('.wishlist-header').length === 0) {\n if ($('.quick-view-add-to-cart-messages').length === 0) {\n var $tabContent = $('.tab-content');\n if ($tabContent.length !== 0) {\n $tabContent.append('
');\n } else if ($('.product-wrapper').length !== 0) {\n $('.product-wrapper').append('
');\n }\n }\n if ($('.quick-view-add-to-basket-alert').length === 0) {\n $('.quick-view-add-to-cart-messages').append(\n '
'\n + response.message\n + '
'\n );\n }\n\n setTimeout(function () {\n $('.quick-view-add-to-cart-messages').remove();\n }, 3000);\n }\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('.product-id').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$('body').on('product:handle-error', function (evt, data) {\n if (data.disable_addToCart) {\n $('button.add-to-cart').attr('disabled', 'disabled');\n $('button.add-to-cart-global').attr('disabled', 'disabled');\n $('.alert-incompatible-shipping-methods').removeClass('d-none').show();\n $('.alert-incompatible-shipping-methods-holder').append('
');\n $('.alert-incompatible-shipping-methods').html($('#incompatible-shipping-methods-message-holder').html());\n }\n});\n\n/**\n* Initializes events for product detail page\n*/\nfunction initEvents() {\n $(function () {\n const $body = $('body');\n $body.on('product:afterAttributeSelect', function (e, response) {\n $body.find('.product-detail').attr('data-pid', response.data.product.id);\n $body.find('#editWishlistProductModal .product-quickview').attr('data-pid', response.data.product.id);\n reloadCarousel(response);\n\n var $fpePopinLink = $body.find('.fpe-popin-link');\n if ($fpePopinLink.length) {\n $fpePopinLink.attr('data-ean', response.data.product.EAN);\n }\n });\n $('body').on('product:updateSelectableAttribute', function (e, response) {\n attributesLogic.updateSelectableVariationAttributes(response.data.product, response.container);\n });\n });\n}\n\n/**\n* Reloads the carousel with the product images from the response\n* @param {Object} response - the response object from the AJAX call\n*/\nfunction reloadCarousel(response) {\n const $carousel = $('.detail-slider-nav');\n\n // cache existing video if there is any\n let $productVideo = $carousel.find('.product-video');\n\n let videoInfo = {\n videoIndex: 1\n };\n\n if ($productVideo.length) {\n videoInfo.$videoEl = $productVideo.closest('span').clone();\n videoInfo.videoIndex = $productVideo.closest('.slick-slide').data('slick-index');\n }\n\n // delete carousel\n $carousel.each((i, el)=> {\n let $el = $(el);\n if ($el.is('.slick-initialized')) {\n $el.slick('unslick');\n }\n });\n\n // remove children\n $carousel.empty();\n\n // populate children\n const product = response.data.product;\n const images = product.images.Additional;\n for (let i = 0; i < images.length; i++) {\n let image = images[i];\n let $anchor = $('');\n let $img = $('');\n $img.attr({\n class: 'detail-image lazyload',\n src: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==',\n 'data-src': image.url,\n alt: image.alt || product.productName,\n title: image.title || product.productName\n });\n $anchor.attr({\n class: 'product-detail-image-modal ajax-cbo',\n 'data-cbo': product.modalURL\n });\n\n if (videoInfo.$videoEl && videoInfo.videoIndex === i) {\n $carousel.append(videoInfo.$videoEl);\n }\n\n $anchor.append($img);\n $carousel.append($anchor);\n }\n // create carousel\n const options = {\n slidesToShow: 1,\n slidesToScroll: 1,\n dots: true,\n focusOnSelect: true,\n infinite: false,\n arrows: true,\n responsive: [\n {\n breakpoint: 544,\n settings: {\n arrows: false\n }\n }\n ]\n };\n $carousel.slick(options);\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('.bonus-product-item').length <= 0) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"'\n + attrValue.value + '\"]');\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n\n if (attrValue.url) {\n $attrValue.attr('data-url', attrValue.url);\n $attrValue.attr('value', attrValue.url);\n } else {\n $attrValue.removeAttr('data-url');\n $attrValue.removeAttr('value');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable');\n\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\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 {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\n let $attr = '[data-attr=\"' + attr.id + '\"]';\n let $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\n let $selectedBisEnabledAttribute = null;\n\n $defaultOption.attr('value', attr.resetUrl);\n\n attr.values.forEach(function (attrValue) {\n let $attrValue = $productContainer\n .find($attr + ' [data-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 // scope out selected attribute if back in stock icon is needed on quickview tab\n if (attrValue.selected && !attrValue.available) {\n $selectedBisEnabledAttribute = $attrValue;\n }\n\n // handle bis icon\n $attrValue.closest('.circle-attribute').find('.attr-bis-icon').toggleClass('d-none', !(attrValue.selectable && !attrValue.available));\n });\n\n // handle bis icon on quickview tabs\n let $attributesArea = $productContainer.find('.attributes-area div[data-attr=\"orc_size\"]');\n\n if ($productContainer.hasClass('product-quickview') && $selectedBisEnabledAttribute && $selectedBisEnabledAttribute.length) {\n $attributesArea.find('.attr-bis-icon').toggleClass('d-none', false);\n } else {\n $attributesArea.find('.attr-bis-icon').toggleClass('d-none', true);\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 {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n // Currently, the only attribute type that has image swatches is Color.\n var attrsWithSwatches = ['orc_color'];\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs);\n } else {\n processNonSwatchValues(attr, $productContainer);\n }\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 {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n var carousel = $productContainer.find('.carousel');\n $(carousel).carousel('dispose');\n var carouselId = $(carousel).attr('id');\n $(carousel).empty().append('
    ' + $(carousel).data('prev') + '' + $(carousel).data('next') + '');\n for (var i = 0; i < imgs.length; i++) {\n $('
    \"'
    ').appendTo($(carousel).find('.carousel-inner'));\n $('
  1. ').appendTo($(carousel).find('.carousel-indicators'));\n }\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, a[class^=\"carousel-control-\"]')).detach();\n }\n $(carousel).carousel();\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\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 var availabilityValue = '';\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = '
  2. ' + response.resources.info_selectforstock + '
  3. ';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '
  4. ' + message + '
  5. ';\n });\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 * 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 var html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '
    ' + attribute.label + ': '\n + attribute.value + '
    ';\n });\n }\n });\n\n return html;\n}\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('.choose-bonus-product-dialog').length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n // Update primary images\n var primaryImageUrls = response.product.images.large;\n createCarousel(primaryImageUrls, $productContainer);\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.prices .price', $productContainer).length\n ? $('.prices .price', $productContainer)\n : $('.prices .price');\n $priceSelector.replaceWith(response.product.price.html);\n let price = response.product.price;\n let hasStandardDiscount = price.standard && price.standard.sales && price.standard.sales.value;\n let hasClubDiscount = price.club && price.club.sales && price.club.sales.value;\n if (hasStandardDiscount || hasClubDiscount) {\n $('.product-badge.discount-label').removeClass('d-none');\n } else {\n $('.product-badge.discount-label').addClass('d-none');\n }\n }\n\n // Update promotions\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n updateAvailability(response, $productContainer);\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:visible, button.add-to-cart-global:visible, button.update-cart-product-global:visible, button.button-cart-mailmeback:visible').trigger('product:updateAddToCart', {\n product: response.product, $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n }\n\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\n // Update ref label\n $productContainer.find('.reference').empty()\n .html(response.product.refLabel);\n\n // update e-reservation iframe with new product id\n if ($('#eReservation').length) {\n var $eReservationIframe = $('#eReservation iframe');\n var urlIframe = $eReservationIframe.attr('src');\n var newUrl = updateIFrameSourceUrl(urlIframe, 'productID', response.product.id);\n\n // Set the new URL to the iframe\n $eReservationIframe.attr('src', newUrl);\n }\n}\n\n/**\n* Updates the value of a specified query parameter in a given URL and returns the updated URL as a string.\n*\n* @param {string} url - The original URL to be updated.\n* @param {string} paramID - The name of the query parameter to update.\n* @param {string} newValue - The new value to set for the specified query parameter.\n* @returns {string} The updated URL with the modified query parameter.\n*/\nfunction updateIFrameSourceUrl(url, paramID, newValue) {\n var urlObj = new URL(url);\n var params = new URLSearchParams(urlObj.search);\n\n // Update the parameter\n params.set(paramID, newValue);\n\n // Construct the new URL\n urlObj.search = params.toString();\n return urlObj.toString();\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* Handles the selection of an attribute\n* @param {Object} currentTarget - the selected attribute element\n* @param {Object} $productContainer - the product container element\n*/\nfunction attributeSelect(currentTarget, $productContainer) {\n const selectedValueUrl = currentTarget.value;\n const className = currentTarget.className;\n\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $('body').trigger('product:afterAttributeSelect',\n { data: data, container: $productContainer });\n\n if (className.indexOf('select-orc_color') > -1) {\n $('body').trigger('product:updateSelectableAttribute',\n { data: data, container: $('.attribute-values[data-attr=\"orc_size\"]') });\n } if (className.indexOf('select-orc_size') > -1) {\n $('body').trigger('product:updateSelectableAttribute',\n { data: data, container: $('.attribute-values[data-attr=\"orc_color\"]') });\n }\n\n // Update stock in store if currentStoreId is available\n if ($('#currentStoreId').length && typeof $('#currentStoreId').val() !== 'undefined') {\n stockInStoreHelper.getStockInStore($('#currentStoreId').val(), data.product.id);\n }\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n}\n\n/**\n * Toggles the overlay by adding or removing necessary classes from the elements.\n * @param {boolean} show - If true, it adds the classes; if false, it removes them.\n */\nfunction toggleOverlay(show) {\n $('.added-to-cart-popup').toggleClass('show', show);\n $('body').toggleClass('overlay-active', show);\n $('.modal-background').toggleClass('active', show);\n}\n\n/**\n * Initializes the added to cart modal by toggling the overlay and setting up the close button click event.\n */\nfunction initAddedToCartModal() {\n toggleOverlay(true);\n\n $('.added-to-cart-popup__close').click(function () {\n toggleOverlay(false);\n });\n}\n\nmodule.exports = {\n ...base,\n initEvents: initEvents(),\n addToCart: function () {\n $(document).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 $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find('.product-id').text(),\n qty: $(this).find('.quantity-select').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('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var productGtm = $('#quickViewModal').data('productGtm') || $('.product-detail').data('productGtm');\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this)) || 1,\n productGtm: JSON.stringify(productGtm)\n };\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n if (data.is_error || data.error) {\n $('body').trigger('product:handle-error', data);\n } else {\n handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n\n miniCartReportingUrl(data.reportingURL);\n initAddedToCartModal();\n\n const resultPli = data.cart.items.find(item => item.UUID === data.pliUUID);\n\n if (resultPli) {\n const { images, variationAttributes, productName } = resultPli;\n const smallImageUrl = images.small[0].url;\n const smallImageAlt = images.small[0].alt;\n\n $('.added-to-cart-popup__product-detail .js-product-image')\n .attr({ src: smallImageUrl, alt: smallImageAlt });\n $('.added-to-cart-popup__product-detail .js-product-name').empty().append(productName);\n\n if (variationAttributes[0]) {\n const colorText = `${variationAttributes[0].displayName} : ${variationAttributes[0].displayValue}`;\n $('.added-to-cart-popup__product-detail .js-product-color').empty().append(colorText);\n }\n\n if (variationAttributes[1]) {\n const sizeText = `${variationAttributes[1].displayName} : ${variationAttributes[1].displayValue}`;\n $('.added-to-cart-popup__product-detail .js-product-size').empty().append(sizeText);\n }\n }\n }\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n },\n\n selectAttribute: function () {\n $(document).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('.product-detail');\n }\n attributeSelect(e.currentTarget, $productContainer);\n });\n }\n};\n","'use strict';\n\nconst base = require('capencyBase/capency/email/capency.verify.email');\n\n/**\n *\n * @param {*} result\n * @param {*} callback\n */\nwindow.capency = {};\n\n/**\n* Checks the email property result by making an AJAX request and handles the response.\n* Provides autocomplete suggestions if applicable and manages validation feedback.\n*\n* @param {jQuery} $emailSelector - jQuery object representing the email input field.\n* @returns {Promise} A promise that resolves to true if the email is valid or suggestions are provided,\n* and rejects with an error message if the email is invalid.\n* @description\n* This function sends a GET request to a specified URL to check the validity of an email address.\n* If the email is invalid, it displays an error message and focuses on the input field.\n* If suggestions are available, it initializes an autocomplete feature on the input field.\n* The function returns a promise that resolves if the email is valid or suggestions are provided,\n* and rejects if there is an error in the validation process.\n*/\nfunction checkEmailPropertyResult($emailSelector) {\n return new Promise((resolve, reject) => {\n if (!$emailSelector.data('isModified')) {\n if ($emailSelector.data('isError')) {\n $emailSelector.addClass('is-invalid');\n $emailSelector.toggleClass('autocomplete-field-selected', false);\n $emailSelector.focus();\n reject(new Error($emailSelector.next('.invalid-feedback').html()));\n } else {\n resolve(true);\n }\n return;\n }\n\n var urlCapCheckEmailProp = $('#url-cap-email-check-email-prop').val();\n var capData = {\n sMail: $emailSelector.val()\n };\n\n $.ajax({\n url: urlCapCheckEmailProp,\n type: 'GET',\n data: capData,\n success: function (result) {\n if (result.returnCode && result.returnCode > 0) {\n if (result.sMessage) {\n $emailSelector.next('.invalid-feedback').empty().html(result.sMessage).show();\n $emailSelector.addClass('is-invalid');\n $emailSelector.toggleClass('autocomplete-field-selected', false);\n $emailSelector.focus();\n $emailSelector.data('isModified', false);\n $emailSelector.data('isError', true);\n reject(new Error(result.sMessage));\n } else if (result.mail) {\n var finalDatasource = $.map(result.mail, function (item) {\n return {\n label: item.sMail,\n value: item.sMail\n };\n });\n\n $emailSelector.autocomplete({\n create: function () {\n $(this).attr('autocomplete', 'off');\n },\n minLength: 0,\n autoFocus: true,\n source: function (request, response) {\n response(finalDatasource);\n },\n select: function (event, ui) {\n let $this = $(this);\n $this.next().html(ui.item.sMail);\n $this.toggleClass('autocomplete-field-selected', true);\n $this.removeClass('is-invalid');\n $this.data('isModified', true);\n $(this).next('.invalid-feedback').empty();\n resolve(true);\n }\n }).focus(function () {\n $emailSelector.autocomplete('search').focus();\n });\n\n if (result.returnCode === 2) {\n $emailSelector.autocomplete('search').focus();\n }\n }\n } else {\n $emailSelector.data('isModified', false);\n $emailSelector.data('isError', false);\n resolve(true);\n }\n },\n error: function (error) {\n reject(new Error('Error during email verification: ' + error));\n }\n });\n });\n}\n\nbase.checkEmailPropertyResult = checkEmailPropertyResult;\n\nmodule.exports = base;\n","/**\n * \n * @param {*} result \n * @param {*} callback \n */\nwindow.capency = {}\n\n/**\n * @function showCapencyVerifyResult show poping verify address \n * @param {result} \n * @param {callback} \n*/\nfunction showCapencyVerifyEmailResult(result, currentEmail) {\n\n if (result && result.returnCode === 1) {\n if (result.sMessage) {\n var $emailSelector = $('input[name$=\"_email\"]');\n $emailSelector.next('.invalid-feedback').empty().html(result.sMessage).show();\n $emailSelector.addClass(\"is-invalid\");\n $emailSelector.attr('data-validate-email',false);\n $.spinner().stop();\n }\n return false;\n }\n\n if (result && result.returnCode !== 0 && result.returnCode !== 1) {\n var $containerModal = $(\".model-body-capmail\");\n var $msgReturn = $containerModal.find(\".address-msg\");\n var $emailError = $containerModal.find(\".address-error\");\n\n if (result.sMessage) {\n $msgReturn.empty().html(result.sMessage);\n $emailError.empty().html(currentEmail);\n $('#verifyEmail').modal('show');\n $.spinner().stop();\n }\n }\n}\n\nmodule.exports = {\n showCapencyVerifyEmailResult: showCapencyVerifyEmailResult\n}","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","'use strict';\nvar focusHelper = require('../components/focus');\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 var pid;\n\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $($el).closest('.product-detail').find('.product-id').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 var quantitySelected;\n if ($el && $('.set-items').length) {\n quantitySelected = $($el).closest('.product-detail').find('.quantity-select');\n } else if ($el && $('.product-bundle').length) {\n var quantitySelectedModal = $($el).closest('.modal-footer').find('.quantity-select');\n var quantitySelectedPDP = $($el).closest('.bundle-footer').find('.quantity-select');\n if (quantitySelectedModal.val() === undefined) {\n quantitySelected = quantitySelectedPDP;\n } else {\n quantitySelected = quantitySelectedModal;\n }\n } else {\n quantitySelected = $('.quantity-select');\n }\n return quantitySelected;\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 * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processSwatchValues(attr, $productContainer, msgs) {\n attr.values.forEach(function (attrValue) {\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\n attrValue.value + '\"]');\n var $swatchButton = $attrValue.parent();\n\n if (attrValue.selected) {\n $attrValue.addClass('selected');\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n } else {\n $attrValue.removeClass('selected');\n $attrValue.siblings('.selected-assistive-text').empty();\n }\n\n if (attrValue.url) {\n $swatchButton.attr('data-url', attrValue.url);\n } else {\n $swatchButton.removeAttr('data-url');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable');\n\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\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 {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction processNonSwatchValues(attr, $productContainer) {\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-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 {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n // Currently, the only attribute type that has image swatches is Color.\n var attrsWithSwatches = ['color'];\n\n attrs.forEach(function (attr) {\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\n processSwatchValues(attr, $productContainer, msgs);\n } else {\n processNonSwatchValues(attr, $productContainer);\n }\n });\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 var availabilityValue = '';\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = '
  6. ' + response.resources.info_selectforstock + '
  7. ';\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += '
  8. ' + message + '
  9. ';\n });\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 * 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 var html = '';\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === 'mainAttributes') {\n attributeGroup.attributes.forEach(function (attribute) {\n html += '
    ' + attribute.label + ': '\n + attribute.value + '
    ';\n });\n }\n });\n\n return html;\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\t// Update options\n $productContainer.find('.product-options').empty().html(optionsHtml);\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 {jQuery} $productContainer - DOM element for a given product\n */\nfunction createCarousel(imgs, $productContainer) {\n var carousel = $productContainer.find('.carousel');\n $(carousel).carousel('dispose');\n var carouselId = $(carousel).attr('id');\n $(carousel).empty().append('
      ' + $(carousel).data('prev') + '' + $(carousel).data('next') + '');\n for (var i = 0; i < imgs.length; i++) {\n $('
      \"'
      ').appendTo($(carousel).find('.carousel-inner'));\n $('
    1. ').appendTo($(carousel).find('.carousel-indicators'));\n }\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, a[class^=\"carousel-control-\"]')).detach();\n }\n $(carousel).carousel();\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\n}\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 =\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === 'variant';\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent('.bonus-product-item')\n .data('pid', response.product.id);\n\n $productContainer.parent('.bonus-product-item')\n .data('ready-to-order', response.product.readyToOrder);\n }\n }\n\n // Update primary images\n var primaryImageUrls = response.product.images.large;\n createCarousel(primaryImageUrls, $productContainer);\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $('.prices .price', $productContainer).length\n ? $('.prices .price', $productContainer)\n : $('.prices .price');\n $priceSelector.replaceWith(response.product.price.html);\n }\n\n // Update promotions\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\n\n updateAvailability(response, $productContainer);\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\n // Update attributes\n $productContainer.find('.main-attributes').empty()\n .html(getAttributesHtml(response.product.attributes));\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('.bonus-product-item').length <= 0) {\n var optionsHtml = quantities.map(function (quantity) {\n var selected = quantity.selected ? ' selected ' : '';\n return '';\n }).join('');\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n * changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect',\n { url: selectedValueUrl, container: $productContainer });\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: function (data) {\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $('body').trigger('product:afterAttributeSelect',\n { data: data, container: $productContainer });\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\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 = $('
      ').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 $('.modal-body').spinner().start();\n\n if ($('#chooseBonusProductModal').length !== 0) {\n $('#chooseBonusProductModal').remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = ''\n + '
      '\n + ''\n + '
      '\n + ''\n + '
      '\n + '
      '\n + ' ' + data.labels.selectprods + ''\n + ' '\n + '
      '\n + '
      '\n + '
      '\n + '
      '\n + '
      '\n + '
      ';\n $('body').append(htmlString);\n $('.modal-body').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 $('#chooseBonusProductModal').modal('show');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\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 var messageType = response.error ? 'alert-danger' : 'alert-success';\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else {\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append(\n '
      '\n );\n }\n\n $('.add-to-cart-messages').append(\n '
      '\n + response.message\n + '
      '\n );\n\n setTimeout(function () {\n $('.add-to-basket-alert').remove();\n }, 5000);\n }\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('.product-id').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\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n }\n },\n\n focusChooseBonusProductModal: function () {\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\n $('#chooseBonusProductModal .close').focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#chooseBonusProductModal',\n firstElementSelector: '.close',\n lastElementSelector: '.add-bonus-products'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n colorAttribute: function () {\n $(document).on('click', '[data-attr=\"color\"] button', function (e) {\n e.preventDefault();\n\n if ($(this).attr('disabled')) {\n return;\n }\n var $productContainer = $(this).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.product-detail');\n }\n\n attributeSelect($(this).attr('data-url'), $productContainer);\n });\n },\n\n selectAttribute: function () {\n $(document).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('.product-detail');\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n });\n },\n\n availability: function () {\n $(document).on('change', '.quantity-select', function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\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).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 $('body').trigger('product:beforeAddToCart', this);\n\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $('.product-detail').each(function () {\n if (!$(this).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(this).find('.product-id').text(),\n qty: $(this).find('.quantity-select').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('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this))\n };\n\n if (!$('.bundle-item').length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n $('body').trigger('product:afterAddToCart', data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n },\n error: function () {\n $.spinner().stop();\n }\n });\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 = $('.choose-bonus-product-dialog').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 + '
      '\n + '
      '\n + $choiceOfBonusProduct.find('.product-name').html()\n + '
      '\n + '
      '\n + '
      '\n ;\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $('.pre-cart-products').html(totalQty);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n } else {\n $('.selected-bonus-products .bonus-summary').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 $('.pre-cart-products').html(count);\n $('.selected-bonus-products .bonus-summary').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 $('.modal-content').spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $('.modal-body').append(parsedHtml.body);\n $('.show-more-bonus-products:first').remove();\n $('.modal-content').spinner().stop();\n },\n error: function () {\n $('.modal-content').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 = $('.choose-bonus-product-dialog').data('addtocarturl');\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption =\n parseInt($(this)\n .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($('.pre-cart-products').html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').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 $('#chooseBonusProductModal').modal('hide');\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
      ');\n }\n $('.add-to-cart-messages').append(\n '
      '\n + data.errorMessage + '
      '\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 $('#chooseBonusProductModal').modal('hide');\n\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
      ');\n }\n $('.minicart-quantity').html(data.totalQty);\n $('.add-to-cart-messages').append(\n '
      '\n + data.msgSuccess + '
      '\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\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n miniCartReportingUrl: miniCartReportingUrl\n};\n","'use strict';\nvar urlCapAddressSearchEmail = $(\"#url-cap-email-search-email\").val();\n\n/**\n * @function SearchMailCivWS call AJAX for CAPAddress-SearchMailCivWS\n * @param {steep}\n * @param {zipCode}\n*/\n\nasync function SearchMailCivWS(email,fname,lname) {\n var capEmailData = {\n sInput: email,\n sNom: fname,\n sPrenom: lname\n };\n\n return new Promise((resolve, reject) => {\n $.ajax({\n url: urlCapAddressSearchEmail,\n type: 'get',\n data: capEmailData,\n dataType: 'json',\n success: function (data) {\n resolve(data);\n },\n error: function (err) {\n reject(err);\n }\n });\n })\n}\n\nmodule.exports = {\n SearchMailCivWS: SearchMailCivWS\n}","'use strict';\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} icon - icon that was clicked to add a product to the wishlist\n */\nfunction displayMessageAndChangeIcon(data, icon) {\n $.spinner().stop();\n if (data.success) {\n if (icon.hasClass('fa-heart-icon')) {\n icon.removeClass('fa-heart-icon').addClass('fa-heart-icon-on');\n }\n }\n\n if ($('.wishlist-product-heart-messages').length === 0) {\n $('body').append('
      ');\n }\n\n if ($('.wishlist-product-heart-alert').length === 0) {\n $('.wishlist-product-heart-messages')\n .append('
      ' + data.msg + '
      ');\n }\n\n setTimeout(function () {\n $('.wishlist-product-heart-messages').remove();\n }, 3000);\n}\n\n/**\n * Handles the removal of a product from the wishlist and changes the heart icon color back to normal.\n * @param {Object} data - The data returned from the server indicating the result of the removal operation.\n * @param {jQuery} icon - The jQuery object representing the heart icon element.\n * @returns {void}\n */\nfunction removeFromWishlist(data, icon) {\n $.spinner().stop();\n if (data.success) {\n if (icon.hasClass('fa-heart-icon-on')) {\n icon.removeClass('fa-heart-icon-on').addClass('fa-heart-icon');\n }\n }\n}\n\nmodule.exports = {\n toggleWishlist: function () {\n $('body').on('click', '.wishlistHeart', function (e) {\n e.stopPropagation();\n e.preventDefault();\n var $this = $(this);\n var routeType = 'post';\n var icon = $this.find($('i'));\n var url = $this.attr('href');\n var removeFromWishlistUrl = $this.data('removewishlist');\n var pid = $this.data('pid') || $this.closest('.product').data('pid') || $this.closest('.product-detail').data('pid');\n var optionId = $this.closest('.product-detail').find('.product-option').attr('data-option-id');\n var optionVal = $this.closest('.product-detail').find('.options-select option:selected').attr('data-value-id');\n optionId = optionId || null;\n optionVal = optionVal || null;\n\n if (icon.hasClass('fa-heart-icon-on')) {\n url = removeFromWishlistUrl;\n routeType = 'get';\n }\n\n if (!url || !pid) {\n return;\n }\n\n $.spinner().start();\n $.ajax({\n url: url,\n type: routeType,\n dataType: 'json',\n data: {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal\n },\n success: function (data) {\n if (data.notAddedToWishlist) {\n $('body').trigger('wishlist:addItem', data);\n displayMessageAndChangeIcon(data, icon);\n } else {\n removeFromWishlist(data, icon);\n }\n },\n error: function (err) {\n displayMessageAndChangeIcon(err, icon);\n }\n });\n });\n }\n};\n","'use strict';\n\nvar processInclude = require('./util');\n\n$(function () {\n processInclude(require('./product/giftCardProduct'));\n processInclude(require('./product/wishlistHeart'));\n processInclude(require('./product/wishlist'));\n processInclude(require('capencyBase/capency/email/capemail'));\n});\n","'use strict';\n\nconst base = require('base:product/detail');\nconst attributesLogic = require('attributes');\nconst capencyHelper = require('capency/capencyHelper');\nconst capencyVerifyEmail = require('capency/capency/email/capency.verify.email');\n\n/**\n* Parses HTML and returns the body element\n* @param {string} html - The HTML string to be parsed\n* @returns {Object} - An object containing the body element\n*/\nfunction parseHtml(html) {\n var $html = $('
      ').append($.parseHTML(html));\n var body = $html.find('.primary-images');\n return { body: body };\n}\n\n/**\n* Fills the modal element with data from an AJAX call\n* @param {string} selectedValueUrl - URL of the AJAX call\n*/\nfunction fillModalElement(selectedValueUrl) {\n $('.modal-body')\n .spinner()\n .start();\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n dataType: 'json',\n success: function (data) {\n var parsedHtml = parseHtml(data.renderedTemplate);\n\n $('.modal-body')\n .empty()\n .html(parsedHtml.body);\n $('#detailImageModal').modal('show');\n $('body').trigger('detailimage:ready');\n\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n* Initializes the product detail logic\n*/\nfunction initProductDetailLogic() {\n $(function () {\n $('.attributes .attribute.toggle').on('click', attributesLogic.toggleAttribute);\n $('.attribute-values .circle-unselected').on('click', attributesLogic.selectAttributeValue);\n });\n}\n\n/**\n* Validates an email address\n* @param {string} value - the email address to validate\n* @returns {boolean} - true if the email address is valid, false otherwise\n*/\nfunction valideEmail(value) {\n var emailRegex = /^[a-z0-9Α-Ωα-ωίϊΐόάέύϋΰήώáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ._%+-]+@[a-z0-9Α-Ωα-ωίϊΐόάέύϋΰήώáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ.-]+\\.[a-zΑ-Ωα-ωίϊΐόάέύϋΰήώáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ]{2,6}$/;\n return value.match(emailRegex);\n}\n\n/**\n* Validates a given name against a regex pattern\n* @param {string} value - the name to validate\n* @returns {boolean} - true if the name matches the regex pattern, false otherwise\n*/\nfunction valideName(value) {\n var nameRegex = /^[a-zA-ZΑ-Ωα-ωίϊΐόάέύϋΰήώáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœ'-\\s]{1,20}$/;\n return value.match(nameRegex);\n}\n\n/**\n* Validates a text value\n* @param {string} value - the text value to validate\n* @returns {boolean} - true if the value is valid, false otherwise\n*/\nfunction valideText(value) {\n var textRegex = /^[^<>$;]{0,2000}$/;\n return value.match(textRegex);\n}\n\n/**\n* Validates a given field and adds an error class if it is invalid\n* @param {string} field - the field to be validated\n* @param {boolean} impact - whether to add an error class\n* @returns {boolean} - whether the field is valid\n*/\nfunction validateField(field, impact) {\n var isValid = true;\n var $currentField = $(field);\n var currentFieldType = $currentField.attr('type');\n var currentFieldValue = $currentField.val();\n // do not validate capency fields\n if ($currentField.attr('data-validate-email') !== undefined) {\n return true;\n }\n if (($currentField.hasClass('required') && (currentFieldValue.length === 0 || (currentFieldType === 'checkbox' && !$currentField.is(':checked'))))\n || ($currentField.data('max') && parseFloat(currentFieldValue) > parseFloat($currentField.data('max')))\n || ($currentField.data('min') && parseFloat(currentFieldValue) < parseFloat($currentField.data('min')))\n || ($currentField.data('confirm') && currentFieldValue !== $($currentField.data('confirm')).val())\n || (currentFieldType == 'email' && !valideEmail(currentFieldValue))\n || (currentFieldType == 'text' && ((currentFieldValue.length > 20) || (currentFieldValue.length < 1) || (!valideName(currentFieldValue))))\n || ($currentField.hasClass('textarea') && !valideText(currentFieldValue) && (currentFieldValue !== ''))\n ) {\n if (impact) {\n $currentField.addClass('is-invalid');\n if ($currentField.hasClass('textarea') && !valideText(currentFieldValue) && (currentFieldValue !== '')) {\n $('#form-name-textarea-error').show();\n } else {\n $('#form-name-textarea-error').hide();\n }\n switch (impact) {\n case (currentFieldType == 'text' && (currentFieldValue.length > 20)):\n $('#form-name-text-error').show();\n $('#form-name-code-error, #form-name-required-error').hide();\n break;\n case (currentFieldType == 'text' && (currentFieldValue.length < 1)):\n $('#form-name-required-error').show();\n $('#form-name-code-error, #form-name-text-error').hide();\n break;\n case (currentFieldType == 'text' && !valideName(currentFieldValue)):\n $('#form-name-code-error').show();\n $('#form-name-text-error, #form-name-required-error').hide();\n break;\n case (currentFieldType == 'number'):\n $('#form-name-amount-error').show();\n break;\n case (currentFieldType == 'email'):\n $currentField.next('.invalid-feedback').text($currentField[0].validationMessage).show();\n break;\n default:\n $('#form-name-code-error, #form-name-text-error, #form-name-required-error, .invalid-feedback').hide();\n }\n }\n\n isValid = false;\n } else {\n $currentField.removeClass('is-invalid');\n }\n return isValid;\n}\n\n/**\n* Validates the formular and enables/disables the addGiftCardToCartBtn\n* @param {Object} form - the formular to be validated\n* @param {string} impact - the impact of the validation\n* @returns {boolean} - true if form is valid, false otherwise\n*/\nfunction validateFormular(form, impact) {\n var isValid = true;\n $.each($(form).find('.form-control, input[type=\"checkbox\"]'), (key, field) => {\n if (!validateField(field, impact)) {\n isValid = false;\n }\n });\n if (isValid) {\n $('#addGiftCardToCartBtn').prop('disabled', false);\n } else {\n $('#addGiftCardToCartBtn').prop('disabled', true);\n }\n return isValid;\n}\n\n/**\n* Clears the gift card form\n* @param {Object} form - the form to be cleared\n*/\nfunction clearGiftCardForm(form) {\n $.each($(form).find('.form-control'), (key, field) => {\n $(field).val('');\n });\n validateFormular(form);\n}\n/**\n* Hides the gift card form and clears its fields\n* @param {Object} $addProductToCard - jQuery object for the add product to card form\n*/\n$('body').on('giftcard:afterAddToCart', function () {\n $('#giftcardform').modal('hide');\n clearGiftCardForm($('#addProductToCard'));\n});\n\n/**\n* Event handler for add gift card form\n* @param {Event} event - the event object\n* @returns {void}\n*/\n$('body').on('submit', '#addProductToCard', function (event) {\n event.preventDefault();\n\n const $addGiftCardBtn = $(this);\n // eslint-disable-next-line no-unused-vars\n const isValid = validateFormular(this, true);\n const giftCardAmount = $addGiftCardBtn.find('#giftCardAmount').val();\n const recipientName = $addGiftCardBtn.find('#recipientName').val();\n const $recipientEmail = $addGiftCardBtn.find('#recipientEmail');\n const recipientEmail = $recipientEmail.val();\n const recipientConfirmEmail = $addGiftCardBtn.find('#recipientConfirmEmail').val();\n const message = $addGiftCardBtn.find('#message').val();\n const pid = $addGiftCardBtn.find('#giftCardId').val();\n\n const args = {\n action: $addGiftCardBtn.attr('action'),\n method: $addGiftCardBtn.attr('method'),\n params: {\n giftCardAmount: giftCardAmount,\n recipientName: recipientName,\n recipientEmail: recipientEmail,\n recipientConfirmEmail: recipientConfirmEmail,\n pid: pid,\n message: message\n }\n };\n if (capencyHelper.isCapencyEnabled('email')) {\n capencyVerifyEmail.checkEmailPropertyResult($recipientEmail).then(function (result) {\n if (result) {\n formSubmit.apply(null, [args]);\n }\n });\n } else {\n formSubmit.apply(null, [args]);\n }\n});\n\n/**\n* Validates the formular and field\n* @param {Object} $('#addProductToCard') - the formular to be validated\n* @param {boolean} this - the field to be validated\n* @param {boolean} true - flag to indicate whether the field should be validated\n*/\n$('body').on('change', '.form-control,input[type=\"checkbox\"]', function () {\n validateFormular($('#addProductToCard'));\n validateField(this, true);\n});\n\n/**\n* Validates the formular for adding a product to a gift card\n* @param {Object} $('#addProductToCard') - jQuery selector for the formular\n*/\n$(document).ready(function () {\n validateFormular($('#addProductToCard'));\n});\n\n/**\n* Submits a form using AJAX and triggers events based on the response\n* @param {Object} args - An object containing action, method, and params for the AJAX request\n* @param {string} args.action - The URL to send the AJAX request to\n* @param {string} args.method - The HTTP method for the AJAX request\n* @param {Object} args.params - The data to be sent with the AJAX request\n* @returns {void}\n*/\nfunction formSubmit(args) {\n let { action, method, params } = args;\n $('body').trigger('product:beforeAddToCart', this);\n $.ajax({\n url: action,\n method: method,\n dataType: 'json',\n data: params,\n success: function (data) {\n let $form = $('#addProductToCard');\n if (data.success) {\n $('.minicart').trigger('count:update', data);\n $('body').trigger('product:afterAddToCart', data);\n $('body').trigger('giftcard:afterAddToCart');\n $form.find('.invalid-feedback').hide();\n $form.find('.is-invalid').removeClass('is-invalid');\n } else if (data.sMessage) {\n let $email = $('#recipientEmail', $form);\n $email.next('.invalid-feedback').text(data.sMessage).show();\n }\n $.spinner().stop();\n },\n error: function (error) {\n const jsonError = error.responseJSON || {};\n if (jsonError.success === false && jsonError.maxLimitError) {\n $('.gift-card-max-limit-reached-message').text(jsonError.maxLimitError);\n }\n $('#giftcardform').modal('hide');\n $.spinner().stop();\n }\n });\n}\n\nmodule.exports = {\n ...base,\n ...{\n initProductDetailLogic,\n /**\n * Handles the click event for the detail-image-modal class\n * @param {Object} e - the event object\n * @returns {void}\n */\n showProductDetailImageModal: function () {\n $('body').on('click', '.detail-image-modal', function (e) {\n e.preventDefault();\n var selectedValueUrl = $(this)\n .closest('a.detail-image-modal')\n .attr('href');\n $(e.target).trigger('detailimage:show');\n fillModalElement(selectedValueUrl);\n });\n }\n }\n};\n","'use strict';\n\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} button - button that was clicked to add a product to the wishlist\n */\nfunction displayMessage(data, button) {\n $.spinner().stop();\n var status;\n if (data.success) {\n status = 'alert-success';\n } else {\n status = 'alert-danger';\n }\n\n if ($('.add-to-wishlist-messages').length === 0) {\n $('body').append(\n '
      '\n );\n }\n $('.add-to-wishlist-messages')\n .append('
      ' + data.msg + '
      ');\n\n setTimeout(function () {\n $('.add-to-wishlist-messages').remove();\n button.removeAttr('disabled');\n }, 5000);\n}\n\nmodule.exports = {\n addToWishlist: function () {\n $('.add-to-wish-list').on('click', function (e) {\n e.preventDefault();\n var url = $(this).data('href');\n var button = $(this);\n var pid = $(this).closest('.product-detail').find('.product-id').html();\n var optionId = $(this).closest('.product-detail').find('.product-option').attr('data-option-id');\n var optionVal = $(this).closest('.product-detail').find('.options-select option:selected').attr('data-value-id');\n optionId = optionId || null;\n optionVal = optionVal || null;\n if (!url || !pid) {\n return;\n }\n\n $.spinner().start();\n $(this).attr('disabled', true);\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal\n },\n success: function (data) {\n displayMessage(data, button);\n },\n error: function (err) {\n displayMessage(err, button);\n }\n });\n });\n }\n};\n","'use strict';\nvar $iscapEmailEnable = $(\"#isEnableCapEmail\");\n\nif ($iscapEmailEnable.length > 0 && $iscapEmailEnable.val() === 'true' && $iscapEmailEnable.val() !== null) {\n var formUtils = require('./formUtils');\n formUtils.initCapEmailByForms();\n}\n","'use strict';\n\nvar capPEmailConfiguration = require('./function');\nvar keyTimer;\nvar keyTimer2;\nlet capencyFields = [];\n\n/**\n* Configures email validation and event handling for a specified form.\n*\n* This function retrieves the configuration for the specified form ID, determines if the form is editable,\n* and sets up event listeners for email fields to handle keydown and input events. It also manages the\n* validation state of the email fields and handles the behavior of update and save address buttons.\n*\n* @param {string} formID - The ID of the form to configure.\n* @returns {boolean} Always returns false.\n*/\nfunction setConfigToCapEmail(formID) {\n // get config from de request Ajav for the currentForm\n var isEditableForm = false;\n\n var $formSelector = $(\"form[id='\" + formID + \"']\");\n\n if ($formSelector.length === 0) {\n $formSelector = $(\"form[name='\" + formID + \"']\");\n }\n\n if ($formSelector.is('[class*=\"edit\"]')) {\n isEditableForm = true;\n }\n\n var config = capPEmailConfiguration.getConfig(formID, isEditableForm);\n var listItem = [];\n\n if (config) {\n // events keyup keypress keydown for multiple NumberPhone for the form\n if (config.hasOwnProperty('emailFieldsIDs')) {\n listItem = config.emailFieldsIDs;\n\n $.each(listItem, function (key, selectorEmail) {\n let $field = config.formChild ? $formSelector.find('#' + selectorEmail) : $('#' + selectorEmail);\n capencyFields.push($field);\n $field.on('input', function (evt) {\n var value = evt.target.id;\n let $this = $(this);\n $this.next('.invalid-feedback').empty();\n if (value === selectorEmail) {\n clearTimeout(keyTimer);\n keyTimer = setTimeout(function () {\n // call ajax for get suggestions\n config.EmailID = selectorEmail;\n capPEmailConfiguration.callProcessEmailFlow(config);\n }, 300);\n }\n }).on('input', function () {\n $(this).removeClass('autocomplete-field-selected');\n });\n });\n\n $('#' + listItem[0]).attr('data-validate-email', false);\n\n $('.btn-update-address').on('click', function (e) {\n e.preventDefault();\n $('#' + listItem[0]).attr('data-validate-email', false);\n $('#verifyEmail').modal('hide');\n $('#' + listItem[0]).focus();\n $.spinner().stop();\n });\n\n $('.btn-save-address').on('click', function (e) {\n e.preventDefault();\n $('#' + listItem[0]).attr('data-validate-email', true);\n $('#verifyEmail').modal('hide');\n $.spinner().stop();\n });\n } else {\n capencyFields.push($('#' + config.EmailID));\n $('#' + config.EmailID).attr('data-validate-email', false);\n // events keyup keypress keydown for EmailID\n $('#' + config.EmailID).on('keydown', function () {\n clearTimeout(keyTimer2);\n let $this = $(this);\n $this.next('.invalid-feedback').empty();\n $(this).closest('.invalid-feedback').empty();\n keyTimer = setTimeout(function () {\n // call ajax for get suggestions\n capPEmailConfiguration.callProcessEmailFlow(config);\n }, 0);\n }).on('input', function () {\n $(this).removeClass('autocomplete-field-selected');\n });\n\n $('.btn-update-address').on('click', function (e) {\n e.preventDefault();\n $('#' + config.EmailID).attr('data-validate-email', false);\n $('#' + config.EmailID).focus();\n $('#verifyEmail').modal('hide');\n $.spinner().stop();\n });\n\n $('.btn-save-address').on('click', function (e) {\n e.preventDefault();\n $('#' + config.EmailID).attr('data-validate-email', true);\n $('input[name$=\"contactInfoFields_email\"]').attr('data-validate-email', true);\n $('input[name$=\"coCustomer_email\"]').attr('data-validate-email', true);\n $('#verifyEmail').modal('hide');\n $.spinner().stop();\n });\n }\n initChangeHandlerOnEmailFields();\n\n return false;\n }\n}\n\n/**\n* Disables browser autocomplete for all text input fields within a specified form.\n*\n* This function searches for a form by its ID or name and sets the `autocomplete` attribute \n* of all text input fields within the form to \"off\", effectively disabling the browser's \n* autocomplete feature for those fields.\n*\n* @param {string} formID - The ID or name of the form for which to disable autocomplete.\n*/\nfunction deleteAutoCompleteBrowser(formID) {\n var $formSelector = $(\"form[id='\" + formID + \"']\");\n\n if ($formSelector.length === 0) {\n $formSelector = $(\"form[name='\" + formID + \"']\");\n }\n\n $formSelector.find('input[type=text]').each(function () {\n $(this).attr('autocomplete', 'off');\n });\n}\n\nfunction initChangeHandlerOnEmailFields() {\n capencyFields.forEach(function (field) {\n field.on('focus', function () {\n $(this).data('oldValue', $(this).val());\n });\n field.on('change', function () {\n if ($(this).val() !== $(this).data('oldValue')) {\n $(this).data('isModified', true);\n }\n });\n });\n}\n\nmodule.exports = {\n initCapEmailByForms: (formIdListToInit = []) => {\n var listFormWithCapAddress = capPEmailConfiguration.getIdForms();\n $('form').each(function () {\n var formID = (String($(this).attr('id')) === 'undefined' || typeof String($(this).attr('id')) === 'undefined') ? $(this).attr('name') : String($(this).attr('id'));\n if (formID && listFormWithCapAddress.includes(formID) && (formIdListToInit.length === 0 || formIdListToInit.includes(formID))) {\n setConfigToCapEmail(formID);\n deleteAutoCompleteBrowser(formID);\n }\n });\n }\n};\n","'use strict';\n\nconst callWebService = require('*/capency/email/serverActions/callWebService');\nvar capAddressConfig = [];\nvar urlCapEmailConfig = $('#url-cap-email-config').val();\nconst base = require('capencyBase/capency/email/function');\n\n/// Call Ajax for get All configuration\n$.ajax({\n url: urlCapEmailConfig,\n type: 'get',\n async: false,\n dataType: 'json',\n success: function (data) {\n var capConfiguration = data.result;\n capAddressConfig = capConfiguration.length > 0 ? JSON.parse(capConfiguration) : [];\n },\n error: function (err) { }\n});\n\n\n/**\n* Handles the email data source for a given form configuration, including validation and autocomplete setup.\n*\n* @param {Object} configCurrentForm - Configuration object for the current form.\n* @param {string} configCurrentForm.idForm - The ID of the form element.\n* @param {boolean} configCurrentForm.formChild - Flag indicating if the email selector is a child of the form.\n* @param {string} configCurrentForm.EmailID - The ID of the email input element.\n* @param {string} configCurrentForm.firstName - The ID of the first name input element.\n* @param {string} configCurrentForm.lastName - The ID of the last name input element.\n*/\nfunction dataSourceEmail(configCurrentForm) {\n var $formID = $('#' + configCurrentForm.idForm);\n let $emailSelector = configCurrentForm.formChild ? $formID.find('#' + configCurrentForm.EmailID) : $('#' + configCurrentForm.EmailID);\n var $firstNameSelector = $('#' + configCurrentForm.firstName);\n var $lastNameSelector = $('#' + configCurrentForm.lastName);\n\n var email = $emailSelector.val();\n var fname = $firstNameSelector.val();\n var lname = $lastNameSelector.val();\n\n callWebService.SearchMailCivWS(email, fname, lname).then(function (searchResulat) {\n if (searchResulat.returnCode && searchResulat.returnCode === 1) {\n $emailSelector.next('.invalid-feedback').empty().html(searchResulat.sMessage).show();\n $emailSelector.addClass('is-invalid');\n $formID.find(':submit').prop('disabled', true);\n if ($('.ui-autocomplete').length) {\n $emailSelector.autocomplete('destroy');\n }\n } else {\n $emailSelector.removeClass('is-invalid');\n $formID.find(':submit').prop('disabled', false);\n var finalDatasource = $.map(searchResulat.mail, function (item) {\n return {\n label: item.sMail,\n value: item.sMail\n };\n });\n\n if (finalDatasource.length > 0) {\n $emailSelector.autocomplete({\n create: function () {\n $(this).attr('autocomplete', 'off');\n },\n minLength: 0,\n autoFocus: true,\n source: function (request, response) {\n response(finalDatasource);\n },\n select: function (event, ui) {\n let $this = $(this);\n $this.next().html(ui.item.sMail);\n $this.toggleClass('autocomplete-field-selected', true);\n $this.next('.invalid-feedback').empty();\n $this.data('isModified', true);\n },\n appendTo: '#' + configCurrentForm.idForm\n }).focus(function () {\n return false;\n });\n $emailSelector.autocomplete('search', '');\n } else if ($emailSelector.autocomplete('instance')) {\n $emailSelector.autocomplete('destroy');\n }\n }\n });\n}\n\n/**\n* Initiates the email processing flow based on the provided form configuration.\n* If the form configuration contains an 'EmailID' property, it triggers the dataSourceEmail function.\n*\n* @param {Object} currentFormConfig - The current form configuration object.\n* @property {string} currentFormConfig.EmailID - The email ID to be processed.\n*/\nfunction callProcessEmailFlow(currentFormConfig) {\n if (currentFormConfig.hasOwnProperty('EmailID')) {\n dataSourceEmail(currentFormConfig);\n }\n}\n\nbase.callProcessEmailFlow = callProcessEmailFlow;\nmodule.exports = base;\n","'use strict';\n\nconst callWebService = require('./serverActions/callWebService');\nvar capAddressConfig = [];\nvar urlCapEmailConfig = $(\"#url-cap-email-config\").val();\n\n/// Call Ajax for get All configuration \n\n$.ajax({\n url: urlCapEmailConfig,\n type: 'get',\n async: false,\n dataType: 'json',\n success: function (data) {\n var capConfiguration = data.result;\n capAddressConfig = capConfiguration.length > 0 ? JSON.parse(capConfiguration) : [];\n },\n error: function (err) { }\n});\n\n/**\n * @function getConfig return all the form id\n * @param {idForm}\n*/\n\nfunction getConfig(idForm, editableT) {\n if (capAddressConfig.length > 0) {\n var form = {};\n var currentForms = capAddressConfig.filter(form => form.idForm === idForm);\n var formEdit = capAddressConfig.find(form => form.idForm === idForm);\n\n if (currentForms.length === 2) {\n form = currentForms.find(form => form.idForm === idForm && form.hasOwnProperty(\"editable\") && form.editable === editableT);\n return form;\n }\n return formEdit;\n }\n}\n\n/**\n * @function getIdForms return all the form id\n*/\nfunction getIdForms() {\n var ids = [];\n capAddressConfig.forEach(obj => {\n ids.push(obj.idForm);\n });\n return ids;\n}\n\n/**\n * @function dataSourceEmail Resulat ajax for get suggestions\n * @param {configCurrentForm}\n*/\n\nfunction dataSourceEmail(configCurrentForm) {\n\n var $emailSelector = $(\"#\" + configCurrentForm.EmailID);\n var $formID = $(\"#\" + configCurrentForm.idForm);\n var $firstNameSelector = $(\"#\" + configCurrentForm.firstName);\n var $lastNameSelector = $(\"#\" + configCurrentForm.lastName);\n\n var email = $emailSelector.val();\n var fname = $firstNameSelector.val();\n var lname = $lastNameSelector.val();\n\n var searchResulat = callWebService.SearchMailCivWS(email, fname, lname);\n\n if (searchResulat.returnCode && searchResulat.returnCode === 1) {\n $emailSelector.next('.invalid-feedback').empty().html(searchResulat.sMessage).show();\n $emailSelector.addClass(\"is-invalid\");\n $formID.find(\":submit\").prop('disabled', true);\n\n } else {\n $emailSelector.next('.invalid-feedback').hide();\n $emailSelector.removeClass(\"is-invalid\");\n $formID.find(\":submit\").prop('disabled', false);\n var finalDatasource = null;\n var finalDatasource = $.map(searchResulat.mail, function (item) {\n return {\n label: item.sMail,\n value: item.sMail,\n }\n });\n $emailSelector.autocomplete({\n create: function (event, ui) {\n $(this).attr('autocomplete', 'nope');\n },\n minLength: 0,\n autoFocus: true,\n source: function (request, response) {\n var items = [];\n\n $.each(finalDatasource, function (key, val) {\n items.push(val);\n });\n\n response(items);\n\n },\n select: function (event, ui) {\n $(this).next().html(ui.item.sMail);\n }\n\n }).focus(function (e) {\n return false;\n });\n\n }\n}\n\n\n/**\n * @function callProcessAddressFlow Enable UI-autocomplete form zipID\n * @param {configCurrentForm}\n*/\n\nfunction callProcessEmailFlow(currentFormConfig, value) {\n if (currentFormConfig.hasOwnProperty(\"EmailID\")) {\n dataSourceEmail(currentFormConfig);\n }\n}\n\nmodule.exports = {\n getConfig: getConfig,\n getIdForms: getIdForms,\n callProcessEmailFlow: callProcessEmailFlow\n}","'use strict';\n\n/**\n* Checks if Capency is enabled for a specific type\n* @param {string} type - the type for which Capency is being checked (e.g. 'email')\n* @returns {boolean} - true if Capency is enabled, false otherwise\n*/\nfunction isCapencyEnabled(type) {\n let enabled = false;\n switch (type) {\n case 'email': {\n var $iscapEmailEnable = $('#isEnableCapEmail');\n if ($iscapEmailEnable.length > 0 && $iscapEmailEnable.val() === 'true' && $iscapEmailEnable.val() !== null) {\n enabled = true;\n }\n break;\n }\n case 'phone': {\n let $iscapPhoneEnable = $('#isEnableCapPhone');\n if ($iscapPhoneEnable.length > 0 && $iscapPhoneEnable.val() === 'true' && $iscapPhoneEnable.val() !== null) {\n enabled = true;\n }\n break;\n }\n case 'address': {\n let $iscapAddressEnable = $('#isEnableCapAddress');\n if ($iscapAddressEnable.length > 0 && $iscapAddressEnable.val() === 'true' && $iscapAddressEnable.val() !== null) {\n enabled = true;\n }\n break;\n }\n default:\n break;\n }\n return enabled;\n}\n\n/**\n* Sets the validation state of a field and updates its visual representation\n* @param {jQuery} $selector - the jQuery selector for the field element\n* @param {boolean} state - the validation state (true for valid, false for invalid)\n* @returns {void}\n*/\nfunction setFieldValid($selector, state) {\n if (state !== true) {\n $selector.addClass('is-invalid');\n $selector.removeClass('is-valid');\n $selector.data('validated', false);\n } else {\n $selector.next('.invalid-feedback').hide();\n $selector.removeClass('is-invalid');\n $selector.addClass('is-valid');\n $selector.data('validated', true);\n }\n}\n\n/**\n* Removes field validation results\n* @param {jQuery} $selector - the jQuery selector for the field\n*/\nfunction removeFieldValidationResults($selector) {\n $selector.next('.invalid-feedback').hide();\n $selector.removeClass('is-invalid');\n $selector.removeClass('is-valid');\n $selector.data('validated', false);\n}\n\n/**\n* Sets the required error message for the given selector\n* @param {jQuery} $selector - The jQuery selector for the input field\n* @returns {void}\n*/\nfunction setRequiredError($selector) {\n if ($selector && $selector.val().length === 0) {\n setFieldValid($selector, false);\n let errorMessage = $selector.data('messageRequired');\n if (errorMessage) {\n $selector.next('.invalid-feedback').text(errorMessage).show();\n }\n }\n}\n\n/**\n* Validates the phone number input field.\n* Checks if the phone number has been validated and if it is not empty.\n* If the phone number is not validated or is empty, sets an error message and focuses the input field.\n*\n* @returns {boolean} - Returns true if the phone number is validated, otherwise false.\n*/\nfunction validatePhone() {\n let $phoneSelector = $('.registration [name=\"dwfrm_profile_customer_phone\"]');\n if ($phoneSelector.data('validated') !== true) {\n if ($phoneSelector.val().length === 0) {\n setRequiredError($phoneSelector);\n }\n $phoneSelector.focus();\n return false;\n }\n return true;\n}\n\nfunction fillZipCodeWithAllCapData($zipSelector, data) {\n if ($zipSelector.length > 0) {\n $zipSelector.attr('data-address', JSON.stringify(data));\n }\n}\n\nfunction resetModifiedFlagOnAddressFields() {\n const fields = [\n $('input[name$=\"_address1\"]'),\n $('input[name$=\"_address2\"]'),\n $('input[name$=\"_city\"]'),\n $('input[name$=\"_postal\"]'),\n ];\n\n resetModifiedFlagOnFields(fields);\n}\n\nfunction resetModifiedFlagOnEmailFields() {\n const fields = [\n $('input[name$=\"_email\"]'),\n ];\n\n resetModifiedFlagOnFields(fields);\n}\n\nfunction resetModifiedFlagOnFields(fields) {\n fields.forEach(function (field) {\n field.data('isModified', false)\n });\n}\n\nfunction isAddressFormModified() {\n const fields = [\n $('input[name$=\"_address1\"]'),\n $('input[name$=\"_address2\"]'),\n $('input[name$=\"_city\"]'),\n $('input[name$=\"_postal\"]'),\n ];\n return checkFieldsModified(fields);\n}\n\nfunction isEmailFormModified() {\n const fields = [\n $('input[name$=\"_email\"]'),\n ];\n return checkFieldsModified(fields);\n}\n\nfunction checkFieldsModified(fields) {\n return fields.some(function (field) {\n return field.data('isModified')\n });\n}\n\nmodule.exports = {\n isCapencyEnabled: isCapencyEnabled,\n setFieldValid: setFieldValid,\n removeFieldValidationResults: removeFieldValidationResults,\n setRequiredError: setRequiredError,\n validatePhone: validatePhone,\n fillZipCodeWithAllCapData: fillZipCodeWithAllCapData,\n isAddressFormModified: isAddressFormModified,\n isEmailFormModified: isEmailFormModified,\n resetModifiedFlagOnAddressFields: resetModifiedFlagOnAddressFields,\n resetModifiedFlagOnEmailFields: resetModifiedFlagOnEmailFields\n};\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","'use strict';\nvar base = require('./base');\n\n/**\n * Enable/disable UI elements\n * @param {boolean} enableOrDisable - true or false\n */\nfunction updateAddToCartEnableDisableOtherElements(enableOrDisable) {\n $('button.add-to-cart-global').attr('disabled', enableOrDisable);\n}\n\nmodule.exports = {\n methods: {\n updateAddToCartEnableDisableOtherElements: updateAddToCartEnableDisableOtherElements\n },\n\n availability: base.availability,\n\n addToCart: base.addToCart,\n\n updateAttributesAndDetails: function () {\n $('body').on('product:statusUpdate', function (e, data) {\n var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\n\n $productContainer.find('.description-and-detail .product-attributes')\n .empty()\n .html(data.attributesHtml);\n\n if (data.shortDescription) {\n $productContainer.find('.description-and-detail .description')\n .removeClass('hidden-xl-down');\n $productContainer.find('.description-and-detail .description .content')\n .empty()\n .html(data.shortDescription);\n } else {\n $productContainer.find('.description-and-detail .description')\n .addClass('hidden-xl-down');\n }\n\n if (data.longDescription) {\n $productContainer.find('.description-and-detail .details')\n .removeClass('hidden-xl-down');\n $productContainer.find('.description-and-detail .details .content')\n .empty()\n .html(data.longDescription);\n } else {\n $productContainer.find('.description-and-detail .details')\n .addClass('hidden-xl-down');\n }\n });\n },\n\n showSpinner: function () {\n $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\n $.spinner().start();\n });\n },\n updateAttribute: function () {\n $('body').on('product:afterAttributeSelect', function (e, response) {\n if ($('.product-detail>.bundle-items').length) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else if ($('.product-set-detail').eq(0)) {\n response.container.data('pid', response.data.product.id);\n response.container.find('.product-id').text(response.data.product.id);\n } else {\n $('.product-id').text(response.data.product.id);\n $('.product-detail:not(\".bundle-item\")').data('pid', response.data.product.id);\n }\n });\n },\n updateAddToCart: function () {\n $('body').on('product:updateAddToCart', function (e, response) {\n // update local add to cart (for sets)\n $('button.add-to-cart', response.$productContainer).attr('disabled',\n (!response.product.readyToOrder || !response.product.available));\n\n var enable = $('.product-availability').toArray().every(function (item) {\n return $(item).data('available') && $(item).data('ready-to-order');\n });\n module.exports.methods.updateAddToCartEnableDisableOtherElements(!enable);\n });\n },\n updateAvailability: function () {\n $('body').on('product:updateAvailability', function (e, response) {\n $('div.availability', response.$productContainer)\n .data('ready-to-order', response.product.readyToOrder)\n .data('available', response.product.available);\n\n $('.availability-msg', response.$productContainer)\n .empty().html(response.message);\n\n if ($('.global-availability').length) {\n var allAvailable = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('available'); });\n\n var allReady = $('.product-availability').toArray()\n .every(function (item) { return $(item).data('ready-to-order'); });\n\n $('.global-availability')\n .data('ready-to-order', allReady)\n .data('available', allAvailable);\n\n $('.global-availability .availability-msg').empty()\n .html(allReady ? response.message : response.resources.info_selectforstock);\n }\n });\n },\n sizeChart: function () {\n $('.size-chart a').on('click', function (e) {\n e.preventDefault();\n var url = $(this).attr('href');\n var $prodSizeChart = $(this).closest('.size-chart').find('.size-chart-collapsible');\n if ($prodSizeChart.is(':empty')) {\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $prodSizeChart.append(data.content);\n }\n });\n }\n $prodSizeChart.toggleClass('active');\n });\n\n var $sizeChart = $('.size-chart-collapsible');\n $('body').on('click touchstart', function (e) {\n if ($('.size-chart').has(e.target).length <= 0) {\n $sizeChart.removeClass('active');\n }\n });\n },\n copyProductLink: function () {\n $('body').on('click', '#fa-link', function () {\n event.preventDefault();\n var $temp = $('');\n $('body').append($temp);\n $temp.val($('#shareUrl').val()).select();\n document.execCommand('copy');\n $temp.remove();\n $('.copy-link-message').attr('role', 'alert');\n $('.copy-link-message').removeClass('d-none');\n setTimeout(function () {\n $('.copy-link-message').addClass('d-none');\n }, 3000);\n });\n },\n\n focusChooseBonusProductModal: base.focusChooseBonusProductModal()\n};\n","'use strict';\n\n/**\n* Resets the Quick View by hiding the given selector and other sections\n* @param {string} selectorToHide - the selector to be hidden\n*/\nfunction reset(selectorToHide) {\n $('.attribute-values-section > div').hide();\n\n if (selectorToHide) {\n $(selectorToHide).hide();\n } else {\n $('.product-pricing-section').hide();\n $('.product-purchase-section').hide();\n }\n\n $('.attribute.toggle').attr('data-show', 'false');\n $('.attribute-col.selected').removeClass('selected');\n}\n\n/**\n* Shows the pricing area of a product\n* @param {string} selector - the selector for the pricing area\n* @returns {void}\n*/\nfunction showPricing(selector) {\n if (selector) {\n $(selector).show();\n } else {\n $('.product-pricing-section').show();\n $('.product-purchase-section').show();\n }\n}\n\n/**\n * Click handler on attribute toggle button\n * @param {*} event Event object\n */\nfunction toggleAttribute(event) {\n event.stopPropagation();\n\n const $target = $(event.currentTarget);\n const attrDataShow = 'data-show';\n const attrDataAttrID = 'data-attr';\n const attrDataSelectorToHide = 'data-selector-to-hide';\n\n // Get action\n const showAction = $target.attr(attrDataShow) === 'false';\n\n const nextValue = showAction ? 'true' : 'false';\n\n // Get Attribute\n const attributeID = $target.attr(attrDataAttrID) ? $target.attr(attrDataAttrID) : 'orc_size';\n\n // Get selector to show / hide\n const $variationAttributes = $target.closest('.variation-attributes');\n const selectorToHide = $variationAttributes.find('.attributes-area').attr(attrDataSelectorToHide);\n\n let $elmts = $variationAttributes.find(`.attribute-values-section div[${attrDataAttrID}=\"${attributeID}\"]`);\n if ($elmts.length === 0) {\n $elmts = $(`.attribute-values-section div[${attrDataAttrID}=\"${attributeID}\"]`);\n }\n\n if ($elmts.length > 0) {\n // Hide all footer blocks\n reset(selectorToHide);\n\n if (showAction) {\n // Show clicked attribute\n $elmts.show();\n // Update parent class\n $target.closest('.attribute-col').addClass('selected');\n } else {\n // Show Pricing\n showPricing(selectorToHide);\n }\n }\n\n // Update show attribute\n // first check if this is one of the choices\n // that was clicked rather than the menu bar\n if ($target.hasClass('circle-attribute')) {\n // take out data show to avoid conversion to true and disabling of toggling and resulting arrow pointing up\n $target.removeAttr('data-show');\n // $('.attribute-col').children().attr('data-show', 'false');\n } else {\n // this is for the menu bar\n $target.attr(attrDataShow, nextValue);\n }\n}\n\n/**\n * Click handler on change value button\n * @param {*} event Event object\n */\nfunction selectAttributeValue(event) {\n event.stopPropagation();\n // Init jquery element\n const isCompatibleShippingMethod = $('.product-detail').attr('data-is-compatible-shipping-method');\n if (isCompatibleShippingMethod && isCompatibleShippingMethod === 'false') {\n return;\n }\n const $target = $(event.currentTarget);\n const $rootContainer = $target.closest('.variation-attributes');\n\n if ($target.hasClass('circle-selected') === false) {\n const attrDataAttrID = 'data-attr';\n const attrDataAttrValue = 'data-attr-value';\n const attrDataAttrURL = 'value';\n const attrDataColorSuffix = 'data-color-suffix';\n\n // Get attribute Data\n const attributeID = $target.closest('.attribute-values').attr(attrDataAttrID);\n const attributeValue = $target.attr(attrDataAttrValue);\n const attributeColorSuffix = $target.attr(attrDataColorSuffix);\n const attributeDisplayValue = $target.find('.attribute-value').text();\n const attributeURL = $target.attr(attrDataAttrURL) === 'null' ? null : $target.attr(attrDataAttrURL);\n\n // Update attribute values\n const $container = $rootContainer.find(`.attribute-values[${attrDataAttrID}=\"${attributeID}\"]`);\n const $attributesElmnts = $container.find('.circle-attribute');\n $attributesElmnts.removeClass('circle-selected');\n $attributesElmnts.addClass('circle-unselected');\n $container.find(`.circle-attribute[${attrDataAttrValue}=\"${attributeValue}\"]`).removeClass('circle-unselected').addClass('circle-selected');\n\n // Update attribute select input\n const $toggleContainer = $rootContainer.find(`.attribute[${attrDataAttrID}=\"${attributeID}\"]`);\n $toggleContainer.find('.circle-attribute').removeClass('circle-unselected').addClass('circle-selected').text(attributeDisplayValue);\n\n // Update text on top of the color attribute\n $rootContainer.find(`.attribute-values-section > div[${attrDataAttrID}=\"${attributeID}\"] .value-area > span`).removeClass('placeholder').text(attributeDisplayValue);\n\n // Update Color\n if (attributeColorSuffix) {\n $toggleContainer.find('.circle-attribute').removeClass(function (index, className) {\n return (className.match(/(^|\\s)refinement-background-\\S+/g) || []).join(' ');\n }).addClass('refinement-background-' + attributeColorSuffix);\n $toggleContainer.find('.value-area > span').removeClass(function (index, className) {\n return (className.match(/(^|\\s)refinement-color-\\S+/g) || []).join(' ');\n });\n $toggleContainer.find('.value-area > span').html(attributeDisplayValue);\n }\n\n // Trigger toggleAttribute function only for mobile or quickview\n if ($rootContainer.hasClass('mobile-only') || $rootContainer.hasClass('product-quickview-attributes')) {\n toggleAttribute(event);\n }\n // Update select input\n $target.closest('.js-attribute-container').find(`.attribute[${attrDataAttrID}=\"${attributeID}\"] select`).val(attributeURL).trigger('change');\n\n // Quick view handling\n var $selectedColor = $target.find('.attribute-value').html();\n var $updateColorTab = $target.attr('data-color-suffix');\n var $quickViewModal = $target.closest('.quick-view-dialog');\n\n if ($quickViewModal.length === 0) {\n return;\n }\n\n if ($(this).hasClass('is-color')) {\n // update quickview color tab value\n $quickViewModal.find('div[data-attr=\"orc_color\"] .circle-area').empty()\n .html('' + $selectedColor + '');\n $quickViewModal.find('div[data-attr=\"orc_color\"] .circle-area span').addClass('refinement-background-' + $updateColorTab);\n $quickViewModal.find('div[data-attr=\"orc_color\"] .value-area span').html($selectedColor);\n } else {\n // update quickview size tab value\n var selectedSizeHtml = $target.find('.attribute-value').html();\n\n $quickViewModal.find('div[data-attr=\"orc_size\"] .circle-area').empty()\n .html(`${selectedSizeHtml}\n \n \n \n `);\n }\n }\n}\n\nmodule.exports = {\n toggleAttribute,\n selectAttributeValue,\n updateSelectableVariationAttributes: function (product, $container) {\n let values;\n switch ($container.attr('data-attr')) {\n case 'orc_size':\n values = product.variationAttributes[1].values;\n break;\n case 'orc_color':\n values = product.variationAttributes[0].values;\n break;\n default:\n break;\n }\n\n $container.children().each(function () {\n let valueAssociated = values.find(value => $(this).attr('data-attr-value') === value.id);\n if (valueAssociated && valueAssociated.selectable && $(this).hasClass('circle-disabled')) {\n $(this).removeClass('circle-disabled');\n } if (valueAssociated && !valueAssociated.selectable && !$(this).hasClass('circle-disabled')) {\n $(this).addClass('circle-disabled');\n }\n });\n }\n};\n"],"sourceRoot":""}