{"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","force","Promise","resolve","reject","urlCapCheckEmailProp","capData","sMail","type","result","returnCode","next","sMessage","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","shouldDisplayErrors","isValid","$currentField","currentFieldType","currentFieldValue","isEmpty","isTooHigh","parseFloat","isTooLow","isNotMatching","nameIsNotValid","textIsNotValid","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 = 295);\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 * @param force boolean telling if validation must be made even if the field has not been edited\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, force = false) {\n return new Promise((resolve, reject) => {\n if (!$emailSelector.data('isModified') && !force) {\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.returnCode === 1) {\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 if (result.returnCode === 2) {\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 appendTo: '#' + $emailSelector.parents('form').attr('id')\n })\n\n $emailSelector.focus();\n $emailSelector.autocomplete('search', '');\n reject(false);\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 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} shouldDisplayErrors - whether to display errors on form or not\n* @returns {boolean} - whether the field is valid\n*/\nfunction validateField(field, shouldDisplayErrors) {\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\n const isEmpty = $currentField.hasClass('required') && (currentFieldValue.length === 0 || (currentFieldType === 'checkbox' && !$currentField.is(':checked')));\n const isTooHigh = $currentField.data('max') && parseFloat(currentFieldValue) > parseFloat($currentField.data('max'));\n const isTooLow = $currentField.data('min') && parseFloat(currentFieldValue) < parseFloat($currentField.data('min'));\n const isNotMatching = $currentField.data('confirm') && currentFieldValue !== $($currentField.data('confirm')).val();\n const nameIsNotValid = currentFieldType == 'text' && ((currentFieldValue.length > 20) || (currentFieldValue.length < 1) || (!valideName(currentFieldValue)));\n const textIsNotValid = $currentField.hasClass('textarea') && !valideText(currentFieldValue) && (currentFieldValue !== '');\n\n if (isEmpty || isTooHigh || isTooLow || isNotMatching || nameIsNotValid || textIsNotValid) {\n if (shouldDisplayErrors) {\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 if (currentFieldType == 'text' && (currentFieldValue.length > 20)) {\n $('#form-name-text-error').show();\n $('#form-name-code-error, #form-name-required-error').hide();\n } else if (currentFieldType == 'text' && (currentFieldValue.length < 1)) {\n $('#form-name-required-error').show();\n $('#form-name-code-error, #form-name-text-error').hide();\n } else if (currentFieldType == 'text' && !valideName(currentFieldValue)) {\n $('#form-name-code-error').show();\n $('#form-name-text-error, #form-name-required-error').hide();\n } else if (currentFieldType == 'number') {\n $('#form-name-amount-error').show();\n } else if (currentFieldType == 'email') {\n $currentField.next('.invalid-feedback').text($currentField[0].validationMessage).show();\n } else {\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 {boolean} shouldDisplayErrors - the impact of the validation\n* @returns {boolean} - true if form is valid, false otherwise\n*/\nfunction validateFormular(form, shouldDisplayErrors) {\n var isValid = true;\n $.each($(form).find('.form-control, input[type=\"checkbox\"]'), (key, field) => {\n if (!validateField(field, shouldDisplayErrors)) {\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 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 && validateFormular($('#addProductToCard'), true)) {\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":""}