PageSourceSearch

https://www.b-z-b.com/fstrz/61c3b671faff75baebb59c2633950fd0d42c59…-%2Ffr_FR%2Fv1790222548547%2Fjs%2Fcommon.js

js b-z-b.com collected 2026-09-24 12:26:27 UTC 452,472 bytes, 18 lines download raw bytes

vendor: 2,407 bytes, lines 1-9
1/* creation date: Thu, 24 Sep 2026 07:02:13 GMT
2concat references:
3https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2FloadAlertNotification.js
4https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2FloadGtm.js
5https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2Fmain.js
6https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2Fcommon.js
7*/
8/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2FloadAlertNotification.js */
9!function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s="./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadAlertNotification.js")}({
9"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports =  function (element, type, content)  {\n    if (element !== null) {\n        const alertNotification = element;\n        alertNotification.classList.remove('alert', 'information', 'success', 'warning', 'error');\n        alertNotification.setAttribute('aria-hidden', false);\n        content !== undefined ? alertNotification.querySelector('.inner-content').textContent = content : false;\n        setTimeout(() => { \n            alertNotification.classList.remove('d-none');\n            alertNotification.classList.add('alert', type);\n        }, 10);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js?")},
vendor: 2,261 bytes, lines 9-12
9"./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadAlertNotification.js":function(module,exports,__webpack_require__){eval('window.displayNotification = __webpack_require__(/*! ./ds/displayNotification */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js");\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadAlertNotification.js?')}});
10var __fstrzSep="";
11/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2FloadGtm.js */
12!function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s="./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadGtm.js")}({
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js":function(module,exports,__webpack_require__){"use strict";eval("\n// set all GTM events here\nvar GTMHelper = __webpack_require__(/*! ./gtm/GTMHelper.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar processInclude = __webpack_require__(/*! ./util */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js\");\nprocessInclude(__webpack_require__(/*! ./gtm/pwa-analytics.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js\"));\n\nvar gtm = {};\nvar $cache = {};\n\nfunction initializeCache() {\n    $cache.document = $(document);\n}\n\nfunction isDatalayerDefined() {\n    return typeof dataLayer !== 'undefined';\n}\n\nfunction removeDataLayer (event, template) {\n    if (!isDatalayerDefined()) {\n        return;\n    }\n    if (event) {\n        var index = null;\n        for (var i = 0; i < dataLayer.length && index == null; i++) {\n            if (template != null) {\n                if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n                    index = i;\n            } else {\n                if (dataLayer[i].event === event)\n                    index = i;\n            }\n        }\n        if (index != null)\n            dataLayer.splice(index, 1);\n    }\n}\n\nfunction findDataLayer (event, template) {\n    if (!isDatalayerDefined()) {\n        return;\n    }\n    if (event) {\n        for (var i = 0; i < dataLayer.length; i++) {\n            if (template != null) {\n                if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n                    return (dataLayer[i]);\n            } else {\n                if (dataLayer[i].event === event)\n                    return (dataLayer[i]);\n            }\n        }\n    }\n    return null;\n}\n\nfunction fillDataLayer (data){\n\tif (!isDatalayerDefined()) {\n        return;\n    }\n\n    if (data)\n        dataLayer.push(data);\n    // dataLayer.push({\n    //     \"event\": data.event,\n    //     \"page\": data.page,\n    //     \"eeAction\": data.eeAction,\n    //     \"currencyCode\": data.currency,\n    //     \"checkoutStep\": data.checkoutStep,\n    //     \"checkoutType\": data.checkoutType,\n    //     \"products\": data.products\n    // });\n    return;\n}\n\nfunction fillSecondaryDataLayer(data){\n\tif (!isDatalayerDefined()) {\n        return;\n    }\n\n\tdataLayer.push({\n\t\t\"event\": data.event2,\n\t\t\"checkoutStep\": data.prevcheckoutStep,\n\t\t\"checkoutOption\": data.checkoutOption\n\t});\n}\n\nfunction initializeEvents() {\n    $cache.document.on('paymentStepGTM', function(event, data) {\n    \tdata.event='virtualPageview';\n    \tdata.page='/payment';\n\t\tdata.checkoutStep='3';\n\t\tdata.prevcheckoutStep='2';\n\n\t\tfillDataLayer(data);\n    \tfillSecondaryDataLayer(data);\n\n        return;\n    });\n}\n\nfunction clicCrossSell_GTM($click) {\n    var title = '';\n    var $title = $click.closest('.product-carousel').siblings('.title');\n    if ($title.length === 0)\n        $title = $click.closest('#slot-pushproduct').find('.title-reco');\n    if ($title.length === 0) {\n        \n        $title = $click.closest('.container-reco').find('.swipper-title');\n    }\n    if ($title.length != 0) {\n       var calloutmsg = $title.data('calloutmsg');\n        var recommender = $title.data('recommender');\n        title = calloutmsg;\n        if (recommender)\n            title = title + '/' + recommender;\n    }\n    \n    var url = $click.data('gtm-url');\n    var pid = $click.data('pid');\n    $.ajax({\n        url: url,\n        data: {\n            pid: pid\n        },\n        async: false,\n        method: 'GET',\n        success: function (data) {\
12n            let GTMclicCrossSell = __webpack_require__(/*! ./gtm/util/actions/clicCrossSell */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js\");\n            GTMclicCrossSell.getDataLayerForAction({\n                product: data.product,\n                title: title\n            });\n        }\n    });\n}\n\nmodule.exports = {\n    fillDataLayer : fillDataLayer,\n    removeDataLayer : removeDataLayer,\n    findDataLayer: findDataLayer,\n    init : function() {\n        initializeCache();\n        initializeEvents();\n        $cache.document.trigger('GTMReady');\n\n        $(document).on('click', '.slotReco .clickproduct', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.slotReco .product-tile .tile-body .pdp-link .link', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.slotReco .product-tile .tile-body .color-swatches', function(){\n            clicCrossSell_GTM($(this));\n        });\n        $(document).on('click', '.container-reco .clickproduct', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.container-reco .product-tile .tile-body .pdp-link .link', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.container-reco .product-tile .tile-body .color-swatches', function(){\n            clicCrossSell_GTM($(this));\n        });\n       \n        // Reco dans le mini-panier\n        $(document).on('click', '.js-minicart-body .clickproduct', function () {\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.js-minicart-body .product-tile .tile-body .pdp-link .link', function () {\n        clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.js-minicart-body .product-tile .tile-body .color-swatches', function () {\n        clicCrossSell_GTM($(this));\n        });\n    }\n}\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js?")},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js":function(module,exports){eval('getProductJsonBase = function (Product, price, quantity, addToCartOrigin) {\n    if (Product.price) {\n        var discount = Product.price.list ? Product.price.list.value : price\n        discount = discount - price;\n        if (discount != 0)\n            discount = Math.round(discount * 100) / 100;\n    }\n    var rc = null;\n    var rct = null;\n    var rct_sku = \'\';\n    if (Product.productType == \'variationGroup\') {\n        rc = Product.id.toLowerCase();\n        rct_sku = \'\';\n        //not for layer\n    } else if (Product.productType == \'variant\') {\n        rct = Product.id.toLowerCase();\n        rct_sku = Product.rctSku ? Product.rctSku : \'\';\n        if (Product.variationGroupID) {\n            rc = Product.variationGroupID;\n        }\n    }\n    \n    let r = Product.masterID || Product.id;\n    let name = Product.productName ? Product.productName.toLowerCase() : "";\n    let category = Product.primaryCategory && Product.primaryCategory.category ? Product.primaryCategory.category.toLowerCase() : null;\n    let subCategory = Product.primaryCategory && Product.primaryCategory.subCategory ? Product.primaryCategory.subCategory.toLowerCase() : null;\n    let subsubCategory = Product.primaryCategory && Product.primaryCategory.subSubCategory ? Product.primaryCategory.subSubCategory.toLowerCase() : null;\n    let subsubsubCategory = Product.primaryCategory && Product.primaryCategory.subSubSubCategory ? Product.primaryCategory.subSubSubCategory.toLowerCase() : null;\n    let categoryName = Product.primaryCategory && Product.primaryCategory.categoryname ? Product.primaryCategory.categoryname.toLowerCase() : null;\n    let subCategoryName = Product.primaryCategory && Product.primaryCategory.subCategoryname ? Product.primaryCategory.subCategoryname.toLowerCase() : null;\n    let subsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubCategoryname ? Product.primaryCategory.subSubCategoryname.toLowerCase() : null;\n    let subsubsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubSubCategoryname ? Product.primaryCategory.subSubSubCategoryname.toLowerCase() : null;\n    let gender = Product.sexe ? Product.sexe.toLowerCase() : "";\n    let season = Product.season ? Product.season.toLowerCase() : "";\n    let price_flag = Product.flagsPromo && Product.flagsPromo.flagPromoName ? Product.flagsPromo.flagPromoName.toLowerCase() : "";\n    let product_flag = [];\n    let productset_id;\n    let productset_products_number;\n\n    \n    if (Product.flagsPromo && Product.flagsPromo.tabOfFlags && Product.flagsPromo.tabOfFlags.length > 0) {\n        for (var i = 0; i < Product.flagsPromo.tabOfFlags.length; i++) {\n            product_flag.push(Product.flagsPromo.tabOfFlags[i].name.toLowerCase());\n        }\n    }\n\n    var flagNewName;\n    if (Product.flagsPromo && Product.flagsPromo.flagNewName) {\n        flagNewName = Product.flagsPromo.flagNewName;\n    }\n\n    let brand = Product.brand ? Product.brand.toLowerCase() : "";\n    let rating = Product.rating;\n\n    let price_calcul = price;\n    if (Product.productType !== \'set\') {\n        if (Product.price.type != undefined && Product.price.type == "range") {\n            price_calcul = Product.price.max.sales.values;\n        } else {\n            price_calcul = Product.price.sales.value;\n        }\n    }\n\n    let unitpriceAti = price_calcul;\n    let brandName = Product.brandName ? Product.brandName.toLowerCase() : "";\n    let brandTitle = Product.brandTitle ? Product.brandTitle.toLowerCase() : "";\n\n    let productJson = {\n        "r": r,\n        "rc": rc,\n        "rct": rct,\n        "rct_sku": rct_sku,\n        "name": name,\n        "category": category,\n        "subCategory": subCategory,\n        "subsubCategory": subsubCategory,\n        "subsubsubCategory": subsubsubCategory,\n        "category_label": categoryName,\n        "subCategory_label": subCategoryName,\n        "subsubCategory_label": subsubCategoryName,\n        "subsubsubCategory_label": subsubsubCategoryName,\n        "gender": gender,\n        "season": season,\n        "price_flag": price_flag,\n        "product_flag": product_flag,\n        "new_flag": flagNewName,\n        "brand": brand,\n        "brandName": brandName,\n        "brandTitle": brandTitle,\n        "rating": rating,\n        "unitpriceAti": unitpriceAti,\n        "discountAti": discount,\n        "hasVideo": !!(Product.brightcoveVideos),\n        "imageNumber": Product.images && Product.images.large ? Product.images.large.length : 0\n    };\n\n    if (Product.productType == \'set\') {\n        productJson.productset_id = Product.id;\n        productJson.productset_products_number = Product.individualProducts.length;\n    }\n\n    if (quantity) {\n        productJson.quantity = quantity;\n    }\n    \n    if(addToCartOrigin){\n        productJson.addToCartOrigin = addToCartOrigin;\n    }\n\n    return productJson;\n},\n\n    module.exports = {\n        populateProduct: function (productLineItems, addQuantity, addToCartOrigin) {\n            // Prepare default value\n            addQuantity = addQuantity || false;\n            for (let i in productLineItems) {\n                let item = productLineItems[i].product;\n                //let price = item.basePrice ? item.basePrice.getValue() : item.price.sales.decimalPrice.value;\n                let price = null;\n\n                if (item.price != null) {\n                    if (item.price.sales != null) {\n                        if (item.price.sales.type == "range") {\n                            price = item.price.max.sales.values;\n                        } else {\n                            price = item.price.sales.value;\n                        }\n                    }\n                }\n\n                let quantity = null;\n                if (addQuantity) {\n                    quantity = item.quantity || parseInt(addQuantity);\n                }\n                return (getProductJsonBase(item, price, quantity, addToCartOrigin));\n            }\n        },\n    }\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js?')},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n    pwaInstalled: function() {\n        window.addEventListener('appinstalled', function(evt) {\n            let GTMPWAInstalled = __webpack_require__(/*! ./util/actions/pwaInstalled */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js\");\n            GTMPWAInstalled.getDataLayerForAction();\n        });\n    },\n    usePWA: function() {\n        window.addEventListener('load', function () {\n\n            let displayMode = 'browser tab';\n\n            // Pour Safari sur IOs qui ne dispose pas de matchMedia\n            if (navigator.standalone) {\n                displayMode = 'standalone-ios';\n            }\n            \n            if (window.matchMedia('(display-mode: standalone)').matches) {\n                displayMode = 'standalone';\n            }\n\n            var hasPWA = displayMode.indexOf('standalone') != -1 ? 'yes' : 'no';\n            let GTMhasPWA = __webpack_require__(/*! ./util/pages/pwa */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js\");\n            GTMhasPWA.getDataLayerForPage({\n                hasPWA : hasPWA\n            });\n            \n        });\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js?")},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "clic cross-sell",\n        };\n\n        params = params || {};\n\n        data.e = [];\n\n        var product = [];\n        if (params.product){\n            product = (GTMHelper.populateProduct([{product : params.product}], false));\n        }\n        data.e={\n            category: \'cross-sell\',\n            action: params.title.trim(),\n            product: product\n        };\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js?')},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "pwa installed",\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js?')},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js":function(module,exports,__webpack_require__){eval("var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\npopulateData =  function (dataLayer, params) {\n    if (dataLayer.env)\n        dataLayer.env.hasPWA = params.hasPWA;\n}\n\nmodule.exports = {\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer('pageview');\n    },\n    findDataLayer : function()\n    {\n        return gtm.findDataLayer('pageview');\n    },\n    getDataLayerForPage : function(params) {\n        var dataLayer = this.findDataLayer();\n        if (dataLayer)\n            populateData(dataLayer, params);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js?")},
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadGtm.js":function(module,exports,__webpack_require__){eval('window.gtm = __webpack_require__(/*! ./gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/loadGtm.js?')},
vendor: 2,392 bytes, lines 12-15
12"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js":function(module,exports,__webpack_require__){"use strict";eval("\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\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js?")}});
13var __fstrzSep="";
14/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2Fmain.js */
15!function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s="./cartridges/app_coremodel_storefront/cartridge/client/default/js/main.js")}({
vendor: 431 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_Symbol.js":function(module,exports,__webpack_require__){eval('var root = __webpack_require__(/*! ./_root */ "../storefront-reference-architecture/node_modules/lodash/_root.js");\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_Symbol.js?')},
vendor: 1,326 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_baseGetTag.js":function(module,exports,__webpack_require__){eval('var Symbol = __webpack_require__(/*! ./_Symbol */ "../storefront-reference-architecture/node_modules/lodash/_Symbol.js"),\n    getRawTag = __webpack_require__(/*! ./_getRawTag */ "../storefront-reference-architecture/node_modules/lodash/_getRawTag.js"),\n    objectToString = __webpack_require__(/*! ./_objectToString */ "../storefront-reference-architecture/node_modules/lodash/_objectToString.js");\n\n/** `Object#toString` result references. */\nvar nullTag = \'[object Null]\',\n    undefinedTag = \'[object Undefined]\';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_baseGetTag.js?')},
vendor: 645 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_freeGlobal.js":function(module,exports,__webpack_require__){eval("/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../happychic-sfra-core-model/node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_freeGlobal.js?")},
vendor: 1,500 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_getRawTag.js":function(module,exports,__webpack_require__){eval('var Symbol = __webpack_require__(/*! ./_Symbol */ "../storefront-reference-architecture/node_modules/lodash/_Symbol.js");\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_getRawTag.js?')},
vendor: 805 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_objectToString.js":function(module,exports){eval("/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_objectToString.js?")},
vendor: 620 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/_root.js":function(module,exports,__webpack_require__){eval("var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ \"../storefront-reference-architecture/node_modules/lodash/_freeGlobal.js\");\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/_root.js?")},
vendor: 6,780 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/debounce.js":function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(/*! ./isObject */ \"../storefront-reference-architecture/node_modules/lodash/isObject.js\"),\n    now = __webpack_require__(/*! ./now */ \"../storefront-reference-architecture/node_modules/lodash/now.js\"),\n    toNumber = __webpack_require__(/*! ./toNumber */ \"../storefront-reference-architecture/node_modules/lodash/toNumber.js\");\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/debounce.js?")},
vendor: 968 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/isObject.js":function(module,exports){eval("/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/isObject.js?")},
vendor: 857 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/isObjectLike.js":function(module,exports){eval("/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/isObjectLike.js?")},
vendor: 1,122 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/isSymbol.js":function(module,exports,__webpack_require__){eval("var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ \"../storefront-reference-architecture/node_modules/lodash/_baseGetTag.js\"),\n    isObjectLike = __webpack_require__(/*! ./isObjectLike */ \"../storefront-reference-architecture/node_modules/lodash/isObjectLike.js\");\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/isSymbol.js?")},
vendor: 842 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/now.js":function(module,exports,__webpack_require__){eval('var root = __webpack_require__(/*! ./_root */ "../storefront-reference-architecture/node_modules/lodash/_root.js");\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/now.js?')},
vendor: 2,044 bytes, line 15
15"../storefront-reference-architecture/node_modules/lodash/toNumber.js":function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(/*! ./isObject */ \"../storefront-reference-architecture/node_modules/lodash/isObject.js\"),\n    isSymbol = __webpack_require__(/*! ./isSymbol */ \"../storefront-reference-architecture/node_modules/lodash/isSymbol.js\");\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n\n\n//# sourceURL=webpack:///../storefront-reference-architecture/node_modules/lodash/toNumber.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/adrenalead/cartEventsAdrenalead.js":function(module,exports){eval("module.exports = {\n\n    //If we have a specific product (in case of addToCart) we use it or if we don't have a specific product we take one in the cart\n    addedToCart: function(cartModel, product) {\n        try{\n           if(window['NADZ_TRIGGERS'] != 'undefined') {\n                var actions = window['NADZ_TRIGGERS'].getNadzTriggerActions();\n                actions.handleActions([\n                    ['setProduitsDansPanier', true]\n                ]);\n           }\n           else {\n                var _nAdzqTriggers = _nAdzqTriggers || [];\n                _nAdzqTriggers.push(['handleActions', [\n                    ['setProduitsDansPanier', true]\n                ]]);\n           }\n        }catch(error){\n            console.log(error);\n        }\n    },\n\n    confirmOrder: function(orderModel) {\n        try{\n            var order = orderModel;\n            var orderTotal = $('.grand-total-sum').html().replace(' €','');\n            var orderNo = $('#orderTotalText').html();\n            var _nAdztr = _nAdztr || [];\n            (function () {\n                _nAdztr.push([\"setAdvertiserId\", \"2990\"]);\n                _nAdztr.push([\"setTransactionId\", orderNo]);\n                _nAdztr.push([\"setAmount\", orderTotal]);\n                _nAdztr.push([\"setTr\"]);\n                var u = \"https://notifpush.com/scripts/\";\n                var s = document.createElement(\"script\");\n                s.type = \"text/javascript\";\n                s.defer = true;\n                s.async = true;\n                s.src = u + \"nadz-tr.js\";\n                var p = document.getElementsByTagName(\"script\")[0];\n                p.parentNode.insertBefore(s, p);\n            })();\n            if (window['NADZ_TRIGGERS'] != undefined) {\n                var actions = window['NADZ_TRIGGERS'].getNadzTriggerActions();\n                actions.handleActions([\n                    ['setProduitsDansPanier', false],\n                    ['setMontantConversion', orderTotal]\n                ]);\n            }\n            else {\n                var _nAdzqTriggers = _nAdzqTriggers || [];\n                _nAdzqTriggers.push(['handleActions', [\n                    ['setProduitsDansPanier', false],\n                    ['setMontantConversion', orderTotal]\n                ]]);\n            }\n        }catch(error){\n            console.log(error);\n        }\n    }\n\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/adrenalead/cartEventsAdrenalead.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/batch/cartEventsBatch.js":function(module,exports){eval('\nfunction getProductsEventInfos(Product) {\n\n        let price = null;\n\n        if (Product.price != null) {\n            if (Product.price.sales != null) {\n                if (Product.price.sales.type == "range") {\n                    price = Product.price.max.sales.values;\n                } else {\n                    price = Product.price.sales.value;\n                }\n            }\n        }\n\n        if (Product.price && price) {\n            var discount = Product.price.list ? Product.price.list.value : price\n            discount = discount - price;\n            if (discount != 0)\n                discount = Math.round(discount * 100) / 100;\n        }\n        var rc = null;\n        var rct = null;\n        if (Product.productType == \'variationGroup\') {\n            rc = Product.id.toLowerCase();\n            //not for layer\n        } else if (Product.productType == \'variant\') {\n            rct = Product.id.toLowerCase();\n            if (Product.variationGroupID) {\n                rc = Product.variationGroupID;\n            }\n        }\n        \n        let r = Product.masterID || Product.id;\n        let name = Product.productName ? Product.productName.toLowerCase() : "";\n        let category = Product.primaryCategory && Product.primaryCategory.category ? Product.primaryCategory.category.toLowerCase() : null;\n        let subCategory = Product.primaryCategory && Product.primaryCategory.subCategory ? Product.primaryCategory.subCategory.toLowerCase() : null;\n        let subsubCategory = Product.primaryCategory && Product.primaryCategory.subSubCategory ? Product.primaryCategory.subSubCategory.toLowerCase() : null;\n        let gender = Product.sexe ? Product.sexe.toLowerCase() : "";\n        let season = Product.season ? Product.season.toLowerCase() : "";\n    \n        let price_calcul = price;\n        if (Product.productType !== \'set\') {\n            if (Product.price.type == "range") {\n                price_calcul = Product.price.max.sales.values;\n            } else {\n                price_calcul = Product.price.sales.value;\n            }\n        }\n        let unitpriceAti = price_calcul;\n\n        var quantityProduct = null;\n        if (Product.selectedQuantity) {\n            quantityProduct = Product.selectedQuantity;\n        } else if (Product.quantity) {\n            quantityProduct = Product.quantity;\n        }\n\n        let eventObj = {\n            "product_r": r,\n            "product_rc": rc,\n            "product_rct": rct,\n            "product_name": name,\n            "product_category": category,\n            "product_subCategory": subCategory,\n            "product_subsubCategory": subsubCategory,\n            "product_gender": gender,\n            "product_season": season,\n            "product_unitpriceAti": unitpriceAti,\n            "product_discountAti": discount,\n            "product_quantity": quantityProduct\n        };\n\n    return eventObj;\n}\n\n\nmodule.exports = {\n\n    //If we have a specific product (in case of addToCart) we use it or if we don\'t have a specific product we take one in the cart\n    addedToCart: function(cartModel, product) {\n        try{\n            window.didomiOnReady = window.didomiOnReady || [];\n            window.didomiOnReady.push(function (Didomi) { \n                    Didomi.getObservableOnUserConsentStatusForVendor(\'c:batch\')\n                .filter(function (status) { return status !== undefined })\n                .subscribe(function (consentStatus) {\n                    if (consentStatus === true) {\n\n                        batchSDK(function (api) {\n\n                            if (!product && cartModel.items && cartModel.items.length > 0) {\n                                product = cartModel.items[0];\n                            }\n    \n                            var trackingObj = {};\n                            if (product) {\n                                trackingObj = getProductsEventInfos(product);\n                            }\n    \n                            if (cartModel.customerCodeStl) {\n                                trackingObj["user_id_unencrypted"] = cartModel.customerCodeStl;\n                            }\n\n                            var productUrlBatch = null;\n                            if (product && product.productPageUrl) {\n                                productUrlBatch = {\n                                    type: api.eventAttributeTypes.URL,\n                                    value: product.productPageUrl,\n                                }  \n                            }\n\n                            trackingObj["product_url"] = productUrlBatch;\n                            trackingObj["$label"] = trackingObj.product_category;\n                            \n                            api.trackEvent("add_to_cart", \n                            {\n                                //name: "ue.added_to_cart",\n                                attributes : trackingObj\n                            });\n\n                        });\n                    }\n                });\n            });\n        } catch(error) {}\n    }
15,\n\n    cancelledCart: function() {\n        try{\n            window.didomiOnReady = window.didomiOnReady || [];\n            window.didomiOnReady.push(function (Didomi) { \n                    Didomi.getObservableOnUserConsentStatusForVendor(\'c:batch\')\n                .filter(function (status) { return status !== undefined })\n                .subscribe(function (consentStatus) {\n                    if (consentStatus === true) {\n\n                        batchSDK(function (api) {                 \n                            api.trackEvent("cancelled_cart");\n                        });\n                    }\n                });\n            });\n        } catch(error) {}\n    },\n\n    addedToWishList : function(customercode, product) {\n        try {\n            window.didomiOnReady = window.didomiOnReady || [];\n            window.didomiOnReady.push(function (Didomi) { \n                    Didomi.getObservableOnUserConsentStatusForVendor(\'c:batch\')\n                .filter(function (status) { return status !== undefined })\n                .subscribe(function (consentStatus) {\n                    if (consentStatus === true) {\n\n                        batchSDK(function (api) {\n                            var trackingObj = {};\n\n                            product ? trackingObj = getProductsEventInfos(product) : null;\n                            customercode ? trackingObj["user_id_unencrypted"] = customercode : trackingObj["user_id_unencrypted"] = null;\n\n                            var productUrlBatch = null;\n                            if (product && product.productPageUrl) {\n                                productUrlBatch = {\n                                    type: api.eventAttributeTypes.URL,\n                                    value: product.productPageUrl,\n                                }  \n                            }\n\n                            trackingObj["product_url"] = productUrlBatch;\n                                    \n                            api.trackEvent("added_to_wishlist", {\n                                name: "ue.added_to_wishlist",\n                                user_id_unencrypted: customercode,\n                                label: trackingObj.product_category,\n                                attributes : trackingObj\n                            });\n                        });\n                    }\n                });\n            });\n        } catch(error){ }\n    }\n\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/batch/cartEventsBatch.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/approachingDiscounts.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n\nmodule.exports = {\n\n/**\n * re-renders the approaching discount messages\n * @param {Object} approachingDiscounts - updated approaching discounts for the cart\n */\n    updateApproachingDiscounts: function(approachingDiscounts) {\n        if (approachingDiscounts) {\n            if (approachingDiscounts.subTotal < approachingDiscounts.threshold) {\n                $('.single-approaching-discount').html(approachingDiscounts.approachingPromoMessage);\n                $('#progress').removeClass('full');\n                if (approachingDiscounts.subTotal >= approachingDiscounts.minimumForSlotDisplay) {\n                    $('#cart-recommendation-freeDelivery').removeClass('d-none');\n                } else {\n                    $('#cart-recommendation-freeDelivery').addClass('d-none');\n                }\n            } else {\n                $('.single-approaching-discount').html(approachingDiscounts.reachedPromoMessage);\n                $('#progress').addClass('full');\n                $('#cart-recommendation-freeDelivery').addClass('d-none');\n            }\n            $('#progress').val(approachingDiscounts.percentage);\n        }\n    }\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/approachingDiscounts.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/cart.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar base = __webpack_require__(/*! ../product/base */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/base.js\");\nvar approachingDiscounts = __webpack_require__(/*! ../cart/approachingDiscounts */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/approachingDiscounts.js\");\nvar detailJS = __webpack_require__(/*! ../product/detail */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/detail.js\");\nlet cartEventsBatch = __webpack_require__(/*! ../batch/cartEventsBatch */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/batch/cartEventsBatch.js\");\nlet cartEventsAdrenalead = __webpack_require__(/*! ../adrenalead/cartEventsAdrenalead */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/adrenalead/cartEventsAdrenalead.js\");\n\nif (document.querySelector('.promo-code-form input') !== null) {\n    const inputCodePromo = document.querySelector('.promo-code-form input').closest('.ocs-input');\n    if (inputCodePromo !== null) {\n        inputCodePromo.addEventListener('click', function(e) {\n            e.currentTarget.querySelector('input').focus();\n        })\n    }\n}\n\n/**\n * appends params to a url\n * @param {string} url - Original url\n * @param {Object} params - Parameters to append\n * @returns {string} result url with appended parameters\n */\nfunction appendToUrl(url, params) {\n    var newUrl = url;\n    newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n        return key + '=' + encodeURIComponent(params[key]);\n    }).join('&');\n\n    return newUrl;\n}\n\n\n/**\n * Add a  product line item to the product list.\n * Originally made for gift wrap, can be extended to more\n * @param {Object} data - AJAX response from the server\n */\nfunction addProductlineItem(data) {\n    $('#cartPage .product-info').first().before(data.productCardHtml);\n    $('#miniCartModal .product-info').first().before(data.productCardHtmlLayer);\n}\n\n/**\n * Updates the availability of a product line item\n * @param {Object} data - AJAX response from the server\n * @param {string} uuid - The uuid of the product line item to update\n */\nfunction updateAvailability(data, uuid) {\n    var lineItem;\n    var messages = '';\n\n    for (var i = 0; i < data.items.length; i++) {\n        if (data.items[i].UUID === uuid) {\n            lineItem = data.items[i];\n            break;\n        }\n    }\n\n    $('.availability-' + lineItem.UUID).empty();\n\n    if (lineItem.availability) {\n        if (lineItem.availability.messages) {\n            lineItem.availability.messages.forEach(function (message) {\n                messages += '<p class=\"line-item-attributes\">' + message + '</p>';\n            });\n        }\n\n        if (lineItem.availability.inStockDate) {\n            messages += '<p class=\"line-item-attributes line-item-instock-date\">'\n                + lineItem.availability.inStockDate\n                + '</p>';\n        }\n    }\n\n    $('.availability-' + lineItem.UUID).html(messages);\n}\n\n/**\n * Finds an element in the array that matches search parameter\n * @param {array} array - array of items to search\n * @param {function} match - function that takes an element and returns a boolean indicating if the match is made\n * @returns {Object|null} - returns an element of the array that matched the query.\n */\nfunction findItem(array, match) {\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (match.call(this, array[i])) {\n            return array[i];\n        }\n    }\n    return null;\n}\n\n/**\n * Updates details of a product line item\n * @param {Object} data - AJAX response from the server\n * @param {string} uuid - The uuid of the product line item to update\n */\nfunction updateProductDetails(data, uuid) {\n    var lineItem = findItem(data.cartModel.items, function (item) {\n        return item.UUID === uuid;\n    });\n\n    if (lineItem.variationAttributes) {\n        var colorAttr = findItem(lineItem.variationAttributes, function (attr) {\n            return attr.attributeId === 'color';\n        });\n\n        if (colorAttr) {\n            var colorSelector = '.color-' + uuid;
15\n            var newColor = colorAttr.displayValue;\n            $(colorSelector).text(newColor);\n        }\n\n        var sizeAttr = findItem(lineItem.variationAttributes, function (attr) {\n            return attr.attributeId === 'size';\n        });\n\n        if (sizeAttr) {\n            var sizeSelector = '.size-' + uuid;\n            var newSize = '\\xa0/ ' + sizeAttr.displayValue;\n            $(sizeSelector).text(newSize);\n        }\n        \n        var lengthAttr = findItem(lineItem.variationAttributes, function (attr) {\n            return attr.attributeId === 'length';\n        });\n        \n        if (lengthAttr) {\n            var lengthSelector = '.length-' + uuid;\n            var newLength = '\\xa0/ ' + lengthAttr.displayValue;\n            $(lengthSelector).text(newLength);\n        }\n\n        var imageSelector = '.card.product-info.uuid-' + uuid + ' .item-image > img';\n        $(imageSelector).attr('src', lineItem.images.small[0].url);\n        $(imageSelector).attr('alt', lineItem.images.small[0].alt);\n        $(imageSelector).attr('title', lineItem.images.small[0].title);\n    }\n\n    var qtySelector = '.quantity[data-uuid=\"' + uuid + '\"]';\n    document.querySelector(qtySelector).closest('.ocs-select') !== null ? document.querySelector(qtySelector).closest('.ocs-select').querySelector('input').value = lineItem.quantity : $(qtySelector).val(lineItem.quantity);\n    $(qtySelector).data('pid', data.newProductId);\n\n    $('.remove-product[data-uuid=\"' + uuid + '\"]').data('pid', data.newProductId);\n    var priceSelector = '.Price-' + uuid;\n    $(priceSelector).replaceWith(lineItem.price.html);\n\n    //ABtestEconomy  segment : economyProductBasket\n    var economySelector = '.js-lineitem-economy-' + uuid;\n    if ($(economySelector).length > 0) {\n        if (lineItem.economy) {\n            $(economySelector).replaceWith(lineItem.economyHtml);\n        } else {\n            $(economySelector).empty();\n        }\n    }\n}\n\n/**\n * Generates the modal window on the first call.\n *\n */\nfunction getModalHtmlElement() {\n    if ($('#editProductModal').length !== 0) {\n        $('#editProductModal').remove();\n    }\n    var htmlString = '\x3c!-- Modal --\x3e'\n        + '<div class=\"modal fade right\" id=\"editProductModal\" role=\"dialog\">'\n        + '<div class=\"modal-dialog quick-view-dialog\">'\n        + '\x3c!-- Modal content--\x3e'\n        + '<div class=\"modal-content\">'\n        + '<div class=\"modal-body\"></div>'\n        + '</div>'\n        + '</div>'\n        + '</div>';\n    $('body').append(htmlString);\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n    var $html = $('<div>').append($.parseHTML(html));\n\n    var body = $html.find('.product-quickview');\n    var footer = $html.find('.modal-footer').children();\n\n    return { body: body, footer: footer };\n}\n/**\n * replaces the content in the modal window for product variation to be edited.\n * @param {string} editProductUrl - url to be used to retrieve a new product model\n */\nfunction fillModalElement(editProductUrl, addToCartOrigin) {\n    \n    $('.modal-body').spinner().start();\n    var cartID = $('.cart-page').data('cartid');\n    $.ajax({\n        url: editProductUrl,\n        method: 'GET',\n        success: function (data) {\
15n            \n            let GTMquickViewCart = __webpack_require__(/*! ../gtm/util/layers/quickViewCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/quickViewCart.js\");\n            var parsedHtml = parseHtml(data);\n            \n            GTMquickViewCart.getDataLayerForLayer({\n                product: $(parsedHtml.body).find('#obj-product').data('product'),\n                cartId: cartID,\n                addedToCartOrigin: addToCartOrigin\n            });\n            /////////////////////////////////\n            \n            \n            var $modalBody = $('#editProductModal .modal-body');\n\n            $modalBody.empty();\n            $modalBody.html(parsedHtml.body);\n            $('#editProductModal #add-to-cart-eresa').empty();\n            $('#editProductModal .modal-footer').html(parsedHtml.footer);\n            $('#editProductModal').modal('show');\n            $('.primary-images .carousel.slide.pointer-event .carousel-indicators li:first-child').click();\n            $.spinner().stop();\n            \n            if ($modalBody.find('.size-length').length) {\n            \t$modalBody.find('.size-length').show();\n            }\n        },\n        error: function () {\n            $.spinner().stop();\n        }\n    });\n}\n\n/**\n * replace content of modal\n * @param {string} actionUrl - url to be used to remove product\n * @param {string} productID - pid\n * @param {string} productName - product name\n * @param {string} uuid - uuid\n */\nfunction confirmDelete(actionUrl, productID, productName, uuid, quantity) {\n    var $deleteConfirmBtn = $('.cart-delete-confirmation-btn');\n    var $productToRemoveSpan = $('.product-to-remove');\n\n    $deleteConfirmBtn.data('pid', productID);\n    $deleteConfirmBtn.data('action', actionUrl);\n    $deleteConfirmBtn.data('uuid', uuid);\n    $deleteConfirmBtn.data('quantity', quantity);\n\n    $productToRemoveSpan.empty().append(productName);\n\n    //for caast\n    $('body').addClass('modal-opendelete');\n}\nfunction couponErrorNotication(couponsErrorMessages) {\n    var error = '';\n    couponsErrorMessages.forEach(function (errorMessage) {\n        error = error + errorMessage + '<br/>'\n    });\n    displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', error);\n}\n\nfunction basketErrorNotification(basketErrorMessage) {\n    displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', basketErrorMessage);\n}\n\nfunction paypalMessage(amount){\n    if($('.pp-message').length){\n        paypal.Messages({\n            amount: amount,\n            placement: 'cart',\n            style: {\n              layout: 'text',\n              logo: {\n                type: 'inline',\n              },\n              text: {\n                size: 14\n              }\n            },\n            onClick: () => {\n                let GTMPaiementNfois = $('.cart').length ? __webpack_require__(/*! ../gtm/util/layers/paiementNFoisCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js\") : __webpack_require__(/*! ../gtm/util/layers/paiementNFoisPDP */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js\");\n                GTMPaiementNfois.getDataLayerForLayer();\n            },\n        })\n        .render('.pp-message');\n    }\n}\n\nfunction updatePaiement(){\n    var seuilPaypal = parseInt($('.msg-paiement-paypal.msg-sup-seuil').data('seuilpaypal'));\n    var seuilAlma = parseInt($('.msg-paiement-alma.msg-sup-seuil').data('seuilalma'));\n    var subTotal = parseInt($('.sub-total').attr('data-subtotal'));\n\n    if(subTotal < seuilPaypal){\n        $('.msg-paiement-paypal.msg-sup-seuil').addClass('d-none');\n        $('.msg-paiement-paypal.msg-inf-seuil').removeClass('d-none');\n    }else{\n        setTimeout(() => {\n            $('.msg-paiement-paypal.msg-sup-seuil').removeClass('d-none');\n            $('.msg-paiement-paypal.msg-inf-seuil').addClass('d-none');       \n        }, 500);\n    }\n\n\n    if(subTotal < seuilAlma){\n        $('.msg-paiement-alma.msg-sup-seuil').addClass('d-none');\n        $('.msg-paiement-alma.msg-inf-seuil').removeClass('d-none');\n    }
15else{\n        setTimeout(() => {\n            $('.msg-paiement-alma.msg-sup-seuil').removeClass('d-none');\n            $('.msg-paiement-alma.msg-inf-seuil').addClass('d-none');       \n        }, 500);\n    }\n}\n\nmodule.exports = function () {\n    $('#offers-conditions-modal').on('shown.bs.modal', function() {\n        let GTMOffersInformations = __webpack_require__(/*! ../gtm/util/layers/offersInformations */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/offersInformations.js\");\n        GTMOffersInformations.getDataLayerForLayer();\n    });\n\n    $('#offers-conditions-modal').on('hidden.bs.modal', function() {\n        let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n        GTMcloseLayer.getDataLayerForAction();\n    })\n\n    $('body').on('change','.shipping-method-list input[type=radio]',function(){ \n        if($(window).width() <= 768){\n            $('body').find('.toscrollTop').each(function(){\n                $(this).removeClass('toscrollTop');\n            });\n            $(this).parent().addClass('toscrollTop');\n            setTimeout(\n                function(){\n                    var position = $('.toscrollTop').offset().top;\n                    var heightMenu = $('#headerNoMenu .header').height();\n                    var anchorPosition = position - heightMenu;\n                    $(\"html, body\").animate( { scrollTop: anchorPosition }, 100);\n                }, 100\n            );\n        }\n    });\n\n    $('body').on('click', 'button.js-add-giftwrap-to-cart', function (e) {\n        e.preventDefault();\n\n        var addGiftWrapToCartUrl = $(this).data('action');\n\n        if (addGiftWrapToCartUrl) {\n            $.ajax({\n                url: addGiftWrapToCartUrl,\n                method: 'GET',\n                success: function (data) {\
15n                    if (data.invalidCoupon) {\n                        couponErrorNotication(data.couponsErrorMessages);\n                    }\n                    if (data.invalidBasket) {\n                        basketErrorNotification(data.basketErrorMessage);\n                    }\n                    addProductlineItem(data);\n                    $('.coupons-and-promos').empty().append(data.cart.totals.discountsHtmlDS);\n                    $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n                    //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n                    //Tracking\n                    let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cartUpdate */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n                    GTMcartUpdate.getDataLayerForAction({\n                        cart: data.cart,\n                        action: 'add giftwrap'\n                    });
15\n                    //////////////////////////////////////////////////////////\n\n                    if($(document).find('#batch').length > 0) {\n                        cartEventsBatch.addedToCart(data.cart);\n                    } else if($(document).find('#adrenalead').length > 0) {\n                        cartEventsAdrenalead.addedToCart(data.cart);\n                    }\n\n                    base.methods.updateCartTotals(data.cart);\n                    approachingDiscounts.updateApproachingDiscounts(data.cart.approachingDiscounts);\n                    $('body').trigger('setShippingMethodSelection', data.cart);\n                    base.methods.validateBasket(data.cart);\n                    $('body').trigger('cart:update');\n                    $('.addGiftContainer').addClass('d-none');\n                    $('.GiftWrapMessage').removeClass('d-none');\n                    $('.GiftWrapMessage textarea')[0].value = \"\";\n                    $('.GiftWrapMessage textarea').removeClass('has-value');\n                    $('.ocs-textarea').removeClass('error');\n                    if (data.regexMessage) {\n                        $('.js-gift-wrap-msg-input').attr('pattern', data.regexMessage);\n                    }\n                    if (data.maxLengthMessage) {\n                        $('.js-gift-wrap-msg-input').attr('maxlength', data.maxLengthMessage);\n                    }\n                    paypalMessage(data.cart.totals.subTotalSimple);\n                    updatePaiement();\n                    $.spinner().stop();\n                },\n                error: function (err) {\n                    if (err.responseJSON.redirectUrl) {\n                        window.location.href = err.responseJSON.redirectUrl;\n                    } else {\n                        displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n                        $.spinner().stop();\n                    }\n                }\n            });\n        }\n    });\n\n    $('body').on('click', 'button.js-add-loyaltycard-to-cart', function (e) {\n        e.preventDefault();\n\n        var addLoyaltyCardToCartUrl = $('.js-add-loyaltycard-to-cart-container').data('action');\n\n        if (addLoyaltyCardToCartUrl) {\n            $.spinner().start();\n            $.ajax({\n                url: addLoyaltyCardToCartUrl,\n                method: 'GET',\n                success: function (data) {\
15n                    if (data.invalidCoupon) {\n                        couponErrorNotication(data.couponsErrorMessages);\n                    }\n                    if (data.invalidBasket) {\n                        basketErrorNotification(data.basketErrorMessage);\n                    }\n                    addProductlineItem(data);\n                    $('.coupons-and-promos').empty().append(data.cart.totals.discountsHtmlDS);\n                    $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n                    //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n                    //Tracking\n                    let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cartUpdate */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n                    GTMcartUpdate.getDataLayerForAction({\n                        cart: data.cart,\n                        action: 'add loyalty card'\n                    });
15\n                    //////////////////////////////////////////////////////////\n\n                    if($(document).find('#batch').length > 0) {\n                        cartEventsBatch.addedToCart(data.cart);\n                    } else if($(document).find('#adrenalead').length > 0) {\n                        cartEventsAdrenalead.addedToCart(data.cart);\n                    }\n\n                    base.methods.updateCartTotals(data.cart);\n                    approachingDiscounts.updateApproachingDiscounts(data.cart.approachingDiscounts);\n                    base.methods.updatePrice(data.basket.items);\n                    $('body').trigger('setShippingMethodSelection', data.cart);\n                    base.methods.validateBasket(data.cart);\n                    $('body').trigger('cart:update');\n                    $('.js-add-loyaltycard-to-cart-container').addClass('d-none');\n                    $.spinner().stop();\n                },\n                error: function (err) {\n                    if (err.responseJSON.redirectUrl) {\n                        window.location.href = err.responseJSON.redirectUrl;\n                    } else {\n                        displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n                        $.spinner().stop();\n                    }\n                }\n            });\n        }\n    });\n\n\n    $('body').on('click', '.remove-product', function (e) {\n        e.preventDefault();\n\n        var actionUrl = $(this).data('action');\n        var productID = $(this).data('pid');\n        var productName = $(this).data('name');\n        var uuid = $(this).data('uuid');\n        var quantity = $(this).data('quantity');\n        confirmDelete(actionUrl, productID, productName, uuid, quantity);\n    });\n\n    $('body').on('afterRemoveFromCart', function (e, data) {\n        e.preventDefault();\n        confirmDelete(data.actionUrl, data.productID, data.productName, data.uuid, data.quantity);\n    });\n\n    $('.optional-promo').click(function (e) {\n        e.preventDefault();\n        $('.promo-code-form').toggle();\n    });\n\n    $('body').on('click', '.cart-delete-confirmation-btn', function (e) {\n        e.preventDefault();\n\n        var productID = $(this).data('pid');\n        var url = $(this).data('action');\n        var uuid = $(this).data('uuid');\n        var quantity = $(this).data('quantity');\n        var urlParams = {\n            pid: productID,\n            uuid: uuid\n        };\n\n        //If on productPage and the best shipping part is present\n        if ($('#js-isproductpage-productid').length > 0) {\n            urlParams.productPageProductId = $('#js-isproductpage-productid').val();\n        }\n        if ($('#js-isproductpage-productquantity').length > 0) {\n            urlParams.productPageProductQuantity = $('#js-isproductpage-productquantity').val();\n        }\n\n        url = appendToUrl(url, urlParams);\n\n        $.spinner().start();\n        $.ajax({\n            url: url,\n            type: 'get',\n            dataType: 'json',\n            success: function (data) {\
15n                let GTMremoveProduct = __webpack_require__(/*! ../gtm/util/actions/removeProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/removeProduct.js\");\n                GTMremoveProduct.getDataLayerForAction({\n                    product: data.product,\n                    quantity: quantity\n                });\n                if (data.basket.items.length === 0) {\n                    if($(document).find('#batch').length > 0) {\n                        cartEventsBatch.cancelledCart();\n                    }\n                    window.location.reload();\n                } else {\n                    if (data.toBeDeletedUUIDs && data.toBeDeletedUUIDs.length > 0) {\n                        for (var i = 0; i < data.toBeDeletedUUIDs.length; i++) {\n                            $('.uuid-' + data.toBeDeletedUUIDs[i]).remove();\n                        }\n                    }\n\n                    // Remove the deleted product from the UI\n                    $('.uuid-' + uuid).remove();\n\n                    if ( data.giftWrapDeletionState !== undefined ) {\n                        if ( data.giftWrapDeletionState.isGiftWrapDeleted == true ) {\n                            // Clean the gift wrap message field\n                            $('.js-gift-wrap-msg-input').val('');\n                            $('.js-gift-wrap-msg-input').attr('value','');\n\n                            /* Remove the gift wrap from the UI. This is used when gift  wrap\n                            is deleted as aconsequence of an other item deletion */\n                            if (data.giftWrapDeletionState.giftWrapProductLineItemUUID ) {\n                                $('.uuid-' + data.giftWrapDeletionState.giftWrapProductLineItemUUID).remove();\n                            }\n                        }\n                    }\n\n                    if (!data.basket.hasBonusProduct) {\n                        $('.bonus-product').remove();\n                    }\n                    if (data.invalidCoupon) {\n                        couponErrorNotication(data.couponsErrorMessages);\n                    }\n                    if (data.invalidBasket) {\n                        basketErrorNotification(data.basketErrorMessage);\n                    }\n                    $('.coupons-and-promos').empty().append(data.basket.totals.discountsHtmlDS);\n                    $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n                    //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n                    //Tracking\n                    let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n                    GTMcartUpdate.getDataLayerForAction({\n                        cart: data.basket,\n                        action: 'delete product'\n                    });\n                    //////////////////////////////////////////////////////////\n\n                    if($(document).find('#batch').length > 0) {\n                        cartEventsBatch.addedToCart(data.basket);\n                    } else if($(document).find('#adrenalead').length > 0) {\n                        cartEventsAdrenalead.addedToCart(data.basket);\n                    }\n\n                    base.methods.updateCartTotals(data.basket);\n                    approachingDiscounts.updateApproachingDiscounts(data.basket.approachingDiscounts);\n                    base.methods.updatePrice(data.basket.items);\n                    $('body').trigger('setShippingMethodSelection', data.basket);\n                    base.methods.validateBasket(data.basket);\n                    base.methods.validateExclusionProducts(data.validExclusionProducts, data.basket);\n                    detailJS.layerPaimentMethod();\n\n                    if (data && data.bestShippingMethodName){\n                        if ($('.js-best-shipping-name').length > 0) {\n                         $('.js-best-shipping-name').empty().html(data.bestShippingMethodName);\n                        }\n                     }\n\n                    if ( data.basketGiftWrapPurchaseState !== undefined ) {\n                        // Manage display of gift wrap add button and gift wrap message content\n\n                        // if ( data.basketGiftWrapPurchaseState.isGiftWrapPurchaseAllowed ) {\n                        const itemsinCart = data.basket.items;\n                        let giftIncart;\n                        itemsinCart.forEach(function(item) {\n                            item.isWrapGift || item.isGift || item.isGiftCardOrECard ? giftIncart = true : false;\n                        })\n                        if (giftIncart == true) {\n                            $(document).find('.addGiftContainer').removeClass('d-none');\n                        } else {\n                            $(document).find('.addGiftContainer').addClass('d-none');\n                            $(document).find('.GiftWrapMessage ').addClass('d-none');\n                        }\n                    }\n\n\n                    // Manage display of gift wrap add button and gift wrap message content\n                    if ( data.isLoyaltyCardPurchaseAllowed ) {\n                        $(document).find('.js-add-loyaltycard-to-cart-container').removeClass('d-none');\n                    } else {\n                        $(document).find('.js-add-loyaltycard-to-cart-container').addClass('d-none');\n                    }\n\n\n                    $('#miniCartModal').modal('show');\n                }\n\n\n                $('body').trigger('cart:update');\n                paypalMessage(data.basket.totals.subTotalSimple);\n                updatePaiement();\n                base.methods.updateFidelityPoints(data);\n                $.spinner().stop();\n            },\n            error: function (err) {\n                let GTMremoveProduct = __webpack_require__(/*! ../gtm/util/actions/removeProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/removeProduct.js\");\n                GTMremoveProduct.getDataLayerForAction({\n                    product: err.responseJSON.product,\n                });\n                if (err.responseJSON.redirectUrl) {\n                    window.location.href = err.responseJSON.redirectUrl;\n                } else {\n                    displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n                    $.spinner().stop();\n                }\n            }\n        });\n    });\n\n    $('body').on('change', '.quantity-form .quantity', function () {\n        var preSelectQty = $(this).data('pre-select-qty');\n        var quantity = $(this).val();\n        var productID = $(this).data('pid');\n        var url = $(this).data('action');\n        var uuid = $(this).data('uuid');\n\n        $(this).children('option').each(function(){\n                    if ($(this).val() == quantity) { \n                        $(this).attr('selected','selected');\n                    }
15else{\n                        $(this).removeAttr('selected');\n                    }\n        });\n\n        var urlParams = {\n            pid: productID,\n            quantity: quantity,\n            uuid: uuid\n        };\n\n        //If on productPage and the best shipping part is present\n        if ($('#js-isproductpage-productid').length > 0) {\n            urlParams.productPageProductId = $('#js-isproductpage-productid').val();\n        }\n        if ($('#js-isproductpage-productquantity').length > 0) {\n            urlParams.productPageProductQuantity = $('#js-isproductpage-productquantity').val();\n        }\n\n        url = appendToUrl(url, urlParams);\n\n        $(this).parents('.card').spinner().start();\n\n        $.ajax({\n            url: url,\n            type: 'get',\n            context: this,\n            dataType: 'json',\n            success: function (data) {\n                $('.quantity[data-uuid=\"' + uuid + '\"]').val(quantity);\n                var productQty;\n                for (var item in data.items) {\n                    if(data.items[item].id == productID) {\n                        productQty = data.items[item].quantity;\n                    }\n                }\n\n                $('.remove-product[data-pid=\"' + productID + '\"]').attr(\"data-quantity\", productQty);\n                $('.coupons-and-promos').empty().append(data.totals.discountsHtmlDS);\n                $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n\n                if (data.invalidCoupon) {\n                    couponErrorNotication(data.couponsErrorMessages);\n                }\n                if (data.invalidBasket) {\n                    basketErrorNotification(data.basketErrorMessage);\n                }\n\n                if (data && data.bestShippingMethodName){\n                    if ($('.js-best-shipping-name').length > 0) {\n                     $('.js-best-shipping-name').empty().html(data.bestShippingMethodName);\n                    }\n                 }\n                 //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n                    //Tracking\n                    let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n                    GTMcartUpdate.getDataLayerForAction({\n                        cart: data,\n                        action: 'quantity change'\n                    });\n                    //////////////////////////////////////////////////////////\n\n                if($(document).find('#batch').length > 0) {\n                    cartEventsBatch.addedToCart(data);\n                } else if($(document).find('#adrenalead').length > 0) {\n                    cartEventsAdrenalead.addedToCart(data);\n                }\n\n                base.methods.updateCartTotals(data);\n                approachingDiscounts.updateApproachingDiscounts(data.approachingDiscounts);\n                updateAvailability(data, uuid);\n                base.methods.updatePrice(data.items);\n                base.methods.validateBasket(data);\n                base.methods.validateExclusionProducts(data.validExclusionProducts, data);\n                $(this).data('pre-select-qty', quantity);\n\n                $('body').trigger('cart:update');\n\n                paypalMessage(data.totals.subTotalSimple);\n                updatePaiement();\n                base.methods.updateFidelityPoints(data);\n                $.spinner().stop();\n                if ($(this).parents('.product-info').hasClass('bonus-product-line-item') && $('.cart-page').length) {\n                    location.reload();\n                }\n            },\n            error: function (err) {\n                if (err.responseJSON.redirectUrl) {\n                    window.location.href = err.responseJSON.redirectUrl;\n                } else {\n                    displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n                    $(this).val(parseInt(preSelectQty, 10));\n                    $.spinner().stop();\n                }\n            }\n        });\n    });\n\n    $('.shippingMethods').change(function () {\n        var url = $(this).attr('data-actionUrl');\n        var urlParams = {\n            methodID: $(this).find(':selected').attr('data-shipping-id')\n        };\n        // url = appendToUrl(url, urlParams);\n\n        $('.totals').spinner().start();\n        $.ajax({\n            url: url,\n            type: 'post',\n            dataType: 'json',\n            data: urlParams,\n            success: function (data) {\
15n                if (data.error) {\n                    window.location.href = data.redirectUrl;\n                } else {\n                    $('.coupons-and-promos').empty().append(data.totals.discountsHtmlDS);\n                    $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n                    base.methods.updateCartTotals(data);\n                    approachingDiscounts.updateApproachingDiscounts(data.approachingDiscounts);\n                    base.methods.validateBasket(data);\n                }\n                $.spinner().stop();\n            },\n            error: function (err) {\n                if (err.redirectUrl) {\n                    window.location.href = err.redirectUrl;\n                } else {\n                    displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n                    $.spinner().stop();\n                }\n            }\n        });\n    });\n\n    /*  */\n    var timer, delay = 500;\n    $('.js-gift-wrap-msg-input').keyup( function(e) {\n        $('#validcart').addClass('disabled');\n        var addGiftWrapMsgToCartUrl = $(this).data('action');\n        var data = {\n            msg: $(this).val()\n        };\n\n        clearTimeout(timer);\n        timer = setTimeout(function() {\n\n            $.ajax({\n                url: addGiftWrapMsgToCartUrl,\n                type: 'GET',\n                dataType: 'json',\n                data: data,\n                success: function (data) {\
15n                    if (data.error) {\n                        //gestion error\n                        var divGiftWrap = $(document).find('.js-gift-wrap-msg-area');\n                        \n                        if ($('.js-gift-wrap-msg-input').closest('.ocs-textarea').length > 0) {\n                            const ocsTextarea = $('.js-gift-wrap-msg-input').closest('.ocs-textarea')[0];\n                            ocsTextarea.classList.add('error');\n                            ocsTextarea.querySelector('.hint .error-message').innerText = data.errormsg;\n\n                        } else {\n                            divGiftWrap.addClass('is-invalid');\n                            $('.js-gift-wrap-msg-input').addClass('is-invalid').removeClass('valid');\n                            divGiftWrap.find('.invalid-feedback').addClass('d-block').removeClass('d-none');\n                            divGiftWrap.find('.invalid-feedback').text(data.errormsg);\n                        }\n\n                    } else {\n                        var divGiftWrap = $(document).find('.js-gift-wrap-msg-area');\n                        var msg = data.queryString.split(\"msg=\");\n                        \n                        $('.js-gift-wrap-msg-input').attr('value',msg[1]);\n                        \n                        $('#validcart').removeClass('disabled');\n                        if ($('.js-gift-wrap-msg-input').closest('.ocs-textarea').length > 0) {\n                            const ocsTextarea = $('.js-gift-wrap-msg-input').closest('.ocs-textarea')[0];\n                            ocsTextarea.classList.remove('error');\n                        } else {\n                            divGiftWrap.removeClass('is-invalid');\n                            $('.js-gift-wrap-msg-input').addClass('valid').removeClass('is-invalid');\n                            divGiftWrap.find('.invalid-feedback').addClass('d-none').removeClass('d-block');\n                            divGiftWrap.find('.invalid-feedback').text('');\n                        }\n                    }\n                },\n                error: function (err) {\n                    if (err.responseJSON.redirectUrl) {\n                        window.location.href = err.responseJSON.redirectUrl;\n                    } else {\n                        displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.errorMessage);\n                        $.spinner().stop();\n                    }\n                }\n            });\n        }, delay );\n    });\n\n    $('.promo-code-form').submit(function (e) {\n        e.preventDefault();\n        $.spinner().start();\n        const ocsInput = $(\"label[for='couponCode']\").closest('.ocs-input')[0];\n        ocsInput.querySelector('.hint').style.display = \"none\";\n        ocsInput.querySelector('.hint .coupon-missing-error').style.display = \"none\";\n        ocsInput.classList.remove('dirty', 'invalid');\n        $('.coupon-error-message').empty();\n        if (!$('.coupon-code-field').val()) {\n            ocsInput.classList.add('dirty', 'invalid');\n            ocsInput.querySelector('.hint').style.display = \"block\";\n            ocsInput.querySelector('.hint .coupon-missing-error').style.display = \"block\";\n            $.spinner().stop();\n            return false;\n        }\n        var $form = $('.promo-code-form');\n        ocsInput.classList.remove('dirty', 'invalid');\n        ocsInput.querySelector('.hint').style.display = \"none\";\n        ocsInput.querySelector('.hint .coupon-missing-error').style.display = \"none\";\n        $('.coupon-error-message').empty();\n        $('.coupon-code-field').val($('.coupon-code-field').val().trim());\n        var code = $('.coupon-code-field').val();\n        $.ajax({\n            url: $form.attr('action'),\n            type: 'GET',\n            dataType: 'json',\n            data: $form.serialize(),\n            success: function (data) {\
15n                if (data.error) {\n                    let GTMpromoCode = __webpack_require__(/*! ../gtm/util/actions/promoCode */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/promoCode.js\");\n                    GTMpromoCode.getDataLayerForAction({\n                        validity: 'invalid',\n                        label: code\n                    });\n                    ocsInput.classList.add('dirty', 'invalid');\n                    ocsInput.querySelector('.hint').style.display = \"block\";\n                    $('.coupon-error-message').empty().append(data.errorMessage);\n                    if (data.invalidCoupon) {\n                        couponErrorNotication(data.couponsErrorMessages);\n                    }\n                    if (data.invalidBasket) {\n                        basketErrorNotification(data.basketErrorMessage);\n                    }\n                    if (data.basketModel) {\n                        base.methods.updateCartTotals(data.basketModel);\n                        approachingDiscounts.updateApproachingDiscounts(data.basketModel.approachingDiscounts);\n                        base.methods.validateBasket(data.basketModel);\n                    }\n                } else {\n                    let GTMpromoCode = __webpack_require__(/*! ../gtm/util/actions/promoCode */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/promoCode.js\");\n                    GTMpromoCode.getDataLayerForAction({\n                        validity: 'valid',\n                        label: code,\n                        totals: data.totals\n                    });\n                    if (data.invalidCoupon) {\n                        couponErrorNotication(data.couponsErrorMessages);\n                    }\n                    if (data.invalidBasket) {\n                        basketErrorNotification(data.basketErrorMessage);\n                    }\n                    $('.coupons-and-promos').empty().append(data.totals.discountsHtmlDS);\n                    $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n                    //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n                    //Tracking\n                    let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n                    GTMcartUpdate.getDataLayerForAction({\n                        cart: data,\n                        action: 'coupon added'\n                    });\n                    //////////////////////////////////////////////////////////\n\n                    if($(document).find('#batch').length > 0) {\n                        cartEventsBatch.addedToCart(data);\n                    } else if($(document).find('#adrenalead').length > 0) {\n                        cartEventsAdrenalead.addedToCart(data);\n                    }\n                    base.methods.updateCartTotals(data);\n                    approachingDiscounts.updateApproachingDiscounts(data.approachingDiscounts);\n                    base.methods.validateBasket(data);\n                    \n                    base.methods.updateFidelityPoints(data);\n                    $('.coupon-code-field').val('');\n                }\n                $.spinner().stop();\n            },\n            error: function (err) {\n                if (err.responseJSON.redirectUrl) {\n                    window.location.href = err.responseJSON.redirectUrl;\n                } else {\n                    displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.errorMessage);\n                    $.spinner().stop();\n                }\n            }\n        });\n        return false;\n    });\n\n    $('body').on('click', '.remove-coupon', function (e) {\n        e.preventDefault();\n\n        var couponCode = $(this).data('code');\n        var uuid = $(this).data('uuid');\n        var $deleteConfirmBtn = $('.delete-coupon-confirmation-btn');\n        var $productToRemoveSpan = $('.coupon-to-remove');\n\n        $deleteConfirmBtn.data('uuid', uuid);\n        $deleteConfirmBtn.data('code', couponCode);\n\n        $productToRemoveSpan.empty().append(couponCode);\n    });\n\n    $('body').on('click', '.delete-coupon-confirmation-btn', function (e) {\n        e.preventDefault();\n\n        var url = $(this).data('action');\n        var uuid = $(this).data('uuid');\n        var couponCode = $(this).data('code');\n        var urlParams = {\n            code: couponCode,\n            uuid: uuid\n        };\n\n        url = appendToUrl(url, urlParams);\n\n        $('body > .modal-backdrop').remove();\n\n        $.spinner().start();\n        $.ajax({\n            url: url,\n            type: 'get',\n            dataType: 'json',\n            success: function (data) {\
15n                $('.coupon-uuid-' + uuid).remove();\n                //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n                    //Tracking\n                    let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cartUpdate */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n                    GTMcartUpdate.getDataLayerForAction({\n                        cart: data,\n                        action: 'delete coupon'\n                    });\n                    //////////////////////////////////////////////////////////\n\n                    if($(document).find('#batch').length > 0) {\n                        cartEventsBatch.addedToCart(data);\n                    } else if($(document).find('#adrenalead').length > 0) {\n                        cartEventsAdrenalead.addedToCart(data);\n                    }\n                base.methods.updateCartTotals(data);\n                approachingDiscounts.updateApproachingDiscounts(data.approachingDiscounts);\n                base.methods.validateBasket(data);\n                $.spinner().stop();\n            },\n            error: function (err) {\n                if (err.responseJSON.redirectUrl) {\n                    window.location.href = err.responseJSON.redirectUrl;\n                } else {\n                    displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n                    $.spinner().stop();\n                }\n            }\n        });\n    });\n    $('body').on('click', '.cart-page .bonus-product-button', function () {\n        $.spinner().start();\n        $.ajax({\n            url: $(this).data('url'),\n            method: 'GET',\n            dataType: 'json',\n            success: function (data) {\
15n                base.methods.editBonusProducts(data);\n                $.spinner().stop();\n            },\n            error: function () {\n                $.spinner().stop();\n            }\n        });\n    });\n\n    $('body').on('hidden.bs.modal', '#editProductModal', function () {\n        let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n        GTMcloseLayer.getDataLayerForAction();\n    });\n\n    $('body').on('click', '.cart-page .product-edit .edit, .cart-page .bundle-edit .edit', function (e) {\n        e.preventDefault();\n\n        var editProductUrl = $(this).data('url');\n        var addToCartOrigin = $(this).parents('.product-info').data('origin');\n        getModalHtmlElement();\n        fillModalElement(editProductUrl, addToCartOrigin);\n\n        let GTMeditCart = __webpack_require__(/*! ../gtm/util/layers/editCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/editCart.js\");\n        GTMeditCart.getDataLayerForLayer();\n    });\n\n    $('body').on('click', '.js-edit-product-title, .js-edit-product-img', function (e) {\n        e.preventDefault();\n\n        var addToCartOrigin = $(this).parents('.product-info').data('origin');\n        var editProductUrl = $(this).data('url');\n        getModalHtmlElement();\n        fillModalElement(editProductUrl, addToCartOrigin);\n        if (e.currentTarget.classList.contains('js-edit-product-title')) {\n            let GTMeditCartProductTitle = __webpack_require__(/*! ../gtm/util/actions/clicProductCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicProductCart.js\");\n            GTMeditCartProductTitle.getDataLayerForAction();\n        }\n    });\n    ///////////////////////////////////////////////////////\n    \n    $('body').on('click', '.cart-product-title, .pdp-link .link, .product-tile .tile-body .pdp-brand-title, .product-tile .tile-body .color-swatches, .product-tile .image-container', function (e) {\n        if ($('.Cart-Show').length > 0) {\n            let GTMeditCartProductTitle = __webpack_require__(/*! ../gtm/util/actions/clicProductCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicProductCart.js\");\n            GTMeditCartProductTitle.getDataLayerForAction();\n        }\n    });\n    \n\n    $('body').on('product:updateAddToCart', function (e, response) {\n        $('.availability-msg').removeClass('error-select-size');\n        // $('button.update-cart-product-global', response.$productContainer).attr('disabled',\n        //     (!response.product.readyToOrder || !response.product.available));\n    });\n\n    $('body').on('product:updateAvailability', function (e, response) {\n        // bundle individual products\n        $('.product-availability', response.$productContainer)\n            .data('ready-to-order', response.product.readyToOrder)\n            .data('available', response.product.available)\n            .find('.availability-msg')\n            .empty()\n            .html(response.message);\n\n\n        var dialog = $(response.$productContainer)\n            .closest('.quick-view-dialog');\n\n        if ($('.product-availability', dialog).length) {\n            // bundle all products\n            var allAvailable = $('.product-availability', dialog).toArray()\n                .every(function (item) { return $(item).data('available'); });\n\n            var allReady = $('.product-availability', dialog).toArray()\n                .every(function (item) { return $(item).data('ready-to-order'); });\n\n            $('.global-availability', dialog)\n                .data('ready-to-order', allReady)\n                .data('available', allAvailable);\n\n            $('.global-availability .availability-msg', dialog).empty()\n                .html(allReady ? response.message : response.resources.info_selectforstock);\n        } else {\n            // single product\n            $('.global-availability', dialog)\n                .data('ready-to-order', response.product.readyToOrder)\n                .data('available', response.product.available)\n                .find('.availability-msg')\n                .empty()\n                .html(response.message);\n        }\n    });\n\n    $('body').on('product:afterAttributeSelect', function (e, response) {\n        if ($('.modal.show .product-quickview .bundle-items').length) {\n            $('.modal.show').find(response.container).data('pid', response.data.product.id);\n            $('.modal.show').find(response.container).find('.product-id').text(response.data.product.id);\n        } else {\n            $('.modal.show .product-quickview').data('pid', response.data.product.id);\n        }\n    });\n\n    $('body').on('change', '.quantity-select', function (e) {\n        var selectedQuantity = $(this).val();\n        $('.modal.show .update-cart-url').data('selected-quantity', selectedQuantity);\n        $('.remove-product').data('quantity', selectedQuantity);\n        e.currentTarget.closest('.ocs-select') !== null ? e.currentTarget.closest('.ocs-select').querySelector('input').value = selectedQuantity : false;\n    });\n\n    $('body').on('click', '.update-cart-product-global', function (e) {\n        e.preventDefault();\n        \n        //remove the quickViewModal if exist on the cart. Else There are conflicts with base.getPidValue\n        if ($('#quickViewModal').length !== 0) {\n            $('#quickViewModal').remove();\n        }\n        var updateProductUrl = $(this).closest('.cart-and-ipay').find('.update-cart-url').val();\n        var selectedQuantity = $(this).closest('.cart-and-ipay').find('.update-cart-url').data('selected-quantity');\n        var uuid = $(this).closest('.cart-and-ipay').find('.update-cart-url').data('uuid');\n\n        var form = {\n            uuid: uuid,\n            pid: base.getPidValue($(this)),\n            quantity: selectedQuantity\n        };\n\n        if ($(this).parents('.card').length > 0)\n            $(this).parents('.card').spinner().start();\n        else\n            $(this).parents('.product-detail').spinner().start();\n\n        if (updateProductUrl) {\n            $.ajax({\n                url: updateProductUrl,\n                type: 'post',\n                context: this,\n                data: form,\n                dataType: 'json',\n                success: function (data) {\
15n                    $('#editProductModal').remove();\n                    $('.modal-backdrop').remove();\n                    $('body').removeClass('modal-open');\n                    $('body').removeAttr(\"style\");\n                    let GTMeditProduct = __webpack_require__(/*! ../gtm/util/actions/editProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/editProduct.js\");\n                    var productQty;\n                    // boucler sur data.product.quantities et selectionner celui \"selected\" et ajouter en param\n                    for (var item in data.cartModel.items) {\n                        if(data.cartModel.items[item].uuid == data.product.uuid) {\n                            productQty = data.cartModel.items[item].quantity;\n                        }\n                    }\n                    GTMeditProduct.getDataLayerForAction({\n                        product: data.product,\n                        quantity: productQty\n                    });\n                    if (data.invalidCoupon) {\n                        couponErrorNotication(data.couponsErrorMessages);\n                    }\n                    if (data.invalidBasket) {\n                        basketErrorNotification(data.basketErrorMessage);\n                    }\n                    $('.coupons-and-promos').empty().append(data.cartModel.totals.discountsHtmlDS);\n                    $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n\n                    //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n                    //Tracking\n                    let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n                    GTMcartUpdate.getDataLayerForAction({\n                        cart: data.cartModel,\n                        action: 'product updated'\n                    });\n                    //////////////////////////////////////////////////////////\n\n                    if($(document).find('#batch').length > 0) {\n                        cartEventsBatch.addedToCart(data.cartModel);\n                    } else if($(document).find('#adrenalead').length > 0) {\n                        cartEventsAdrenalead.addedToCart(data.cartModel);\n                    }\n                    base.methods.updateCartTotals(data.cartModel);\n                    approachingDiscounts.updateApproachingDiscounts(data.cartModel.approachingDiscounts);\n                    updateAvailability(data.cartModel, uuid);\n                    updateProductDetails(data, uuid);\n\n                    if (data.uuidToBeDeleted) {\n                        $('.uuid-' + data.uuidToBeDeleted).remove();\n                    }\n\n                    base.methods.validateBasket(data.cartModel);\n\n                    $('body').trigger('cart:update');\n                    paypalMessage(data.cartModel.totals.subTotalSimple);\n                    updatePaiement();\n                    base.methods.updateFidelityPoints(data);\n                    $.spinner().stop();\n                },\n                error: function (err) {\n                    let GTMeditProduct = __webpack_require__(/*! ../gtm/util/actions/editProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/editProduct.js\");\n                    GTMeditProduct.getDataLayerForAction({\n                        product: err.responseJSON.product,\n                    });\n                    if (err.responseJSON.redirectUrl) {\n                        window.location.href = err.responseJSON.redirectUrl;\n                    } else {\n                        displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.responseJSON.errorMessage);\n                        $.spinner().stop();\n                    }\n                }\n            });\n        }\n    });\n\n    /*--- Start tracking Layer return Abtestblockreassurance---*/\n    $('#sendReturnModal').on('shown.bs.modal', function() {\n        let GTMreturn = __webpack_require__(/*! ../gtm/util/layers/return */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/return.js\");\n        GTMreturn.getDataLayerForLayer();\n    });\n\n    $('#sendReturnModal').on('hidden.bs.modal', function() {\n        // let GTMreturn = require('./gtm/util/layers/return');\n        // GTMreturn.removeDataLayer();\n        let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n        GTMcloseLayer.getDataLayerForAction();\n    });\n\n    $('#modalAlmaPaypal').on('hidden.bs.modal', function(){\n        let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n        GTMcloseLayer.getDataLayerForAction();\n    });\n    $('#modalAlma').on('hidden.bs.modal', function(){\n        let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n        GTMcloseLayer.getDataLayerForAction();\n    });\n    $('#modalPaypal').on('hidden.bs.modal', function(){\n        let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n        GTMcloseLayer.getDataLayerForAction();\n    });\n    $('body').on('click','#trigger-closing',function(){\n        let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n        GTMcloseLayer.getDataLayerForAction();\n    })\n\n    /*--- End tracking Layer return Abtestblockreassurance---*/\n\n    //$('.item-attributes .line-item-attributes:first-child').after('<div class=\"line-item-attributes mx-2\"> / </div>');\n    paypalMessage($('.cart-totals-container .sub-total').data('subtotal'))\n    detailJS.layerPaimentMethod();\n    base.ratingAttribute();\n    base.selectAttribute();\n    base.colorAttribute();\n    base.removeBonusProduct();\n    base.selectBonusProduct();\n    base.enableBonusProductSelection();\n    base.showMoreBonusProducts();\n    base.addBonusProductsToCart();\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/cart.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/collapsibleItem.js":function(module,exports,__webpack_require__){"use strict";eval("\nmodule.exports = function () {\n    var sizes = ['xs', 'sm', 'md', 'lg', 'xl'];\n\n    sizes.forEach(function (size) {\n        var selector = '.card-header';\n\n        $(selector).on('show.bs.collapse', function(e) {\n                $(this).addClass('active');\n                $(this).attr('aria-expanded', true);\n        });\n\n        $(selector).on('hide.bs.collapse', function(e) {\n                $(this).removeClass('active');\n                $(this).attr('aria-expanded', false);\n        });\n\n    });\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/collapsibleItem.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/countrySelector.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar keyboardAccessibility = __webpack_require__(/*! ./keyboardAccessibility */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/keyboardAccessibility.js\");\n\n$('#localeSelectModal').on('shown.bs.modal', function () {\n    let GTMlocaleSelector = __webpack_require__(/*! ../gtm/util/layers/localeSelector */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/localeSelector.js\");\n    GTMlocaleSelector.getDataLayerForLayer();\n})\n\n$('#localeSelectModal').on('hidden.bs.modal', function () {\n    // let GTMlocaleSelector = require('../gtm/util/layers/localeSelector');\n    // GTMlocaleSelector.removeDataLayer();\n    let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n    GTMcloseLayer.getDataLayerForAction();\n})\n\nfunction setCookie(key, value, expiry) {\n    var expires = new Date();\n    expires.setTime(expires.getTime() + (expiry * 24 * 60 * 60 * 1000));\n    document.cookie = key + '=' + value + ';expires=' + expires.toUTCString()+'; path=/';\n}\n\nmodule.exports = function () {\n    $('.country-selector span').click(function (e) {\n        e.preventDefault();\n        var action = $('.page').data('action');\n        var localeCode = $(this).data('locale');\n        var localeCurrencyCode = $(this).data('currencycode');\n        var siteID = $(this).data('siteid');\n        var queryString = $('.page').data('querystring');\n        var url;\n\n        var countryCode = localeCode.split('_')['1'];\n\n        var datalocale = localeCode.replace('_', '-').toLowerCase();\n        var changeRedirect = false;\n        $('link').each(function () {\n            var hreflang = $(this).attr('hreflang');\n\n            if (hreflang && hreflang == datalocale) {\n                url = $(this)[0].href;\n                changeRedirect = true;\n                return;\n            }\n        });\n\n        if (changeRedirect) {\n            var countryCode = localeCode.split('_')['1'];\n            setCookie('countryselectedsfcc',countryCode,365);\n            window.location.href = url;\n        } else {\n            url = $('.country-selector').data('url');\n            $.ajax({\n                url: url,\n                type: 'get',\n                dataType: 'json',\n                data: {\n                    code: localeCode,\n                    queryString: queryString,\n                    siteID: siteID,\n                    CurrencyCode: localeCurrencyCode,\n                    action: action\n                },\n                success: function (response) {\n                    $.spinner().stop();\n                    if (response && response.redirectUrl) {\n                        window.location.href = response.redirectUrl;\n                    }\n                },\n                error: function () {\n                    $.spinner().stop();\n                }\n            });\n        }\n    });\n\n    keyboardAccessibility('.navbar-header .country-selector',\n        {\n            40: function ($countryOptions) { // down\n                if ($(this).is(':focus')) {\n                    $countryOptions.first().focus();\n                } else {\n                    $(':focus').next().focus();\n                }\n            },\n            38: function ($countryOptions) { // up\n                if ($countryOptions.first().is(':focus') || $(this).is(':focus')) {\n                    $(this).focus();\n                    $(this).removeClass('show');\n                } else {\n                    $(':focus').prev().focus();\n                }\n            },\n            27: function () { // escape\n                $(this).focus();\n                $(this).removeClass('show').children('.dropdown-menu').removeClass('show');\n            },\n            9: function () { // tab\n                $(this).removeClass('show').children('.dropdown-menu').removeClass('show');\n            }\n        },\n        function () {\n            if (!($(this).hasClass('show'))) {\n                $(this).addClass('show');\n            }\n            return $(this).find('.dropdown-country-selector').children('a');\n        }\n    );\n\n    $('.navbar-header .country-selector').on('focusin', function () {\n        $(this).addClass('show').children('.dropdown-menu').addClass('show');\n    });\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/countrySelector.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/footer.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar scrollAnimate = __webpack_require__(/*! ./scrollAnimate */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/scrollAnimate.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\n\nmodule.exports = function () {\n    $('.back-to-top').click(function () {\n        scrollAnimate();\n    });\n\n    $('form#formNewsletter').submit(function (e) {\n        e.preventDefault();\n        \n        $.spinner().start();\n        \n        var $form = $(this);\n        \n        var url = $form.attr('action');\n        \n        $.ajax({\n            url: url,\n            type: 'post',\n            dataType: 'json',\n            data: $form.serialize(),\n            success: function (data) {\n                if (data.redirect) {\n                \twindow.location.href = data.redirect;\n                }\n                \t\n                if (data.success === true) {\n                    let GTMnewsletter = __webpack_require__(/*! ../gtm/util/actions/newsletter */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/newsletter.js\");\n                    GTMnewsletter.getDataLayerForAction();\n                }\n                \n                if (data.msg) {\n                    $.spinner().stop();\n                    displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.msg);\n                }\n            },\n            error: function (err) {\n                $.spinner().stop();\n                displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', err.msg);\n            }\n        });\n    });\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/footer.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/formValidation.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nfunction clearFormErrors(form) {\n    $(form).find('.form-control.is-invalid').removeClass('is-invalid');\n}\n\nmodule.exports = function (formElement, data) {\n    // clear form validation first\n    clearFormErrors(formElement);\n    $('.alert', formElement).remove();\n\n    if (typeof data === 'object' && data.fields) {\n        Object.keys(data.fields).forEach(function (key) {\n            if (data.fields[key]) {\n                var feedbackElement = $(formElement).find('[name=\"' + key + '\"]');\n                var reactOcs = feedbackElement.closest('.ocs-form').length !== 0  ? true : false;\n                !reactOcs ? feedbackElement = feedbackElement.parent().children('.invalid-feedback') : feedbackElement = feedbackElement[0];   \n\n                if (reactOcs) {\n                    const errorContainer = '<div class=\"hint\" role=\"alert\"><p class=\"invalid-text\"><i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>'+data.fields[key]+'</p></div>';\n                    const containerFeddback = feedbackElement.closest('.ocs-input');\n                    const hint = containerFeddback.querySelectorAll('.hint');\n                    if (hint !== null) {\n                        hint.forEach(function(ht) {\n                            ht.getAttribute('role') !== null ? ht.remove() : false;\n                        })\n                    }\n                    containerFeddback.classList.remove('valid');\n                    containerFeddback.classList.add('dirty', 'invalid');\n                    containerFeddback.insertAdjacentHTML(\"beforeend\", errorContainer);\n                } else {\n                    if (feedbackElement.length > 0) {\n                        if (Array.isArray(data[key])) {\n                            feedbackElement.html(data.fields[key].join('<br/>'));\n                        } else {\n                            feedbackElement.html(data.fields[key]);\n                        }\n                        feedbackElement.siblings('.form-control').removeClass('valid');\n                        feedbackElement.siblings('.form-control').addClass('is-invalid');\n                    }\n                }\n            }\n        });\n    }\n    if (data && data.error) {\n        if (data.errorMessage) {\n            displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.errorMessage);\n        } else {\n            displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.error);\n        }\n    }\n\n    if (data && data.success && data.msg) {\n        displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'success', data.msg);\n    }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/formValidation.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/keyboardAccessibility.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (selector, keyFunctions, preFunction) {\n    $(selector).on('keydown', function (e) {\n        var key = e.which;\n        var supportedKeyCodes = [37, 38, 39, 40, 27];\n        if (supportedKeyCodes.indexOf(key) >= 0) {\n            e.preventDefault();\n        }\n        var returnedScope = preFunction.call(this);\n        if (keyFunctions[key]) {\n            keyFunctions[key].call(this, returnedScope);\n        }\n    });\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/keyboardAccessibility.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/menu.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n\nvar keyboardAccessibility = __webpack_require__(/*! ./keyboardAccessibility */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/keyboardAccessibility.js\");\n\nvar clearSelection = function (element) {\n    $(element).parents('.nav-menu').siblings().addClass('d-none');\n    $(element).closest('.dropdown').children('.dropdown-menu').children('.top-category')\n        .detach();\n    $(element).closest('.dropdown.show').children('.nav-link').attr('aria-expanded', 'false');\n    $(element).closest('.dropdown.show').removeClass('show');\n    $(element).closest('li').detach();\n};\n\nfunction handleDropDownOnShow() {\n    var el = $('.nav-item.dropdown.show > .isMobileMenu > .dropdown-menu > .dropdown:not(.disabled) [data-toggle=\"dropdown\"]');\n    el.on('click', function (e) {\n        e.preventDefault();\n        $(this).parents('.dropdown-item').siblings().addClass('d-none');\n        $('.multilevel-dropdown .dropdown-item.show .dropdown-link').removeClass('d-none');\n    });\n}\n\nfunction handleDropDownOnHide(el) {\n\n    el.siblings().removeClass('d-none');\n    $('.multilevel-dropdown .dropdown-item.show .dropdown-link').addClass('d-none');\n}\n\nmodule.exports = function () {\n    var initWidth = $(window).width();\n    var isDesktop = function (element) {\n        return $(element).parents('.menu-toggleable-left').css('position') !== 'fixed';\n    };\n\n    var headerBannerStatus = window.sessionStorage.getItem('hide_header_banner');\n    $('.header-banner .close').on('click', function () {\n        $('.header-banner').addClass('d-none');\n        window.sessionStorage.setItem('hide_header_banner', '1');\n    });\n\n    if (!headerBannerStatus || headerBannerStatus < 0) {\n        $('.header-banner').removeClass('d-none');\n    }\n\n    $(window).on('resize', function () {\n        if ($(window).outerWidth() >= 1280) {\n            $('.modal-background').hide();\n            $('.close-button').trigger('click');\n            $('.show .nav-menu .back').trigger('click');\n            $('.menu-responsive  .nav-item').removeClass('d-none')\n            $('.menu-responsive  .nav-item').find('.dropdown-item').removeClass('d-none');\n        }\n        else {\n            if (!$('.menu-responsive').find('.show').length) {\n                $('.menu-responsive  .nav-item').find('.dropdown-item').addClass('d-none');\n                $('.menu-responsive').siblings().removeClass('d-none');\n                $('.dropdown:not(.disabled) [data-toggle=\"dropdown\"]').bind('click');\n                $('.multilevel-dropdown .dropdown-item .dropdown-link').removeClass('d-none');\n            }\n        }\n    });\n\n\n    keyboardAccessibility('.main-menu .nav-link, .main-menu .dropdown-link', {\n        40: function (menuItem) { // down\n            if (menuItem.hasClass('nav-item')) { // top level\n                $('.navbar-nav .show').removeClass('show')\n                    .children('.dropdown-menu')\n                    .removeClass('show');\n                menuItem.addClass('show').children('.dropdown-menu').addClass('show');\n                $(this).attr('aria-expanded', 'true');\n                menuItem.find('ul > li > a')\n                    .first()\n                    .focus();\n            } else {\n                menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n                $(this).attr('aria-expanded', 'false');\n                menuItem.next().children().first().focus();\n            }\n        },\n        39: function (menuItem) { // right\n            if (menuItem.hasClass('nav-item')) { // top level\n                menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n                $(this).attr('aria-expanded', 'false');\n                menuItem.next().children().first().focus();\n            } else if (menuItem.hasClass('dropdown')) {\n                menuItem.addClass('show').children('.dropdown-menu').addClass('show');\n                $(this).attr('aria-expanded', 'true');\n                menuItem.find('ul > li > a')\n                    .first()\n                    .focus();\n            }\n        },\n        38: function (menuItem) { // up\n            if (menuItem.hasClass('nav-item')) { // top level\n                menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n                $(this).attr('aria-expanded', 'false');\n            } else if (menuItem.prev().length === 0) {\n                menuItem.parent().parent().removeClass('show')\n                    .children('.nav-link')\n                    .attr('aria-expanded', 'false');\n                menuItem.parent().parent().children().first()\n                    .focus();\n            } else {\n                menuItem.prev().children().first().focus();\n            }\n        },\n        37: function (menuItem) { // left\n            if (menuItem.hasClass('nav-item')) { // top level\n                menuItem.removeClass('show').children('.dropdown-menu').removeClass('show');\n                $(this).attr('aria-expanded', 'false');\n                menuItem.prev().children().first().focus();\n            } else {\n                menuItem.closest('.show').removeClass('show')\n                    .closest('li.show').removeClass('show')\n                    .children()\n                    .first()\n                    .focus()\n                    .attr('aria-expanded', 'false');\n            }\n        },\n        27: function (menuItem) { // escape\n            var parentMenu = menuItem.hasClass('show') ?\n                menuItem :\n                menuItem.closest('li.show');\n            parentMenu.children('.show').removeClass('show');\n            parentMenu.removeClass('show').children('.nav-link')\n                .attr('aria-expanded', 'false');\n            parentMenu.children().first().focus();\n        }\n    },\n        function () {\n            return $(this).parent();\n        }\n    );\n\n    $(document).on(\"keyup\", \".dropdown:not(.disabled) .dropdown-link\" , function(e) {\n        if (e.code == \"Escape\") {\n            $('.dropdown:not(.disabled) [data-toggle=\"dropdown\"]').trigger('mouseleave');\n        }\n    })\n\n    $('.dropdown:not(.disabled) [data-toggle=\"dropdown\"]')\n        .on('click', function (e) {\n            if (!isDesktop(this)) {\n                $('.modal-background').show();\n                // copy parent element into current UL \n                var titre = $(this).clone().removeClass('dropdown-toggle').addClass('top-category')\n                    .removeAttr('data-toggle')\n                    .removeAttr('aria-expanded')\n                    .attr('aria-haspopup', 'false');\n                var closeMenu = $('<li class=\"nav-menu\"></li>');\n                closeMenu.append($('.close-menu').first().clone());\n                closeMenu.prepend(titre);\n                $(this).parent().children('.dropdown-menu')\n                    .prepend(closeMenu);\n                $(this).siblings('.mobile-menu').children('.dropdown-menu').prepend(closeMenu);\n                // copy navigation menu into view\n                $(this).parent().addClass('show');\n                $(this).parents('.menu-responsive').siblings().addClass('d-none').removeClass('d-xl-none');\n                //$('.dropdown-item').removeClass('d-none');\n                if ($(this).parent().find('.isMobileMenu').length) {\n                    $(this).parent().find('.isMobileMenu > .dropdown-menu  > .dropdown-item').removeClass('d-none');\n                }\n                else {\n                    $(this).parent().find('> .dropdown-menu  > .dropdown-item').removeClass('d-none');\n                }\n\n                $('.menu-responsive  .nav-item').not('.show').addClass('d-none');\n\n                $(this).attr('aria-expanded', 'true');\n                e.preventDefault();\n                var topCategory = $(this).parent().find('.top-category');\n                $(this).parent().find('.navbar-brand').detach();\n                $(this).parent().find('.back').after(topCategory);\n                $(this).parent().find('.top-category > a').removeClass('nav-link').addClass('top-nav-link');\n                handleDropDownOnShow();\n            }\n        })\n        .on('mouseenter', function () {\n            if (isDesktop(this)) {\n                var eventElement = this;\n                $('.navbar-nav > li').each(function () {\n                    if (!$.contains(this, eventElement)) {\n                        $(this).find('.show').each(function () {\n                            clearSelection(this);\n                        });\n                        if ($(this).hasClass('show')) {\n                            $(this).removeClass('show');\n                            $(this).children('ul.dropdown-menu').removeClass('show');\n                            $(this).children('.nav-link').attr('aria-expanded', 'false');\n                        }\n                    }\n                });\n                // need to close all the dropdowns that are not direct parent of current dropdown\n                $(this).parent().addClass('show');\n                $(this).siblings('.dropdown-menu').addClass('show');\n                $(this).attr('aria-expanded', 'true');\n            }\n        })\n        .parent()\n        .on('mouseleave', function () {\n            if (isDesktop(this)) {\n                $(this).removeClass('show');\n                $(this).children('.dropdown-menu').removeClass('show');\n                $(this).children('.nav-link').attr('aria-expanded', 'false');\n            }\n        });\n\n    $('.navbar>.close-menu>
15.close-button, .modal-background').on('click', function (e) {\n        e.preventDefault();\n        $('.menu-toggleable-left').removeClass('in');\n        if ($('.refinement-bar').hasClass('hidden')) {\n            $('.refinement-bar').hide();\n            $('.refinement-bar').removeClass('hidden');\n        }\n        $('.modal-background').hide();\n        $('body').removeClass('modal-open');\n        $('.navbar-toggler').focus();\n        //$('.main-menu').attr('aria-hidden', 'true');\n        $('.main-menu').siblings().attr('aria-hidden', 'false');\n        $('header').siblings().attr('aria-hidden', 'false');\n        $('.menu-responsive').siblings().removeClass('d-none').addClass('d-xl-none');\n\n        if (!$('.menu-responsive  .nav-item.show').length) {\n            $('.menu-responsive  .nav-item').not('.show').removeClass('d-none');\n            handleDropDownOnHide($('.menu-responsive  .nav-item'));\n        }\n        else {\n            handleDropDownOnHide($('.show .isMobileMenu > .dropdown-menu  > li'));\n\n        }\n    });\n\n    $('.navbar-nav').on('click', '.back', function (e) {\n        e.preventDefault();\n        clearSelection(this);\n        $('.menu-responsive').siblings().removeClass('d-none').addClass('d-xl-none');\n        if (!$('.menu-responsive  .nav-item.show').length) {\n            $('.menu-responsive  .nav-item').not('.show').removeClass('d-none');\n            handleDropDownOnHide($('.menu-responsive  .nav-item'));\n        }\n        else {\n            handleDropDownOnHide($('.show .isMobileMenu > .dropdown-menu  > li'));\n        }\n\n\n    });\n\n    $('.navbar-nav').on('click', '.close-button', function (e) {\n        e.preventDefault();\n        $('.navbar-nav').find('.top-category').detach();\n        $('.navbar-nav').find('.nav-menu').detach();\n        $('.navbar-nav').find('.show').removeClass('show');\n        $('.menu-toggleable-left').removeClass('in');\n        $('body').toggleClass('modal-open');\n        $('.main-menu').siblings().attr('aria-hidden', 'false');\n        $('header').siblings().attr('aria-hidden', 'false');\n        $('.modal-background').hide();\n        $('.menu-responsive').siblings().removeClass('d-none').addClass('d-xl-none');\n        if (!$('.menu-responsive  .nav-item.show').length) {\n            $('.menu-responsive  .nav-item').not('.show').removeClass('d-none');\n            handleDropDownOnHide($('.menu-responsive  .nav-item'));\n        }\n        else {\n            handleDropDownOnHide($('.show .isMobileMenu > .dropdown-menu  > li'));\n        }\n    });\n\n    $('.navbar-toggler').click(function (e) {\n        e.preventDefault();\n        $('.main-menu').toggleClass('in');\n        $('.modal-background').show();\n        $('.main-menu').removeClass('d-none');\n        $('.main-menu').attr('aria-hidden', 'false');\n        $('.main-menu').siblings().attr('aria-hidden', 'true');\n        $('header').siblings().attr('aria-hidden', 'true');\n        $('.main-menu .nav.navbar-nav .nav-link').first().focus();\n        $('body').toggleClass('modal-open');\n    });\n\n\n    keyboardAccessibility('.navbar-header .user', {\n        40: function ($popover) { // down\n            if ($popover.children('a').first().is(':focus')) {\n                $popover.children('a').first().next().focus();\n            } else {\n                $popover.children('a').first().focus();\n            }\n        },\n        38: function ($popover) { // up\n            if ($popover.children('a').first().is(':focus')) {\n                $(this).focus();\n                $popover.removeClass('show');\n            } else {\n                $popover.children('a').first().focus();\n            }\n        },\n        27: function ($popover) { // escape\n            $(this).focus();\n            $popover.removeClass('show');\n        },\n        9: function ($popover) { // tab\n            $popover.removeClass('show');\n        }\n    },\n        function () {\n            var $popover = $('.user .popover');\n            if (!($popover.hasClass('show'))) {\n                $popover.addClass('show');\n            }\n            return $popover;\n        }\n    );\n\n    $('.navbar-header .user').on('mouseenter focusin', function () {\n        if ($('.navbar-header .user .popover').length > 0) {\n            $('.navbar-header .user .popover').addClass('show');\n        }\n    });\n\n    $('.navbar-header .user').on('mouseleave', function () {\n        $('.navbar-header .user .popover').removeClass('show');\n    });\n\n    $(\".search-desktop .search-field\").on('click', function (e) {\n        e.preventDefault();\n        if ($(\".logobox\").length === 0) {\n            $(\".search-desktop\").addClass(\"expand\");\n        } else {\n            $(\".search-desktop\").addClass(\"expand-large\");\n        }\n        $(\".search-desktop .fa-search\").hide();\n        $(\".search-desktop .reset-button\").show();\n        $('.search-background').addClass('active')\n        $('.container-menu').hide();\n    });\n \n    function manageSearchInputValue () {\n        var searchInput = document.querySelectorAll('input[name=\"q\"]');\n        let itemValue = \"\";\n        if (searchInput.length !== 0) {\n            searchInput.forEach(function(item) {\n                if (item.classList.contains('activeSearch')) {\n                    if (item.value !== \"\") {\n                        itemValue = item.value;\n                        searchInput.forEach((input) => input.value = itemValue)\n                    }\n                }\n            })\n        }\n    }\n\n    $(document).mouseup(function (e) {\n        var container = $(\".suggestions-wrapper, .form-control\");\n\n        // If the target of the click isn't the container\n        if (!container.is(e.target) && container.has(e.target).length === 0) {\n            container.removeClass('show');\n            $(\".search-desktop\").removeClass(\"expand expand-large\");\n            $(\".search-desktop .fa-search\").show();\n            $(\".search-desktop .reset-button\").hide();\n            $('.container-menu').show();\n            $('.search-background').removeClass('active');\n            manageSearchInputValue();\n            $('.reset-button').removeClass('d-sm-block')\n            $('.suggestions').detach();\n        }\n    });\n\n    var num = 40; //number of pixels before modifying styles\n    var initialSrc = $('.navbar .navbar-brand img').attr('src');\n    var scrollSrc = $('.navbar .navbar-brand img').data('imagesmall');\n    var logoWidth = $('.navbar-brand img').data('imagewidth');\n    var logoHeight = $('.navbar-brand img').data('imageheight');\n    var logoSmallWidth = $('.navbar-brand img').data('imagesmallwidth');\n    var logoSmallHeight = $('.navbar-brand img').data('imagesmallheight');\n\n    $(window).bind('scroll', function () {\n        manageSearchInputValue();\n        if (($(window).width() + 17) >= 1280) {\n            if ($(window).scrollTop() > num) {\n                $('header .navbar, .search-background, .suggestions-wrapper').addClass('sticky');\n                $('.navbar .navbar-brand img').attr('src', scrollSrc);\n                $('.navbar .navbar-brand img').attr('width', logoSmallWidth);\n                $('.navbar .navbar-brand img').attr('height', logoSmallHeight);\n                $('.logoInHeader .navbar-brand img').removeClass('d-none');\n                $('.main-menu').removeClass(\"d-none\");\n                $('.main-menu').addClass(\"d-block\");\n                $('.picto-scroll').addClass('d-flex');\n                $('.site-search form .form-control').addClass('scrollForm');\n            } else {\n                $('header .navbar, .search-background, .suggestions-wrapper').removeClass('sticky');\n                if ( $('.search-background').length !== 0 && $('.search-background')[0].classList.contains('active')) {\n                    $('.main-menu').addClass(\"d-none\");\n                    $('.main-menu').removeClass(\"d-block\");\n                } else {\n                    $('.main-menu').removeClass(\"d-none\");\n                    $('.main-menu').addClass(\"d-block\");\n                }\n                $('.navbar .navbar-brand img').attr('src', initialSrc);\n                $('.navbar .navbar-brand img').attr('width', logoWidth);\n                $('.navbar .navbar-brand img').attr('height', logoHeight);\n                $('.logoInHeader .navbar-brand img').addClass('d-none');\n                $('.picto-scroll').removeClass('d-flex');\n                $('.site-search form .form-control').removeClass('scrollForm');\n            }\n        };\n    });\n\n    if (!isDesktop(this)) {\n        $('.dropdown-menu').addClass('col-12');\n    }\n\n    $('.navbar-nav .nav-item')\n        .on('mouseover keyup', function (e) {\n            if (e.type === 'mouseover' || e.type === 'keyup' && e.keyCode === 13 || e.type === 'keyup' && e.keyCode === 32) {\n                if (($(window).width() + 17) >= 1280) {\n                    $(this).find('.mega-menu').addClass('show');\n                    \n                    if ($(this).hasClass('dropdown')) {\n                        $('.modal-background').show().addClass('in-top');\n                    }\n                }\n            }\n        })\n        .on('mouseout', function () {\n            if (($(window).width() + 17) >= 1280) {\n                $(this).find('.mega-menu').removeClass('show');\n                $('.modal-background').hide().removeClass('in-top');\n            }\n        });\n\n    $('.search-picto, .search-mobile .reset-button, .search-field').click(function (e) {\n        $('.search-mobile').toggleClass('show');\n        $('.search-mobile').hasClass('show') ? ($('.header').addClass('nav-down'), $('.header').removeClass('scrollUp')) : false ;
15\n        document.querySelectorAll(\".search-field\").forEach((item) => item.classList.remove('activeSearch'))\n        e.currentTarget.classList.add('activeSearch');\n        window.innerWidth < 1280 ? $('.search-field').focus() : $('.search-field').focus({preventScroll: true});\n        $('.search-background').toggle();\n        $('body').toggleClass('no-scroll');\n    });\n\n    $('.search-background').on('click',function(){\n        $('.search-mobile').toggleClass('show');\n        $('.search-mobile').hasClass('show') ? ($('.header').addClass('nav-down'), $('.header').removeClass('scrollUp')) : false ;\n        $('.search-field').blur();\n        $('.search-background').removeClass('active');\n        $('.search-background').css('display', 'none');\n        $('body').toggleClass('no-scroll');\n    })\n\n    if ($('.user-message').hasClass('logged')) {\n        $('.sticky-account').attr('data-bs-toggle', 'modal');\n        $('.sticky-account').attr('data-bs-target', '#logoutModal');\n        $('.mobile-account').attr('data-bs-toggle', 'modal');\n        $('.mobile-account').attr('data-bs-target', '#logoutModal');\n    };\n\n    $('#recapcheckout').siblings('#headerNoMenu').find('.pull-left').detach();\n\n    $(\"#menu_stores_link\").click(function () {\n        window.location.href = $(this).attr(\"href\");\n    });\n\n    $('body').on('click','.mega-menu span.dropdown-link',function(e){\n        var linkEncryptedAttr = $(this).data('href');\n        var hrefDecrypted = atob(linkEncryptedAttr);\n        window.open(hrefDecrypted,\"_self\");\n    });\n\n    $('body').on('click','.menu-responsive span.dropdown-link',function(e){\n        var linkEncryptedAttr = $(this).data('href');\n        var hrefDecrypted = atob(linkEncryptedAttr);\n        window.open(hrefDecrypted,\"_self\");\n    });\n\n    $('body').on('click','.mega-menu span.nav-link',function(e){\n        var linkEncryptedAttr = $(this).data('href');\n        var hrefDecrypted = atob(linkEncryptedAttr);\n        window.open(hrefDecrypted,\"_self\");\n    });\n\n    $('body').on('click','.menu-responsive span.nav-link',function(e){\n        var linkEncryptedAttr = $(this).data('href');\n        var hrefDecrypted = atob(linkEncryptedAttr);\n        window.open(hrefDecrypted,\"_self\");\n    });\n\n    $(function() {\n        if($('.nav-header .before-loading').length && $('.active-loader').length) \n            $('.nav-header .before-loading').removeClass('before-loading');\n            $('.nav-header .before-loading_menu').removeClass('before-loading_menu'); \n            $('.nav-header .before-loading_subcat').remove();\n            $('.before-loading_menu-burger').removeClass('before-loading_menu-burger');\n    });\n\n    $(window).resize();\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/menu.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/miniCart.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar cart = __webpack_require__(/*! ../cart/cart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/cart.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\n\nvar updateMiniCart = true;\n\nfunction appendToUrl(url, params) {\n    var newUrl = url;\n    newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n        return key + '=' + encodeURIComponent(params[key]);\n    }).join('&');\n\n    return newUrl;\n}\n\nfunction changeReco(contentJsonReco,url,divreco){\n    \n    var contentJsonRecoNew = contentJsonReco.toString();\n    contentJsonRecoNew = contentJsonRecoNew.replace(/\\\\n/g, \"\\\\n\")  \n               .replace(/\\\\'/g, \"\\\\'\")\n               .replace(/\\\\\"/g, '\\\\\"')\n               .replace(/\\\\&/g, \"\\\\&\")\n               .replace(/\\\\r/g, \"\\\\r\")\n               .replace(/\\\\t/g, \"\\\\t\")\n               .replace(/\\\\b/g, \"\\\\b\")\n               .replace(/\\\\f/g, \"\\\\f\")\n               .replace(\"/\",\"\");\n    // remove non-printable and other non-valid JSON chars\n    contentJsonRecoNew = contentJsonRecoNew.replace(/[\\u0000-\\u0019]+/g,\"\"); \n    var contentReco = JSON.stringify(contentJsonRecoNew);\n\n    var urlParams = {\n        contentReco: contentReco,\n        divreco: divreco,\n        template: 'layer'\n    };\n\n    var urlChangeReco = appendToUrl(url, urlParams);\n\n    $.ajax({\n        url: urlChangeReco,\n        method: 'GET',\n        dataType: 'html',\n        success: function (html) {\n            var $recoDiv = $('#'+divreco);\n            $recoDiv.html(html);\n        },\n        error: function (err) {\n           \n        }\n    });\n\n}\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n */\nfunction displayMessageAndRemoveFromCart(data) {\n    $.spinner().stop();\n    var status = data.success ? 'success' : 'error';\n\n    displayNotification(document.querySelector('.ocs-notification[role=alert]'), status, data.msg);\n\n    var $targetElement = $('a[data-pid=\"' + data.pid + '\"]').closest('.product-info').find('.remove-product');\n    var itemToMove = {\n        actionUrl: $targetElement.data('action'),\n        productID: $targetElement.data('pid'),\n        productName: $targetElement.data('name'),\n        uuid: $targetElement.data('uuid')\n    };\n    $('body').trigger('afterRemoveFromCart', itemToMove);\n    setTimeout(function () {\n        $('.cart.cart-page #removeProductModal').modal('show');\n    }, 2000);\n}\n/**\n * move items from Cart to wishlist\n * returns json object with success or error message\n */\nfunction moveToWishlist() {\n    $('body').on('click', '.product-move .move', function (e) {\n        e.preventDefault();\n        var url = $(this).attr('href');\n        var pid = $(this).data('pid');\n        var optionId = $(this).closest('.product-info').find('.lineItem-options-values').data('option-id');\n        var optionVal = $(this).closest('.product-info').find('.lineItem-options-values').data('value-id');\n        optionId = optionId || null;\n        optionVal = optionVal || null;\n        if (!url || !pid) {\n            return;\n        }\n\n        $.spinner().start();\n        $.ajax({\n            url: url,\n            type: 'post',\n            dataType: 'json',\n            data: {\n                pid: pid,\n                optionId: optionId,\n                optionVal: optionVal\n            }
15,\n            success: function (data) {\n                displayMessageAndRemoveFromCart(data);\n            },\n            error: function (err) {\n                displayMessageAndRemoveFromCart(err);\n            }\n        });\n    });\n}\n\nfunction updateEResaBasket(evt) {\n    if (evt.data.event === 'updateReservedProduct') {\n        $('body').addClass('overflow-hidden');\n        var url = $('.minicart-eresa').data('action-url').toString();\n        url = url.toString().replace(/(?:ShowEresaCart)/,'UpdateEresaCart');\n        $.ajax({\n            url: url+ '?quantity='+ evt.data.nbItems + '&products=' + JSON.stringify(evt.data.products),\n            type: 'get',\n            dataType: 'json',\n            success: function (data) {\n                if(data.quantity > 0) {\n                    $('.qty-bullet').html(data.quantity);\n                } else {\n                    $('.minicart-eresa').addClass('d-none');\n                    $('.eresa-separator').addClass('d-none');\n                }\n            }\n        });\n    } else if (evt.data.event === 'close') {\n        $('.onestock-modal').hide();\n        $('body').removeClass('overflow-hidden');\n    }\n}\n\nmodule.exports = {\n    cart: function () {\n        cart();\n\n        $('.js-minicart').on('count:update', function (event, count) {\n            if (count && $.isNumeric(count.quantityTotal)) {\n                $('.minicart .minicart-quantity').text(count.quantityTotal);\n                const miniCartHideNoLink = document.querySelector('.minicart-total.hide-no-link');\n                const miniCartHideNoLinkAttr = miniCartHideNoLink.getAttribute('data-redirect-basket');\n                let redirectBasket;\n                window.innerWidth < 1280 && miniCartHideNoLink !== null && miniCartHideNoLinkAttr !== null && miniCartHideNoLinkAttr == 'true' ? redirectBasket = true : redirectBasket = false;\n                if (count.quantityTotal > 0 && redirectBasket == false) {\n                    $('.minicart-total').attr('data-bs-toggle', 'modal');\n                    $('.minicart-total').attr('data-bs-target', '#miniCartModal');\n                    $('.minicart-link').removeAttr('href');\n                }\n            }\n        });\n        $('.js-minicart').on('keyup', function (e) {\n            e.key === \"Enter\" ?  $('.js-minicart').click() : false ;\n        })\n        $('.js-minicart').on('click', function () {\n            let url = $(this).data('action-url');\n            let count = parseInt($('.js-minicart .minicart-quantity').text(), 10);\n            let miniCartModal = $('.js-minicart-body');\n            if (count !== 0 && $('.minicart .popover.show').length === 0) {\n                if (!updateMiniCart) {\n                    return;\n                }\n                miniCartModal.spinner().start();\n                $.ajax({\n                    url: url,\n                    type: 'get',\n                    success: function (data) {\
15n                        if (data.error) {\n                            window.location.href = data.redirectUrl;\n                        } else {\n                            miniCartModal.empty();\n                            miniCartModal.append(data);\n                            updateMiniCart = false;\n                        }\n                        $.spinner().stop();\n                    },\n                    error: function (err) {\n                        $.spinner().stop();\n                    }\n                });\n            }\n        });\n\n        $('#miniCartModal').on('hidden.bs.modal', function () {\n            $('#js-added-to-cart-msg').removeClass('show');\n            // let GTMaddToCart = require('../gtm/util/layers/addToCart');\n            // GTMaddToCart.removeDataLayer();\n            let GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n            GTMcloseLayer.getDataLayerForAction();\n        });\n\n        $('.minicart-total').on('keyup', function (e) {\n            e.key === \"Enter\" ?  $('.minicart-total').click() : false ;\n        })\n\n        $('.minicart-total').on('click', function () {\n            let GTMminiCart = __webpack_require__(/*! ../gtm/util/layers/miniCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/miniCart.js\");\n            let urlProductCart = $(this).data('urlproductcart');\n            $.ajax({\n                url: urlProductCart,\n                type: 'get',\n                dataType: 'json',\n                success: function (data) {\
15n                    GTMminiCart.getDataLayerForLayer({'products' : data.products});\n                },\n                error: function (err) {\n                    GTMminiCart.getDataLayerForLayer();\n                }\n            });\n        });\n        // $('.js-minicart').on('mouseenter focusin touchstart', function () {\n        //     var url = $('.js-minicart').data('action-url');\n        //     var count = parseInt($('.js-minicart .minicart-quantity').text(), 10);\n\n        //     if (count !== 0 && $('.minicart .popover.show').length === 0) {\n        //         if (!updateMiniCart) {\n        //             $('.minicart .popover').addClass('show');\n        //             return;\n        //         }\n\n        //         $('.minicart .popover').addClass('show');\n        //         $('.minicart .popover').spinner().start();\n        //         $.get(url, function (data) {\n        //             $('.minicart .popover').empty();\n        //             $('.minicart .popover').append(data);\n        //             updateMiniCart = false;\n        //             $.spinner().stop();\n        //         });\n        //     }\n        // });\n        // $('body').on('touchstart click', function (e) {\n        //     if ($('.minicart').has(e.target).length <= 0) {\n        //         $('.minicart .popover').removeClass('show');\n        //         $('.minicart .popover .addToCart').removeClass('show');\n        //     }\n        // });\n        // $('.js-minicart').on('mouseleave focusout', function (event) {\n        //     if ((event.type === 'focusout' && $('.minicart').has(event.target).length > 0)\n        //         || (event.type === 'mouseleave' && $(event.target).is('.minicart .quantity'))\n        //         || $('body').hasClass('modal-open')) {\
15n        //         event.stopPropagation();\n        //         return;\n        //     }\n        //     $('.minicart .popover').removeClass('show');\n        //     $('.minicart .popover .addToCart').removeClass('show');\n        // });\n        $('body').on('change', '.minicart .quantity', function () {\n            if ($(this).parents('.bonus-product-line-item').length && $('.cart-page').length) {\n                location.reload();\n            }\n        });\n        $('body').on('product:afterAddToCart', function () {\n            updateMiniCart = true;\n        });\n        $('body').on('cart:update', function () {\n            updateMiniCart = true;\n        });\n    },\n    showEresaCart: function () {\n        $(document).on('click', '.minicart-eresa', function () {\n            var url = $(this).data('action-url');\n            $.ajax({\n                url: url,\n                type: 'get',\n                dataType: 'json',\n                success: function (data) {\n                    $('.onestock-modal').show();\n                    $('.onestock-frame').html(data.url);\n                }\n            });\n        });\n    },\n    hideOneStockIframe: function() {\n        $('body').on('click', '.onestock-content .icon-cross-black', function () {\n            $('.onestock-modal').hide();\n        });\n    },\n    eventIframe: function() {\n        if (window.addEventListener) {\n            window.addEventListener('message', updateEResaBasket,\n            false);\n        } else {\n            window.attachEvent('onmessage', updateEResaBasket);\n        }\n    },\n    moveToWishlist: moveToWishlist,\n    caastRemoveProductModal:function() {\n            $('#removeProductModal').on('hidden.bs.modal', function (e) {\n            $('body').removeClass('modal-opendelete');\n        });\n    }\n\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/miniCart.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/reviews.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n\nfunction reviewsShowMoreLess() {\n    $('.review-comment .comment').each(function () {\n        var $el = $(this);\n        var $elParent = $el.parent('.review-comment');\n\n        var $c = $el\n       .clone()\n       .css('display', 'block')\n       .removeClass('text-ellipsis--3')\n       .appendTo($elParent)\n       .hide();\n\n        if( $c.height() === $el.height() ) {\n            $el.siblings('.rmrl').css('display', 'none');\n        }\n\n        $c.remove();\n\n        $el.siblings('.rmrl').click(function (e) {\n\n            if($el.hasClass('text-ellipsis--3')) {\n                $el.removeClass('text-ellipsis--3');\n                $el.parents('.review-body').css('height', 'unset');\n            }else{\n                $el.addClass('text-ellipsis--3');\n                $el.parents('.review-body').css('height', '228px');\n            }\n            $(this).find('span').toggleClass('d-none');\n            \n        });\n    });\n}\n\nmodule.exports = {\n    reviewsShowMoreLess : reviewsShowMoreLess,\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/reviews.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/scrollAnimate.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = function (element) {\n    var position = element && element.length ? element.offset().top : 0;\n    $('html, body').animate({\n        scrollTop: position\n    }, 500);\n    if (!element) {\n        $('.logo-home').focus();\n    }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/scrollAnimate.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/search.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar debounce = __webpack_require__(/*! lodash/debounce */ \"../storefront-reference-architecture/node_modules/lodash/debounce.js\");\nvar endpoint = $('.suggestions-wrapper').data('url');\nvar minChars = 3;\nvar UP_KEY = 38;\nvar DOWN_KEY = 40;\nvar DIRECTION_DOWN = 1;\nvar DIRECTION_UP = -1;\n\n/**\n * Retrieves Suggestions element relative to scope\n *\n * @return {JQuery} - .suggestions-wrapper element\n */\nfunction getSuggestionsWrapper() {\n    return $(document).find('.suggestions-wrapper')\n}\n\n/**\n * Determines whether DOM element is inside the .search-mobile class\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n * @return {boolean} - Whether DOM element is inside  div.search-mobile\n */\nfunction isMobileSearch(scope) {\n    return !!$(scope).closest('.search-mobile').length;\n}\n\n/**\n * Remove modal classes needed for mobile suggestions\n *\n */\nfunction clearModals() {\n    $('body').removeClass('modal-open');\n    $('header').siblings().attr('aria-hidden', 'false');\n    $('.suggestions').removeClass('modal');\n}\n\n/**\n * Apply modal classes needed for mobile suggestions\n *\n * @param {Object} scope - Search input field DOM element\n */\nfunction applyModals(scope) {\n    if (isMobileSearch(scope)) {\n        $('body').addClass('modal-open');\n        $('header').siblings().attr('aria-hidden', 'true');\n        getSuggestionsWrapper().find('.suggestions').addClass('modal');\n    }\n}\n\n/**\n * Tear down Suggestions panel\n */\nfunction tearDownSuggestions() {\n    clearModals();\n    $('.search-mobile .suggestions').unbind('scroll');\n    getSuggestionsWrapper.empty();\n}\n\n/**\n * Toggle search field icon from search to close and vice-versa\n *\n * @param {string} action - Action to toggle to\n */\nfunction toggleSuggestionsIcon(action) {\n    var mobileSearchIcon = '.search-mobile button.';\n    var iconSearch = 'fa-search';\n    var iconSearchClose = 'fa-close';\n\n    if (action === 'close') {\n        $(mobileSearchIcon + iconSearch).removeClass(iconSearch).addClass(iconSearchClose).attr('type', 'button');\n    } else {\n        $(mobileSearchIcon + iconSearchClose).removeClass(iconSearchClose).addClass(iconSearch).attr('type', 'submit');\n    }\n}\n\n/**\n * Determines whether the \"More Content Below\" icon should be displayed\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n */\nfunction handleMoreContentBelowIcon(scope) {\n    if (($(scope).scrollTop() + $(scope).innerHeight()) >= $(scope)[0].scrollHeight) {\n        $('.more-below').fadeOut();\n    } else {\n        $('.more-below').fadeIn();\n    }\n}\n\n/**\n * Positions Suggestions panel on page\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n */\nfunction positionSuggestions(scope) {\n    var $suggestions;\n\n    if (isMobileSearch(scope)) {\n        handleMoreContentBelowIcon(scope);\n\n        // Unfortunately, we have to bind this dynamically, as the live scroll event was not\n        // properly detecting dynamic suggestions element's scroll event\n        $suggestions = getSuggestionsWrapper().find('.suggestions');\n        $suggestions.scroll(function () {\n            handleMoreContentBelowIcon(this);\n        });\n    }\n}\n\n/**\n * Process Ajax response for SearchServices-GetSuggestions\n *\n * @param {Object|string} response - Empty object literal if null response or string with rendered\n *                                   suggestions template contents\n */\nfunction processResponse(response) {\n    var $suggestionsWrapper = getSuggestionsWrapper().empty();\n    $.spinner().stop();\n\n    if (!(typeof (response) === 'object')) {\n        $suggestionsWrapper.append(response).show();\n        $(this).siblings('.reset-button').addClass('d-sm-block');\n        positionSuggestions(this);\n\n        if (isMobileSearch(this)) {\n            toggleSuggestionsIcon('close');\n            applyModals(this);\n        }\n\n        // Trigger screen reader by setting aria-describedby with the new suggestion message.\n        var suggestionsList = $('.suggestions .item');\n        if ($(suggestionsList).length) {\n            $('input.search-field').attr('aria-describedby', 'search-result-count');\n        } else {\n            $('input.search-field').removeAttr('aria-describedby');\n        }\n    } else {\n        $suggestionsWrapper.hide();\n    }\n}\n\n/**\n * Retrieve suggestions\n *\n * @param {Object}
15 scope - Search field DOM element\n */\nfunction getSuggestions(scope) {\n    if ($('.search-desktop')[0].classList.contains(\"expand-large\") || $('.search-mobile')[0].classList.contains(\"show\")) {\n        if ($(scope).val().length >= minChars) {\n            $.spinner().start();\n\n            //spinner offset to keep searchbar visible\n            $('.underlay').css('top', $('.search-background').position().top);\n\n            $.ajax({\n                context: scope,\n                url: endpoint + encodeURIComponent($(scope).val()),\n                method: 'GET',\n                success: processResponse,\n                error: function () {\n                    $.spinner().stop();\n                }\n            });\n        } else {\n            toggleSuggestionsIcon('search');\n            $(scope).siblings('.reset-button').removeClass('d-sm-block');\n            clearModals();\n            getSuggestionsWrapper().empty();\n        }\n    } else {\n        toggleSuggestionsIcon('search');\n        $(scope).siblings('.reset-button').removeClass('d-sm-block');\n        clearModals();\n        getSuggestionsWrapper().empty();\n    }\n}\n\n/**\n * Handle Search Suggestion Keyboard Arrow Keys\n *\n * @param {Integer} direction takes positive or negative number constant, DIRECTION_UP (-1) or DIRECTION_DOWN (+1)\n */\nfunction handleArrow(direction) {\n    // get all li elements in the suggestions list\n    var suggestionsList = $('.suggestions .item');\n    if (suggestionsList.filter('.selected').length === 0) {\n        suggestionsList.first().addClass('selected');\n        $('input.search-field').each(function () {\n            $(this).attr('aria-activedescendant', suggestionsList.first()[0].id);\n        });\n    } else {\n        suggestionsList.each(function (index) {\n            var idx = index + direction;\n            if ($(this).hasClass('selected')) {\n                $(this).removeClass('selected');\n                $(this).removeAttr('aria-selected');\n                if (suggestionsList.eq(idx).length !== 0) {\n                    suggestionsList.eq(idx).addClass('selected');\n                    suggestionsList.eq(idx).attr('aria-selected', true);\n                    $(this).removeProp('aria-selected');\n                    $('input.search-field').each(function () {\n                        $(this).attr('aria-activedescendant', suggestionsList.eq(idx)[0].id);\n                    });\n                } else {\n                    suggestionsList.first().addClass('selected');\n                    suggestionsList.first().attr('aria-selected', true);\n                    $('input.search-field').each(function () {\n                        $(this).attr('aria-activedescendant', suggestionsList.first()[0].id);\n                    });\n                }\n                return false;\n            }\n            return true;\n        });\n    }\n}\n\n\nmodule.exports = function () {\n    $('form[name=\"simpleSearch\"]').submit(function (e) {\n        var suggestionsList = $('.suggestions .item');\n        if (suggestionsList.filter('.selected').length !== 0) {\n            e.preventDefault();\n            suggestionsList.filter('.selected').find('a')[0].click();\n        }\n    });\n\n    $('input.search-field').each(function () {\n        /**\n         * Use debounce to avoid making an Ajax call on every single key press by waiting a few\n         * hundred milliseconds before making the request. Without debounce, the user sees the\n         * browser blink with every key press.\n         */\n        var debounceSuggestions = debounce(getSuggestions, 300);\n        $(this).on('keyup focus', function (e) {\n            // Capture Down/Up Arrow Key Events\n            switch (e.which) {\n                case DOWN_KEY:\n                    handleArrow(DIRECTION_DOWN);\n                    e.preventDefault(); // prevent moving the cursor\n                    break;\n                case UP_KEY:\n                    handleArrow(DIRECTION_UP);\n                    e.preventDefault(); // prevent moving the cursor\n                    break;\n                default:\n                    debounceSuggestions(this, e);\n            }\n        });\n    });\n\n    $('body').on('click', function (e) {\n        if (!$('.suggestions').has(e.target).length && !$(e.target).hasClass('search-field')) {\n            $('.suggestions').hide();\n        }\n    });\n\n    $('body').on('click touchend', '.search-mobile button.fa-close', function (e) {\n        e.preventDefault();\n        $('.suggestions').hide();\n        toggleSuggestionsIcon('search');\n        tearDownSuggestions();\n    });\n\n    $('.site-search .reset-button').on('click', function () {\n        $(this).removeClass('d-sm-block');\n        document.querySelectorAll('input.search-field').length !== 0 ? document.querySelectorAll('input.search-field').forEach((item) => item.value = \"\") : false;\n        $('.search-background').removeClass('active');\n        $('body').removeClass('modal-open')\n    });
15\n\n    if(!$('.user-message').hasClass('logged') && $('#title-category').data('isvp')){\n        $('#connexionModal').modal('show');\n    }\n}\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/search.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/toolTip.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n\nmodule.exports = function () {\n    $('.info-icon').on('mouseenter focusin', function () {\n        $(this).find('.tooltip').removeClass('d-none');\n    });\n\n    $('.info-icon').on('mouseleave focusout', function () {\n        $(this).find('.tooltip').addClass('d-none');\n    });\n};\n\n$(function () {\n    $('[data-bs-toggle=\"tooltip\"]').tooltip(\"hide\");\n  });\n\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/toolTip.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports =  function (element, type, content)  {\n    if (element !== null) {\n        const alertNotification = element;\n        alertNotification.classList.remove('alert', 'information', 'success', 'warning', 'error');\n        alertNotification.setAttribute('aria-hidden', false);\n        content !== undefined ? alertNotification.querySelector('.inner-content').textContent = content : false;\n        setTimeout(() => { \n            alertNotification.classList.remove('d-none');\n            alertNotification.classList.add('alert', type);\n        }, 10);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationbackend.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nfunction clearFormErrors(form) {\n    $(form).find('.hint[role=alert]').remove();\n    $(form).find('.ocs-input').each(function() {\n        $(this).removeClass('dirty invalid');\n    });\n    $(form).find('.ocs-core-input').each(function() {\n        $(this).removeClass('dirty invalid');\n    });\n    $(form).find('input').each(function() {\n        $(this).attr('aria-invalid', 'false');\n    });\n}\n\nmodule.exports = function (formElement, data) {\n    // clear form validation first\n    clearFormErrors(formElement);\n    $('.alert', formElement).remove();\n\n    let firstErrorElement = null;\n\n    if (typeof data === 'object' && data.fields) {\n        Object.keys(data.fields).forEach(function (key) {\n            if (data.fields[key]) {\n                let  $input = $(formElement).find('[name=\"' + key + '\"]');\n                let $inputWrapper;\n                if ($input.tagName !== 'TEXTAREA' && $input[0].tagName !== 'TEXTAREA') {\n                    $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ;             \n                } else {\n                    $input.closest('.ocs-textarea').length !== 0 ? $inputWrapper = $input.closest('.ocs-textarea') : $inputWrapper = $input.closest('.ocs-core-textarea');\n                }\n                $inputWrapper.addClass('dirty invalid');\n                const ariaDescribedBy = \"err_\"+$input[0].id+\"\";\n                $inputWrapper.append(`\n                    <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n                        <p class=\"invalid-text\">\n                            <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n                            `+data.fields[key]+`\n                        </p>\n                    </div>\n                `);\n\n                if (!firstErrorElement) {\n                    firstErrorElement = $inputWrapper;\n                }\n            }\n        });\n    } else if (typeof data === 'object' && data.fieldErrors) {\n        $.each(data.fieldErrors, function(x, y) {\n            let keyValue;\n            const keyName = Object.keys(y);\n            keyName.forEach(function(key) {\n                keyValue = y[key];\n            })\n            let  $input = $(formElement).find('[name=\"' + keyName + '\"]');   \n            let $inputWrapper;\n            if ($input.tagName !== 'TEXTAREA') {\n                $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ;             \n            } else {\n                $input.closest('.ocs-textarea').length !== 0 ? $inputWrapper = $input.closest('.ocs-textarea') : $inputWrapper = $input.closest('.ocs-core-textarea');\n            }\n            $inputWrapper.addClass('dirty invalid');\n            const ariaDescribedBy = \"err_\"+$input[0].id+\"\";\n            $inputWrapper.append(`\n                <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n                    <p class=\"invalid-text\">\n                        <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n                        `+keyValue+`\n                    </p>\n                </div>\n            `);\n\n            if (!firstErrorElement) {\n                firstErrorElement = $inputWrapper;\n            }\n        });\n    } else {\n        if (data && typeof data === 'object') {\n        for (let key in data) {\n            if (data[key] && data[key].htmlName !== undefined && data[key].valid !== true) {\n                const htmlName = data[key].htmlName;\n                let $input = $(formElement).find('[name=\"' + htmlName + '\"]');   \n                let $inputWrapper;\n                if ($input.tagName !== 'TEXTAREA') {\n                    $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ;             \n                } else {\n                    $input.closest('.ocs-textarea').length !== 0 ? $inputWrapper = $input.closest('.ocs-textarea') : $inputWrapper = $input.closest('.ocs-core-textarea');\n                }\n                $inputWrapper.addClass('dirty invalid');\n                const ariaDescribedBy = \"err_\"+$input[0].id+\"\";\n                let errorMessage;\n                if (data[key].error) {\n                    errorMessage = data[key].error;\n                }
15 else {\n                    $input[0].validity.patternMismatch == true ? errorMessage = $input[0].getAttribute('data-pattern-mismatch') : false ;\n                    $input[0].validity.valueMissing == true ? errorMessage = $input[0].getAttribute('data-missing-error') : false ;\n                    $input[0].validity.tooLong == true || $input[0].validity.tooShort == true ? errorMessage = $input[0].getAttribute('data-range-error') : false ;\n                }\n                $inputWrapper.append(`\n                    <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n                        <p class=\"invalid-text\">\n                            <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n                            `+errorMessage+`\n                        </p>\n                    </div>\n                `);\n\n                if (firstErrorElement == null) {\n                    firstErrorElement = $inputWrapper;\n                }\n            }\n        };\n    }\n    }\n\n    if (firstErrorElement) {\n        $('html, body').animate({\n            scrollTop: firstErrorElement.offset().top - 100\n        }, 500);\n    }\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationbackend.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationfrontend.js":function(module,exports,__webpack_require__){"use strict";eval("\nmodule.exports = function (formElement) {\n    event.preventDefault();\n    if(formElement.hasClass('ocs-form') || formElement.hasClass('ocs-form-core')){\n        \n        let errorInput;\n        let isValid = true;\n        let firstErrorElement = null;\n        formElement.find('.hint[role=\"alert\"]').remove();\n\n        formElement.find('input, textarea').each(function() {\n            let $input = $(this);\n            let hint;\n\n            // Ignorer les champs avec la classe .ignore\n            if (!$input.hasClass('ignore')) {\n                let $inputWrapper;\n                if ($input[0].tagName !== 'TEXTAREA') {\n                    $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ;             \n                } else {\n                    $input.closest('.ocs-textarea').length !== 0 ? $inputWrapper = $input.closest('.ocs-textarea') : $inputWrapper = $input.closest('.ocs-core-textarea');\n                }\n                $inputWrapper.length !== 0 ? hint = $inputWrapper[0].querySelectorAll('.hint') : false ;\n                let errorMessage = '';\n                $inputWrapper.addClass('dirty');\n\n                // For radio group\n                if ($inputWrapper.length !== 0) {\n                    if ($inputWrapper[0].querySelector('.ocs-radio-button-group') !== null) {\n                        const inputRadio = $inputWrapper[0].querySelectorAll('.ocs-radio-button-group input[type=radio]');\n                        let inputRadioError = 0;\n                        inputRadio.forEach(function(input) {\n                            input.checked !== true ? inputRadioError++ : false ;\n                        })\n                        inputRadioError == inputRadio.length ? (errorMessage = $input.data('missing-error'), isValid = false) : false ;\n                    }\n                }\n\n                // Valider si le champ est requis et vide\n                if ($input.attr('required') && $input.val().trim() === '' && $input[0].type !== 'hidden') {\n                    errorMessage = $input.data('missing-error');\n                    isValid = false;\n                }\n                \n                // Valider le pattern si défini\n                if ($input.val().trim() !== '' && $input[0].validity.patternMismatch && $input[0].getAttribute('data-pattern-mismatch') !== null) {\n                    errorMessage = $input[0].getAttribute('data-pattern-mismatch');\n                    isValid = false;\n                }\n\n                if ($input.val().trim() !== '' && ($input[0].validity.tooLong || $input[0].validity.tooShort || $input[0].validity.rangeUnderflow || $input[0].validity.rangeOverflow) && $input[0].getAttribute('data-range-error') !== null) {\n                    errorMessage = $input[0].getAttribute('data-range-error');\n                    isValid = false;\n                }\n\n                if($input.val().trim() === 'Choisissez une option' || $input.val().trim() === 'Kies een optie'){\n                    errorMessage = $input.data('missing-error');\n                    isValid = false;\n                }\n                \n                if (errorMessage) {\n                    errorInput = $input;\n                    if (hint !== undefined) {\n                        hint.forEach(function(ht) {\n                            ht.getAttribute('role') !== null ? ht.remove() : false;\n                        })\n                    }\n                    let ariaDescribedBy = \"\";\n                    if ($inputWrapper.length !== 0) {\n                        if($inputWrapper[0].querySelector('input')){\n                            if ($inputWrapper[0].querySelector('input').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('.help-text') !== null) {\n                                ariaDescribedBy = $inputWrapper[0].querySelector('input').getAttribute('aria-describedby');\n                            }\n                            if ($inputWrapper[0].querySelector('input').getAttribute('aria-describedby') == null || ($inputWrapper[0].querySelector('input').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('input').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') == -1)) {\n                                ariaDescribedBy += \" err_\"+$input[0].id+\"\";\n                            }\n                        }else if($inputWrapper[0].querySelector('textarea')){\n                            if ($inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('.help-text') !== null) {\n                                ariaDescribedBy = $inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby');\n                            }\n                            if ($inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby') == null || ($inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('textarea').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') == -1)) {\n                                ariaDescribedBy += \" err_\"+$input[0].id+\"\";\n                            }\n                        }\n                        $input.attr('aria-describedby', ariaDescribedBy)\n                    }\n                    $inputWrapper.addClass('invalid');\n                    $inputWrapper.append(`\n                        <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n                            <p class=\"invalid-text\">\n                                <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n                                ${errorMessage}\n                            </p>\n                        </div>\n                    `);\n                    $input.attr('aria-invalid', 'true');\n\n                    if (!firstErrorElement) {\n                        firstErrorElement = $inputWrapper;\n                    }\n                } else {\n                    if ($inputWrapper.length !== 0) {\n                        if($inputWrapper[0].querySelector('input')){\n                            $inputWrapper[0].querySelector('input').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('input').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') !== -1 ? $inputWrapper[0].querySelector('input').setAttribute('aria-describedby', $inputWrapper[0].querySelector('input').getAttribute('aria-describedby').replace('err_'+$input[0].id+'', '')) : false;\n                        }\n                        if (errorInput !== undefined && errorInput == $input) {\n                            $inputWrapper.removeClass('invalid');\n                            $input.attr('aria-invalid', 'false');\n                            $input.attr('aria-describedby', '')\n                            \n                            if (hint !== undefined) {\n                                hint.forEach(function(ht) {\n                                    ht.getAttribute('role') !== null ? ht.remove() : false;\n                                })\n                            }\n                        }\n                    }\n                }\n            }\n        });
15\n\n        formElement.find('select').each(function() {\n            let $input = $(this);\n            let hint;\n\n            // Ignorer les champs avec la classe .ignore\n            if (!$input.hasClass('ignore')) {\n                let $inputWrapper;\n                $input.closest('.ocs-input').length !== 0 ? $inputWrapper = $input.closest('.ocs-input') : $inputWrapper = $input.closest('.ocs-core-input') ;             \n                \n                $inputWrapper.length !== 0 ? hint = $inputWrapper[0].querySelectorAll('.hint') : false ;\n                let errorMessage = '';\n                $inputWrapper.addClass('dirty');\n\n                // Valider si le champ est requis et vide\n                if ($input.attr('required') && $input.val() === null && $input[0].type !== 'hidden') {\n                    errorMessage = $input.data('missing-error');\n                    isValid = false;\n                }\n                \n                // Valider le pattern si défini\n                if ($input.val() !== null && $input[0].validity.patternMismatch && $input[0].getAttribute('data-pattern-mismatch') !== null) {\n                    errorMessage = $input[0].getAttribute('data-pattern-mismatch');\n                    isValid = false;\n                }\n\n                if ($input.val() !== null && ($input[0].validity.tooLong || $input[0].validity.tooShort || $input[0].validity.rangeUnderflow || $input[0].validity.rangeOverflow) && $input[0].getAttribute('data-range-error') !== null) {\n                    errorMessage = $input[0].getAttribute('data-range-error');\n                    isValid = false;\n                }\n\n                if($input.val() === 'Choisissez une option' || $input.val() === 'Kies een optie'){\n                    errorMessage = $input.data('missing-error');\n                    isValid = false;\n                }\n                \n                if (errorMessage) {\n                    errorInput = $input;\n                    if (hint !== undefined) {\n                        hint.forEach(function(ht) {\n                            ht.getAttribute('role') !== null ? ht.remove() : false;\n                        })\n                    }\n                    let ariaDescribedBy = \"\";\n                    if ($inputWrapper.length !== 0) {\n                        if($inputWrapper[0].querySelector('select')){\n                            if ($inputWrapper[0].querySelector('select').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('.help-text') !== null) {\n                                ariaDescribedBy = $inputWrapper[0].querySelector('select').getAttribute('aria-describedby');\n                            }\n                            if ($inputWrapper[0].querySelector('select').getAttribute('aria-describedby') == null || ($inputWrapper[0].querySelector('select').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('select').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') == -1)) {\n                                ariaDescribedBy += \" err_\"+$input[0].id+\"\";\n                            }\n                        }\n                        $input.attr('aria-describedby', ariaDescribedBy)\n                    }\n                    $inputWrapper.addClass('invalid');\n                    $inputWrapper.append(`\n                        <div class=\"hint\" role=\"alert\" id=\"${ariaDescribedBy}\">\n                            <p class=\"invalid-text\">\n                                <i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>\n                                ${errorMessage}\n                            </p>\n                        </div>\n                    `);\n                    $input.attr('aria-invalid', 'true');\n\n                    if (!firstErrorElement) {\n                        firstErrorElement = $inputWrapper;\n                    }\n                } else {\n                    if ($inputWrapper.length !== 0) {\n                        if($inputWrapper[0].querySelector('select')){\n                            $inputWrapper[0].querySelector('select').getAttribute('aria-describedby') !== null && $inputWrapper[0].querySelector('select').getAttribute('aria-describedby').indexOf('err_'+$input[0].id+'') !== -1 ? $inputWrapper[0].querySelector('select').setAttribute('aria-describedby', $inputWrapper[0].querySelector('select').getAttribute('aria-describedby').replace('err_'+$input[0].id+'', '')) : false;\n                        }\n                        if (errorInput !== undefined && errorInput == $input) {\n                            $inputWrapper.removeClass('invalid');\n                            $input.attr('aria-invalid', 'false');\n                            $input.attr('aria-describedby', '')\n                            \n                            if (hint !== undefined) {\n                                hint.forEach(function(ht) {\n                                    ht.getAttribute('role') !== null ? ht.remove() : false;\n                                })\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        if (isValid) {\n            if(formElement.hasClass('noajax')){\n                this.submit();\n            } else {\n                return true;\n            }\n        } else if (firstErrorElement) {\n            $('html, body').animate({\n                scrollTop: firstErrorElement.offset().top - 100\n            }, 500);\n            return false;\n        }\n    } else {\n        return true;\n    }\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationfrontend.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js":function(module,exports,__webpack_require__){"use strict";eval("\n// set all GTM events here\nvar GTMHelper = __webpack_require__(/*! ./gtm/GTMHelper.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar processInclude = __webpack_require__(/*! ./util */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js\");\nprocessInclude(__webpack_require__(/*! ./gtm/pwa-analytics.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js\"));\n\nvar gtm = {};\nvar $cache = {};\n\nfunction initializeCache() {\n    $cache.document = $(document);\n}\n\nfunction isDatalayerDefined() {\n    return typeof dataLayer !== 'undefined';\n}\n\nfunction removeDataLayer (event, template) {\n    if (!isDatalayerDefined()) {\n        return;\n    }\n    if (event) {\n        var index = null;\n        for (var i = 0; i < dataLayer.length && index == null; i++) {\n            if (template != null) {\n                if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n                    index = i;\n            } else {\n                if (dataLayer[i].event === event)\n                    index = i;\n            }\n        }\n        if (index != null)\n            dataLayer.splice(index, 1);\n    }\n}\n\nfunction findDataLayer (event, template) {\n    if (!isDatalayerDefined()) {\n        return;\n    }\n    if (event) {\n        for (var i = 0; i < dataLayer.length; i++) {\n            if (template != null) {\n                if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n                    return (dataLayer[i]);\n            } else {\n                if (dataLayer[i].event === event)\n                    return (dataLayer[i]);\n            }\n        }\n    }\n    return null;\n}\n\nfunction fillDataLayer (data){\n\tif (!isDatalayerDefined()) {\n        return;\n    }\n\n    if (data)\n        dataLayer.push(data);\n    // dataLayer.push({\n    //     \"event\": data.event,\n    //     \"page\": data.page,\n    //     \"eeAction\": data.eeAction,\n    //     \"currencyCode\": data.currency,\n    //     \"checkoutStep\": data.checkoutStep,\n    //     \"checkoutType\": data.checkoutType,\n    //     \"products\": data.products\n    // });\n    return;\n}\n\nfunction fillSecondaryDataLayer(data){\n\tif (!isDatalayerDefined()) {\n        return;\n    }\n\n\tdataLayer.push({\n\t\t\"event\": data.event2,\n\t\t\"checkoutStep\": data.prevcheckoutStep,\n\t\t\"checkoutOption\": data.checkoutOption\n\t});\n}\n\nfunction initializeEvents() {\n    $cache.document.on('paymentStepGTM', function(event, data) {\n    \tdata.event='virtualPageview';\n    \tdata.page='/payment';\n\t\tdata.checkoutStep='3';\n\t\tdata.prevcheckoutStep='2';\n\n\t\tfillDataLayer(data);\n    \tfillSecondaryDataLayer(data);\n\n        return;\n    });\n}\n\nfunction clicCrossSell_GTM($click) {\n    var title = '';\n    var $title = $click.closest('.product-carousel').siblings('.title');\n    if ($title.length === 0)\n        $title = $click.closest('#slot-pushproduct').find('.title-reco');\n    if ($title.length === 0) {\n        \n        $title = $click.closest('.container-reco').find('.swipper-title');\n    }\n    if ($title.length != 0) {\n       var calloutmsg = $title.data('calloutmsg');\n        var recommender = $title.data('recommender');\n        title = calloutmsg;\n        if (recommender)\n            title = title + '/' + recommender;\n    }\n    \n    var url = $click.data('gtm-url');\n    var pid = $click.data('pid');\n    $.ajax({\n        url: url,\n        data: {\n            pid: pid\n        },\n        async: false,\n        method: 'GET',\n        success: function (data) {\
15n            let GTMclicCrossSell = __webpack_require__(/*! ./gtm/util/actions/clicCrossSell */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js\");\n            GTMclicCrossSell.getDataLayerForAction({\n                product: data.product,\n                title: title\n            });\n        }\n    });\n}\n\nmodule.exports = {\n    fillDataLayer : fillDataLayer,\n    removeDataLayer : removeDataLayer,\n    findDataLayer: findDataLayer,\n    init : function() {\n        initializeCache();\n        initializeEvents();\n        $cache.document.trigger('GTMReady');\n\n        $(document).on('click', '.slotReco .clickproduct', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.slotReco .product-tile .tile-body .pdp-link .link', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.slotReco .product-tile .tile-body .color-swatches', function(){\n            clicCrossSell_GTM($(this));\n        });\n        $(document).on('click', '.container-reco .clickproduct', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.container-reco .product-tile .tile-body .pdp-link .link', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.container-reco .product-tile .tile-body .color-swatches', function(){\n            clicCrossSell_GTM($(this));\n        });\n       \n        // Reco dans le mini-panier\n        $(document).on('click', '.js-minicart-body .clickproduct', function () {\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.js-minicart-body .product-tile .tile-body .pdp-link .link', function () {\n        clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.js-minicart-body .product-tile .tile-body .color-swatches', function () {\n        clicCrossSell_GTM($(this));\n        });\n    }\n}\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js":function(module,exports){eval('getProductJsonBase = function (Product, price, quantity, addToCartOrigin) {\n    if (Product.price) {\n        var discount = Product.price.list ? Product.price.list.value : price\n        discount = discount - price;\n        if (discount != 0)\n            discount = Math.round(discount * 100) / 100;\n    }\n    var rc = null;\n    var rct = null;\n    var rct_sku = \'\';\n    if (Product.productType == \'variationGroup\') {\n        rc = Product.id.toLowerCase();\n        rct_sku = \'\';\n        //not for layer\n    } else if (Product.productType == \'variant\') {\n        rct = Product.id.toLowerCase();\n        rct_sku = Product.rctSku ? Product.rctSku : \'\';\n        if (Product.variationGroupID) {\n            rc = Product.variationGroupID;\n        }\n    }\n    \n    let r = Product.masterID || Product.id;\n    let name = Product.productName ? Product.productName.toLowerCase() : "";\n    let category = Product.primaryCategory && Product.primaryCategory.category ? Product.primaryCategory.category.toLowerCase() : null;\n    let subCategory = Product.primaryCategory && Product.primaryCategory.subCategory ? Product.primaryCategory.subCategory.toLowerCase() : null;\n    let subsubCategory = Product.primaryCategory && Product.primaryCategory.subSubCategory ? Product.primaryCategory.subSubCategory.toLowerCase() : null;\n    let subsubsubCategory = Product.primaryCategory && Product.primaryCategory.subSubSubCategory ? Product.primaryCategory.subSubSubCategory.toLowerCase() : null;\n    let categoryName = Product.primaryCategory && Product.primaryCategory.categoryname ? Product.primaryCategory.categoryname.toLowerCase() : null;\n    let subCategoryName = Product.primaryCategory && Product.primaryCategory.subCategoryname ? Product.primaryCategory.subCategoryname.toLowerCase() : null;\n    let subsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubCategoryname ? Product.primaryCategory.subSubCategoryname.toLowerCase() : null;\n    let subsubsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubSubCategoryname ? Product.primaryCategory.subSubSubCategoryname.toLowerCase() : null;\n    let gender = Product.sexe ? Product.sexe.toLowerCase() : "";\n    let season = Product.season ? Product.season.toLowerCase() : "";\n    let price_flag = Product.flagsPromo && Product.flagsPromo.flagPromoName ? Product.flagsPromo.flagPromoName.toLowerCase() : "";\n    let product_flag = [];\n    let productset_id;\n    let productset_products_number;\n\n    \n    if (Product.flagsPromo && Product.flagsPromo.tabOfFlags && Product.flagsPromo.tabOfFlags.length > 0) {\n        for (var i = 0; i < Product.flagsPromo.tabOfFlags.length; i++) {\n            product_flag.push(Product.flagsPromo.tabOfFlags[i].name.toLowerCase());\n        }\n    }\n\n    var flagNewName;\n    if (Product.flagsPromo && Product.flagsPromo.flagNewName) {\n        flagNewName = Product.flagsPromo.flagNewName;\n    }\n\n    let brand = Product.brand ? Product.brand.toLowerCase() : "";\n    let rating = Product.rating;\n\n    let price_calcul = price;\n    if (Product.productType !== \'set\') {\n        if (Product.price.type != undefined && Product.price.type == "range") {\n            price_calcul = Product.price.max.sales.values;\n        } else {\n            price_calcul = Product.price.sales.value;\n        }\n    }\n\n    let unitpriceAti = price_calcul;\n    let brandName = Product.brandName ? Product.brandName.toLowerCase() : "";\n    let brandTitle = Product.brandTitle ? Product.brandTitle.toLowerCase() : "";\n\n    let productJson = {\n        "r": r,\n        "rc": rc,\n        "rct": rct,\n        "rct_sku": rct_sku,\n        "name": name,\n        "category": category,\n        "subCategory": subCategory,\n        "subsubCategory": subsubCategory,\n        "subsubsubCategory": subsubsubCategory,\n        "category_label": categoryName,\n        "subCategory_label": subCategoryName,\n        "subsubCategory_label": subsubCategoryName,\n        "subsubsubCategory_label": subsubsubCategoryName,\n        "gender": gender,\n        "season": season,\n        "price_flag": price_flag,\n        "product_flag": product_flag,\n        "new_flag": flagNewName,\n        "brand": brand,\n        "brandName": brandName,\n        "brandTitle": brandTitle,\n        "rating": rating,\n        "unitpriceAti": unitpriceAti,\n        "discountAti": discount,\n        "hasVideo": !!(Product.brightcoveVideos),\n        "imageNumber": Product.images && Product.images.large ? Product.images.large.length : 0\n    };\n\n    if (Product.productType == \'set\') {\n        productJson.productset_id = Product.id;\n        productJson.productset_products_number = Product.individualProducts.length;\n    }\n\n    if (quantity) {\n        productJson.quantity = quantity;\n    }\n    \n    if(addToCartOrigin){\n        productJson.addToCartOrigin = addToCartOrigin;\n    }\n\n    return productJson;\n},\n\n    module.exports = {\n        populateProduct: function (productLineItems, addQuantity, addToCartOrigin) {\n            // Prepare default value\n            addQuantity = addQuantity || false;\n            for (let i in productLineItems) {\n                let item = productLineItems[i].product;\n                //let price = item.basePrice ? item.basePrice.getValue() : item.price.sales.decimalPrice.value;\n                let price = null;\n\n                if (item.price != null) {\n                    if (item.price.sales != null) {\n                        if (item.price.sales.type == "range") {\n                            price = item.price.max.sales.values;\n                        } else {\n                            price = item.price.sales.value;\n                        }\n                    }\n                }\n\n                let quantity = null;\n                if (addQuantity) {\n                    quantity = item.quantity || parseInt(addQuantity);\n                }\n                return (getProductJsonBase(item, price, quantity, addToCartOrigin));\n            }\n        },\n    }\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n    pwaInstalled: function() {\n        window.addEventListener('appinstalled', function(evt) {\n            let GTMPWAInstalled = __webpack_require__(/*! ./util/actions/pwaInstalled */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js\");\n            GTMPWAInstalled.getDataLayerForAction();\n        });\n    },\n    usePWA: function() {\n        window.addEventListener('load', function () {\n\n            let displayMode = 'browser tab';\n\n            // Pour Safari sur IOs qui ne dispose pas de matchMedia\n            if (navigator.standalone) {\n                displayMode = 'standalone-ios';\n            }\n            \n            if (window.matchMedia('(display-mode: standalone)').matches) {\n                displayMode = 'standalone';\n            }\n\n            var hasPWA = displayMode.indexOf('standalone') != -1 ? 'yes' : 'no';\n            let GTMhasPWA = __webpack_require__(/*! ./util/pages/pwa */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js\");\n            GTMhasPWA.getDataLayerForPage({\n                hasPWA : hasPWA\n            });\n            \n        });\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js":function(module,exports,__webpack_require__){eval("var gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            \"event\": \"cart_update\",\n        };\n\n        data.e = {\n            'category' : 'cart',\n            'action' : 'update'\n        }\n\n        if (params.action) {\n            data.e.label = params.action;\n        }\n\n        data.cart = {};\n\n        var hasDiscountWithDetails = 'no';\n        if (params.cart && params.cart.totals && params.cart.totals.hasDiscountWithDetails) {\n            hasDiscountWithDetails = 'yes';\n        }\n\n        data.cart.hasOffers = hasDiscountWithDetails;\n\n        if (params.cart && params.cart.hasSavings) {\n            data.cart.hasSavings = params.cart.hasSavings;\n        }\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cart
15Update.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "clic cross-sell",\n        };\n\n        params = params || {};\n\n        data.e = [];\n\n        var product = [];\n        if (params.product){\n            product = (GTMHelper.populateProduct([{product : params.product}], false));\n        }\n        data.e={\n            category: \'cross-sell\',\n            action: params.title.trim(),\n            product: product\n        };\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicProductCart.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "clic product cart",\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicProductCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js":function(module,exports){eval('module.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "closing layer",\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/colorChanged.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "analytics",\n        };\n\n        params = params || {};\n        data.e = [];\n\n        data.e={\n            category: \'pdp\',\n            action: \'color_changed\',\n            product: {rc:params.idProductRC, rct: params.idProductRCT},\n            label : params.label\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/colorChanged.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/editProduct.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "edit from cart",\n        };\n\n        params = params || {};\n\n        var product = [];\n        if (params.product){\n            product = (GTMHelper.populateProduct([{product : params.product}], params.quantity, false));\n        }\n\n        data.e = [];\n        data.e={\n            category: "product action",\n            action: "edit product",\n            product: product\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/editProduct.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/identificationErrors.js":function(module,exports){eval('module.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "analytics",\n        };\n\n        params = params || {};\n\n        data.e = [];\n        data.e={\n            category: "account creation",\n            action:"errors",\n            label: params.reason\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/identificationErrors.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/loginReach5.js":function(module,exports){eval('module.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "analytics",\n        };\n\n        params = params || {};\n\n        data.e = [];\n        data.e={\n            category: "customer account",\n            action: "external identification attempt",\n            label: params.partner\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/loginReach5.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/newsletter.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "analytics",\n        };\n\n        params = params || {};\n\n        data.e = [];\n        data.e={\n            category: "customer account",\n            action:"newsletter",\n            label: "newsletter subscription",\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/newsletter.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/promoCode.js":function(module,exports,__webpack_require__){eval("var gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            \"event\": \"analytics\",\n        };\n\n        params = params || {};\n\n        data.e = [];\n        data.e.category = \"promocode\";\n\n        if (params && params.validity && params.label) {\n            data.e={\n                category: \"promocode\",\n                action: params.validity,\n                label: params.label,\n            };\n        }\n        \n        var promoCode = [];\n        if (params && params.totals && params.totals.discounts){\n            for (var i = 0; i < params.totals.discounts.length ; i++) {\n                var discount = params.totals.discounts[i];\n                var discountData = {};\n\n                discountData.label = discount.promotionID.split('-Valo')[0];\n                discountData.value = discount.price ? parseFloat(discount.price.replace(',', '.')) : 0;\n                /**\n                 * discountData.value need to be a positive float\n                 */\n                discountData.value = Math.abs(discountData.value);\n    \n                discountData.state = 'activated';\n                \n                var type = 'amAuto';\n                if (discount.isShippingDiscount) {\n                    type = 'freeShipping';\n                } else if (discount.checkbox) {\n                    type = 'checkBox';\n                }\n\n                discountData.type = type;\n                \n                promoCode.push(discountData);\n    \n            }\n        }\n        \n        if (params && params.totals && params.totals.uncheckedDiscounts) {\n            for (var i = 0; i < params.totals.uncheckedDiscounts.length; i++) {\n                var uncheckecDiscount = params.totals.uncheckedDiscounts[i];\n                var discountData = {};\n                discountData.label = uncheckecDiscount.promotionID ? uncheckecDiscount.promotionID.split('-Valo')[0]: '';\n                discountData.state = 'available';\n                discountData.type = 'checkBox';\n                \n                promoCode.push(discountData)\n    \n            }\n        }\n        \n\n        data.order = {promoCode : promoCode}; \n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/promoCode.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "pwa installed",\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/ratingProduct.js":function(module,exports,__webpack_require__){eval('var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\nvar gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            event: "layer",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: \'rating\',\n        };\n\n        if (params.product){\n            var product = [];\n            product = (GTMHelper.populateProduct([{product : params.product}], false));\n            const {hasVideo, imageNumber, ... productDataUpdated} = product;\n            data.layer.product = productDataUpdated;\n        }\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/ratingProduct.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/removeProduct.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "remove from cart",\n        };\n\n        params = params || {};\n\n        var product = [];\n        if (params.product){\n            product = (GTMHelper.populateProduct([{product : params.product}], params.quantity,false));\n        }\n\n        data.e = [];\n        data.e={\n            category: "product action",\n            action: "remove product",\n            product: product\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/removeProduct.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/resetPassword.js":function(module,exports){eval('module.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "analytics",\n        };\n\n        params = params || {};\n\n        data.e = [];\n        data.e={\n            category: "customer account",\n            action:"password reset request",\n            label: params.result\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/resetPassword.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/sizeChanged.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "analytics",\n        };\n\n        params = params || {};\n        data.e = [];\n\n        data.e={\n            category: \'pdp\',\n            action: \'size_changed\',\n            product: {rc:params.idProductRC, rct: params.idProductRCT},\n            label : params.label\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/sizeChanged.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/storePdp.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "analytics",\n        };\n\n        params = params || {};\n        var product = [];\n        if (params.product){\n            product = (GTMHelper.populateProduct([{product : params.product}], false));\n        }\n\n        data.e = [];\n        data.e={\n            category: "store_availability",\n            action:"click",\n            product: product,\n            label: "layer",\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/storePdp.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/addToCart.js":function(module,exports,__webpack_require__){eval("var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\nvar template = 'add to cart';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            \"event\": \"layer\",\n        };\n\n        params = params || {};\n\n        if (params.product){\n            if(params.product.productType == 'set') {\n                data.product_array_bundle = [];\n                data.layer={\n                    template: 'add_to_cart_productset',\n                };\n                var product = [];\n                var pids = false;\n\n                // check selected products in PS\n                if(params.pidsObj) {\n                    var pids = JSON.parse(params.pidsObj);\n                }\n\n                for (let i in params.product.individualProducts) {\n                    var individualProduct = params.product.individualProducts[i];\n                    if(pids) {\n                        pids.forEach((pid) => {\n                            if(pid.pid == individualProduct.id) {\n                                var productToPopulate = GTMHelper.populateProduct([{product : individualProduct}], document.querySelector('#quantity-1') ? document.querySelector('#quantity-1 option:checked').value : false, params.pageOrigin);\n                                productToPopulate.productset_id = params.product.id;\n                                productToPopulate.rct = pid.pidOrigin;\n                                product.push(productToPopulate);\n                            }\n                        });\n                    } else {\n                        var productToPopulate = GTMHelper.populateProduct([{product : params.product}], document.querySelector('#quantity-1') ? document.querySelector('#quantity-1 option:checked').value : false, params.pageOrigin);\n                            productToPopulate.productset_id = params.product.id;\n                            productToPopulate.productset_products_number = params.product.individualProducts.length;\n                            product.push(productToPopulate);\n                    }\n                }\n                data.product_array_bundle = product;\n            } else {\n                data.layer = [];\n                data.layer={\n                    template: template,\n                };\n                var product = [];\n                product = (GTMHelper.populateProduct([{product : params.product}], document.querySelector('#quantity-1') ? document.querySelector('#quantity-1 option:checked').value : false, params.pageOrigin));\n                data.layer.product = product;\n            }\n            if (params.product_array && params.product_array.length > 0) {\n                    data.product_array = params.product_array;\n            }\n        }\n\n        if (params.currentBasketId) {\n            data.cart = {\n                id : params.currentBasketId,\n                creation : params.isCartCreation\n            }\n            \n        }\n\n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer('layer', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/addToCart.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/basketMerge.js":function(module,exports,__webpack_require__){eval('// gtm/util/layers/basketMerge.js\nvar gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n    getDataLayerForLayer: function (params) {\n        var data = {\n            event: "basket_merge",\n        \n            cart: {\n                id: params.newBasketId || null,\n                old_id: params.oldBasketId || null\n            }\n        };\n\n        gtm.fillDataLayer(data);\n    }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/basketMerge.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/editCart.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'cart modification\';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "layer",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: template,\n        };\n\n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer(\'layer\', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/editCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/forgotPassword.js":function(module,exports){eval("var template = 'connexion';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            \"event\": \"layer\",\n        };\n\n        params = params || {};\n  \n\n        data.layer = [];\n        data.layer={\n            template: template,\n            name:'forgot password'\n        };\n\n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer('layer', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/forgotPassword.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/localeSelector.js":function(module,exports){eval("var template = 'language';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            \"event\": \"layer\",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: template,\n        };\n\n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer('layer', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/localeSelector.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/login.js":function(module,exports){eval("var template = 'connexion';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            \"event\": \"layer\",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: template,\n            name: 'connexion'\n        };\n\n        if (params && params.abversion_kameleoon_r5) {\n            data.layer.abversion_kameleoon_r5 = params.abversion_kameleoon_r5;\n        }\n\n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer('layer', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/login.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/miniCart.js":function(module,exports,__webpack_require__){eval('var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nvar template = \'cart\';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "layer",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: template,\n        };\n\n        if (params.products){\n            data.layer.product = params.products;\n        }\n\n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer(\'layer\', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/miniCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/offersInformations.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'offers informations\';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "layer",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: template,\n        };\n\n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer(\'layer\', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/offersInformations.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'cart_payment_option\';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "layer",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: template,\n        };\n\n        return data;\n    }, \n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer(\'layer\', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'pdp_payment_option\';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "layer",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: template,\n        };\n\n        return data;\n    }, \n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer(\'layer\', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/passwordToFillIn.js":function(module,exports){eval("var template = 'connexion';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            \"event\": \"layer\",\n        };\n\n        params = params || {};\n  \n\n        data.layer = [];\n        data.layer={\n            template: template,\n            name:'identification',\n            option: 'password to fill in'\n        };\n\n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer('layer', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/passwordToFillIn.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/quickViewCart.js":function(module,exports,__webpack_require__){eval('var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\nvar gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'quickview cart\';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "layer",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: template,\n        };\n        if (params.product){\n            var product = [];\n            product = (GTMHelper.populateProduct([{product : params.product}], false, params.addedToCartOrigin));\n            data.layer.product = product;\n        }\n\n        data.cart = [];\n        data.cart={\n            id:params.cartId,\n        }\n        \n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer(\'layer\', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/quickViewCart.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/return.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nvar template = \'return\';\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "layer",\n        };\n\n        params = params || {};\n\n        data.layer = [];\n        data.layer={\n            template: template,\n        };\n\n        return data;\n    },\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer(\'layer\', template);\n    },\n    getDataLayerForLayer : function(params) {\n        this.removeDataLayer();\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/return.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js":function(module,exports,__webpack_require__){eval("var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\npopulateData =  function (dataLayer, params) {\n    if (dataLayer.env)\n        dataLayer.env.hasPWA = params.hasPWA;\n}\n\nmodule.exports = {\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer('pageview');\n    },\n    findDataLayer : function()\n    {\n        return gtm.findDataLayer('pageview');\n    },\n    getDataLayerForPage : function(params) {\n        var dataLayer = this.findDataLayer();\n        if (dataLayer)\n            populateData(dataLayer, params);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/helpers.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nfunction decode_base64(s) {\n    var b = 0;\n    var l = 0;\n    var r = '';\n    s = s.split('');\n    var m = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n    for (var i in s) {\n        b = (b << 6) + m.indexOf(s[i]); l += 6;\n        while (l >= 8) r += String.fromCharCode((b >>> (l -= 8)) & 0xff);\n    }\n    return r.trimRight();\n}\n\nfunction isElementInViewport (el) {\n    if(el && el.offset()) {\n        var elementTop = el.offset().top;\n        var elementBottom = elementTop + el.outerHeight();\n    \n        var viewportTop = $(window).scrollTop();\n        var viewportBottom = viewportTop + $(window).height();\n    \n        return elementBottom > viewportTop && elementTop < viewportBottom;\n    }\n    return;\n}\n\nfunction initLazyLoading() {\n    var elements = document.querySelectorAll('.carousel-inner .carousel-item');\n    elements.forEach(function(element) {\n        if(!element.classList.contains('active')) {\n            element.querySelector('img').setAttribute('loading', 'lazy');\n        }\n    });\n    $('img').each(function() {\n        if(isElementInViewport($(this))) {\n            $(this).attr('loading', 'lazy');\n        }\n    });\n}\n\n\n$(function() {\n    var lazyElts = document.querySelectorAll('.carousel-inner .carousel-item');\n\n    lazyElts.forEach(function(elt) {\n        if(!elt.classList.contains('active') && elt.querySelector('img')) {\n            elt.querySelector('img').setAttribute('loading', 'lazy');\n        }\n    });\n\n    $('img').each(function() {\n        if($(this) && $(this).offset()) {\n            var elementTop = $(this).offset().top;\n            var elementBottom = elementTop + $(this).outerHeight();\n            var viewportTop = $(window).scrollTop();\n            var viewportBottom = viewportTop + $(window).height();\n\n            if(!(elementBottom > viewportTop && elementTop < viewportBottom)) {\n                $(this).attr('loading', 'lazy');\n            }\n        }\n    });\n});\n\nmodule.exports = {\n    decode_base64: decode_base64,\n    initLazyLoading: initLazyLoading\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/helpers.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/loginlayer.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar formValidationFrontend = __webpack_require__(/*! ../ds/formvalidationfrontend */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationfrontend.js\");\nvar formValidationBackend= __webpack_require__(/*! ../ds/formvalidationbackend */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationbackend.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\nvar GTMlogin = __webpack_require__(/*! ../gtm/util/layers/login */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/login.js\");\nvar GTMcloseLayer = __webpack_require__(/*! ../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\nvar GTMloginReach5 = __webpack_require__(/*! ../gtm/util/actions/loginReach5 */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/loginReach5.js\");\nvar GTMbasket =  __webpack_require__(/*! ../gtm/util/layers/basketMerge */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/basketMerge.js\");\n\n\n//on click to open connexion modal\n$(document).on('click keyup', '.user-message:not(.logged):not(.before-loading_myAccount), .sticky-account, .mobile-account', function(e) {\n    e.preventDefault();\n    if (e.type === 'click' || (e.type === 'keyup' && e.key === \"Enter\")) {\n        if ($(this).data('bs-target') == undefined) {\n            $(\"#connexionModal\").modal('show');\n        }\n    }\n});\n\n$('#connexionModal').on('shown.bs.modal', function(e) {\n    e.preventDefault();\n    var selectedValueUrl = $('#connexionModal').data('loginlayer-link');\n\n    //We create only 1 time the modal connexion\n    if ($('#connexionModal .modal-body').length == 0) {\n        fillModalElement(selectedValueUrl);\n    }\n    \n    GTMlogin.getDataLayerForLayer();\n});\n$('#logoutModal').on('shown.bs.modal', function() {\n    GTMlogin.getDataLayerForLayer();\n})\n\n$(document).ready(function(){\n    if(document.querySelector(\"#logoutModal\") !== null) {\n        document.querySelector(\"#logoutModal\").addEventListener(\n            \"click\",\n            function(event) {\n            if (\n                event.target.matches(\".btn-close\") ||\n                event.target.matches(\".modal\") || event.target.matches(\"#link-logout\")\n            ) {\n                GTMcloseLayer.getDataLayerForAction();\n            }\n            },\n            false\n        )\n    }\n});\n\n\n$(document).ready(function(){\n    if(document.querySelector(\"#connexionModal\") !== null) {\n        document.querySelector(\"#connexionModal\").addEventListener(\"click\", function(event) {\n            if (\n                event.target.matches(\".btn-close\") ||\n                event.target.matches(\".modal\")\n            ) {\n                GTMcloseLayer.getDataLayerForAction();\n            }\n            },\n            false\n        )\n    }\n});\n\n$(document).ready(function(){\n    if(document.querySelector(\"#layerModalC\") !== null) {\n        document.querySelector(\"#layerModalC\").addEventListener(\n            \"click\",\n            function(event) {\n              if (\n                event.target.matches(\".btn-close\") ||\n                event.target.matches(\".modal\")\n              ) {\n                GTMcloseLayer.getDataLayerForAction();\n              }\n            },\n            false\n        )\n    }\n\n});\n\n//$('#layerModalC').on('shown.bs.modal', function() {\n//    $(document).find(\"#layerModalC\").find('#login-form-password').focus();\n//})\n\n$('#requestPasswordResetModal').on('shown.bs.modal', function() {\n    let GTMpassword = __webpack_require__(/*! ../gtm/util/layers/forgotPassword */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/forgotPassword.js\");\n    GTMpassword.getDataLayerForLayer();\n\n    var connexionModalA = $('body').find('.connexionModalA');\n    if (connexionModalA.length) {\n        $('.js-reset-password-body').removeClass('pb-4').addClass('m-auto pt-0').find('.title-separator').remove();\n    }\n\n    var recaptchaURL = $('body').find('#grecaptchaScriptURL');\n    if (recaptchaURL.length) {\n        recaptchaURL.remove();\n        $('body').append(\n            '<script type=\"text/javascript\" src=\"' + recaptchaURL.val() + '\"><\/script>'\n        );\n    }\n}
15)\n\n$(document).ready(function(){\n    if(document.querySelector(\"#requestPasswordResetModal\") !== null) {\n        document.querySelector(\"#requestPasswordResetModal\").addEventListener(\n            \"click\",\n            function(event) {\n            if (\n                event.target.matches(\".btn-close\") ||\n                event.target.matches(\".modal\")\n            ) {\n                GTMcloseLayer.getDataLayerForAction();\n            }\n            },\n            false\n        )\n    }\n});\n\n$(document).ready(function(){\n    if(document.querySelector(\"#layerModalPasswordReceived\") !== null) {\n        document.querySelector(\"#layerModalPasswordReceived\").addEventListener(\n            \"click\",\n            function(event) {\n            if (\n                event.target.matches(\".btn-close\") ||\n                event.target.matches(\".modal\")\n            ) {\n                GTMcloseLayer.getDataLayerForAction();\n            }\n            },\n            false\n        )\n    }\n});\n\n$(document).on('click', '#connexionModal .r5-btn-social-facebook', function() {\n    GTMloginReach5.getDataLayerForAction({\n        partner: 'facebook',\n    });\n});\n\n$(document).on('click', '#connexionModal .r5-btn-social-paypal', function() {\n    GTMloginReach5.getDataLayerForAction({\n        partner: 'paypal',\n    });\n});\n\n$(document).on('click', '#connexionModal .r5-btn-social-google', function() {\n    GTMloginReach5.getDataLayerForAction({\n        partner: 'google',\n    });\n});\n\n$(document).on('click', '#connexionModal .r5-btn-social-apple', function() {\n    GTMloginReach5.getDataLayerForAction({\n        partner: 'apple',\n    });\n});\n\n\n/**\n * replaces the content in the modal window on for the selected product variation.\n * @param {string} selectedValueUrl - url to be used to retrieve a new product model\n */\n function fillModalElement(selectedValueUrl) {\n    $('#connexionModal .modal-content').spinner().start();\n\n    $.ajax({\n        url: selectedValueUrl,\n        method: 'GET',\n        success: function (data) {\
15n\n            $('#connexionModal .modal-content').empty();\n            $('#connexionModal .modal-content').html(data);\n\n            //Update R5 Dans le layer connexion\n            var $reachFiveForm = $('#connexionModal .login-oauth');\n            var url = $reachFiveForm.data('urlreachfive');\n            \n            $('#connexionModal .modal-content').spinner().stop();\n            var $socialConnect = $('#connexionModal .login-oauth');\n            $socialConnect.spinner().start();\n            $.ajax({\n                url: url,\n                dataType: \"html\",\n                success: function(data) {\n                    $reachFiveForm.append(data);\n                    $socialConnect.spinner().stop();\n                },\n                error: function () {\n                    $socialConnect.spinner().stop();\n                }\n            });\n\n            \n        },\n        error: function () {\n            $('#connexionModal .modal-content').spinner().stop();\n        }\n    });\n}\n\nmodule.exports = {\n    linklogout: function() {\n\t\t$('body').on('click','#link-logout',function(){\n            try{\n                window.didomiOnReady = window.didomiOnReady || [];\n                window.didomiOnReady.push(function (Didomi) { \n                        Didomi.getObservableOnUserConsentStatusForVendor('c:batch')\n                    .filter(function (status) { return status !== undefined })\n                    .subscribe(function (consentStatus) {\n                        if (consentStatus === true) {\n                            batchSDK(function (api) {\n                                api.profile().then(profile => {\n                                    profile.identify({customId: null})\n                                });\n                            });\n                        }\n                    });\n                });\n            }catch(error){\n                \n            }\n            location.href = $(this).data('href');\n        });\n\t\t\n    },\n    loginlayer: function () {\n        $(document).on('submit', 'form.loginlayer', function (e) {\n            var form = $(this);\n            e.preventDefault();\n            if(formValidationFrontend(form)){\n                var url = form.attr('action');\n                form.spinner().start();\n                $('form.login').trigger('login:submit', e);\n                $.ajax({\n                    url: url,\n                    type: 'post',\n                    dataType: 'json',\n                    data: form.serialize(),\n                    success: function (data) {\
15n                        form.spinner().stop();\n                        if (!data.success) {\n                            if (data.askForMailChanging && data.modalContent) {\n                                $('body').append(data.modalContent);\n                                $(\"#layerModalC\").modal('hide');\n                                $(\"#askForMailChangingModal\").modal('show');\n                                return;\n                            }\n                            formValidationBackend(form, data);\n                            data.error ? displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.error) : false ;\n                            if (data.isBasketMerge) {\n                                try {\n                                        \n                                    GTMbasket.getDataLayerForLayer({\n                                        oldBasketId: data.oldBasketId,\n                                        newBasketId: data.newBasketId\n                                            });\n                                } catch (e) {\n                                    console.error('GTM basketMerge error:', e);\n                                }\n                            }\n                            $('form.login').trigger('login:error', data);\n                            let GTMresetPassword = __webpack_require__(/*! ../gtm/util/actions/identificationErrors */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/identificationErrors.js\");\n                            GTMresetPassword.getDataLayerForAction({reason: data.gtmlabel,abversion: data.abversion});\n                            if(data.openPasswordForget){\n                                $(\"#connexionModal\").modal('hide');\n                                $(\"#requestPasswordResetModal\").modal('show');\n                            }\n                        } else {\n                            $('form.login').trigger('login:success', data);\n\n                            try{\n                                window.didomiOnReady = window.didomiOnReady || [];\n                                window.didomiOnReady.push(function (Didomi) { \n                                        Didomi.getObservableOnUserConsentStatusForVendor('c:batch')\n                                    .filter(function (status) { return status !== undefined })\n                                    .subscribe(function (consentStatus) {\n                                        if (consentStatus === true) {\n                                            batchSDK(function (api) {\n                                                api.profile().then(profile => {\n                                                    profile.identify({customId: data.storelandID})\n                                                });\n                                            });\n                                        }\n                                    });\n                                });\n                            }catch(error){\n                                \n                            }\n                            window.location.reload();\n                        }\n                    }
15,\n                    error: function (data) {\n                        if (data.responseJSON.redirectUrl) {\n                            window.location.href = data.responseJSON.redirectUrl;\n                        } else {\n                            $('form.login').trigger('login:error', data);\n                            form.spinner().stop();\n                        }\n                    }\n                });\n                return false;\n            }\n        });\n    },\n    \n    loginlayerC: function () {\n        $(document).on('submit', 'form.loginlayer-c',function (e) {\n            var form = $(this);\n            e.preventDefault();\n            if(formValidationFrontend(form)){\n                var url = form.attr('action');\n                form.spinner().start();\n                $.ajax({\n                    url: url,\n                    type: 'get',\n                    dataType: 'json',\n                    data: form.serialize(),\n                    success: function (data) {\n                        form.spinner().stop();\n                        if (!data.exist && data.redirectUrl) {\n                            let GTMresetPassword = __webpack_require__(/*! ../gtm/util/actions/identificationErrors */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/identificationErrors.js\");\n                            GTMresetPassword.getDataLayerForAction({reason: 'email does not exist'});\n                            window.location.href = data.redirectUrl;\n                        } else {\n                            //Afficher le champ mdp\n                            $('#layerC-login-form-email').val(data.mail);\n                            $('#label-returnC').html(data.mail);\n                            $('#password-reset').data('email',data.mail);\n                            $(\"#connexionModal\").modal('hide');\n                            $(\"#layerModalC\").modal('show');\n                            $('#login-form-password').trigger('focus');\n                            let GTMpassword = __webpack_require__(/*! ../gtm/util/layers/passwordToFillIn */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/passwordToFillIn.js\");\n                            GTMpassword.getDataLayerForLayer();\n                        }\n                    }\n                });\n                return false;\n            }\n        });\n    },\n\n    returnLayerC: function () {\n        $(document).on('click', '.returnLayerC', function() {\n            $(\"#layerModalC\").modal('hide');\n            $(\"#connexionModal\").modal('show');\n        });\n    },\n\n    returnUrlLayerC: function () {\n        $('#layerModalC #password-reset').on('click', function() {\n            $('#requestPasswordResetModal').data(\"email\",$(this).data(\"email\"));\n            $('#requestPasswordResetModal button.back').removeClass().addClass('back returnLayerC');\n            $(\"#requestPasswordResetModal\").modal('show');\n        })\n    },\n\n    initFunction: $(function() {\n        if($('.active-loader').length) \n            $('.user-message.before-loading_myAccount').removeClass('before-loading_myAccount');\n            $('.user a').removeAttr('href')\n    })\n\n\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/loginlayer.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/resetPassword.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar formValidation = __webpack_require__(/*! ../components/formValidation */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/formValidation.js\");\nvar formValidationFrontend = __webpack_require__(/*! ../ds/formvalidationfrontend */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationfrontend.js\");\nvar formValidationBackend = __webpack_require__(/*! ../ds/formvalidationbackend */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/formvalidationbackend.js\");\n\nmodule.exports = {\n    resetPasswordRequestSubmit: function () {\n        $('body').on('submit', '#js-reset-password-form', function (e) {\n            var form = $(this);\n            e.preventDefault();\n            var url = form.attr('action');\n            form.spinner().start();\n\n            if ($(document).find('#grecaptcharesponselogin').length && formValidationFrontend($(this))) {\n            \tgrecaptcha.ready(function() {\n        \t\t\tvar keyReCaptcha = form.attr('data-keyrecaptcha');\n        \t\t\t\n        \t\t\tgrecaptcha.execute(keyReCaptcha, {action: 'submit'}).then(function(token) {\n                        $(document).find('#grecaptcharesponselogin').val(token);\n                        \n                        $.ajax({\n                            url: url,\n                            type: 'post',\n                            dataType: 'json',\n                            data: form.serialize(),\n                            success: function (data) {\
15n                                form.spinner().stop();\n                                if (!data.success) {\n                                    formValidationBackend(form, data);\n                                    //formValidation(form, data);\n                                } else {\n                                    if(data.emailExist){\n                                        let GTMresetPassword = __webpack_require__(/*! ../gtm/util/actions/resetPassword */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/resetPassword.js\");\n                                        GTMresetPassword.getDataLayerForAction({result: 'successfull'});\n                                        $('#emailPasswordReceived').html(data.email);\n                                        $(\"#requestPasswordResetModal\").modal('hide');\n                                        $(\"#layerModalPasswordReceived\").modal('show');\n                                        \n                                    }
15else{\n                                        let GTMresetPassword = __webpack_require__(/*! ../gtm/util/actions/resetPassword */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/resetPassword.js\");\n                                        GTMresetPassword.getDataLayerForAction({result: 'ko'});\n                                        $('#emailPasswordNotReceived').html(data.email);\n                                        $(\"#requestPasswordResetModal\").modal('hide');\n                                        $(\"#layerModalPasswordNotReceived\").modal('show');\n                                    }\n                                    \n                                }\n                            },\n                            error: function () {\n                                form.spinner().stop();\n                            }\n                        });\n                        return false;\n            \t\t\t\n        \t\t\t});\n            \t});\n            }\n\n\n            \n        });\n    },\n\n    resetPasswordModalFiller: function() {\n        $('#requestPasswordResetModal').on('show.bs.modal', function() {\n            \n            let url = $(this).data('action-url');\n            let resetPasswordModalBody = $('.js-reset-password-body');\n            var emailAdd = $(this).data('email');\n            resetPasswordModalBody.spinner().start();
15\n            $.get(url, function (data) {\n                resetPasswordModalBody.empty();\n                resetPasswordModalBody.append(data);\n                $('#reset-password-email').val(emailAdd);\n                $.spinner().stop();\n            });\n        });\n    },\n\n    returnPasswordReset: function() {\n        $('.returnPasswordReset').on('click', function() {\n            $(\"#layerModalPasswordNotReceived\").modal('hide');\n            $(\"#requestPasswordResetModal\").modal('show');\n            \n        });\n    },\n    returnPasswordResetBis: function() {\n        $('.checkout-password-reset').on('click', function() {\n            $('#requestPasswordResetModal').data(\"email\",$(this).data(\"email\"));\n            $(\"#requestPasswordResetModal\").modal('show');\n        });\n    }\n\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/resetPassword.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/main.js":function(module,exports,__webpack_require__){eval('var processInclude = __webpack_require__(/*! ./util */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js");\n\n$(function() {\n    \n    processInclude(__webpack_require__(/*! ./components/menu */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/menu.js"));\n    processInclude(__webpack_require__(/*! ./components/footer */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/footer.js"));\n    processInclude(__webpack_require__(/*! ./components/miniCart */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/miniCart.js"));\n    processInclude(__webpack_require__(/*! ./components/collapsibleItem */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/collapsibleItem.js"));\n    processInclude(__webpack_require__(/*! ./components/search */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/search.js"));\n    processInclude(__webpack_require__(/*! ./components/countrySelector */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/countrySelector.js"));\n    processInclude(__webpack_require__(/*! ./login/loginlayer */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/loginlayer.js"));\n    processInclude(__webpack_require__(/*! ./login/resetPassword */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/login/resetPassword.js"));\n    processInclude(__webpack_require__(/*! ./product/clickproduct.js */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/clickproduct.js"));\n    processInclude(__webpack_require__(/*! ./components/toolTip */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/toolTip.js"));\n});\n\n\n\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/main.js?')},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/addToCartSuccess.js":function(module,exports,__webpack_require__){"use strict";eval("\nvar approachingDiscounts = __webpack_require__(/*! ../cart/approachingDiscounts */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/cart/approachingDiscounts.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\n\n/**\n * Add a  product line item to the product list.\n * Originally made for gift wrap, can be extended to more\n * @param {Object} data - AJAX response from the server\n */\nfunction updateProductsInCart(data) {\n    $('#cart-products').empty().html(data.cartCardHtml);\n}\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 = '\x3c!-- Modal --\x3e' +\n        '<div class=\"modal fade\" id=\"chooseBonusProductModal\" role=\"dialog\">' +\n        '<div class=\"modal-dialog choose-bonus-product-dialog\" ' +\n        'data-total-qty=\"' + data.maxBonusItems + '\"' +\n        'data-UUID=\"' + data.uuid + '\"' +\n        'data-pliUUID=\"' + data.pliUUID + '\"' +\n        'data-addToCartUrl=\"' + data.addToCartUrl + '\"' +\n        'data-pageStart=\"0\"' +\n        'data-pageSize=\"' + data.pageSize + '\"' +\n        'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"' +\n        'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">' +\n        '\x3c!-- Modal content--\x3e' +\n        '<div class=\"modal-content\">
15' +\n        '<div class=\"modal-header\">' +\n        '    <span class=\"\">' + data.labels.selectprods + '</span>' +\n        '    <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">&times;</button>' +\n        '</div>' +\n        '<div class=\"modal-body\"></div>' +\n        '<div class=\"modal-footer\"></div>' +\n        '</div>' +\n        '</div>' +\n        '</div>';\n    $('body').append(htmlString);\n    $('.modal-body').spinner().start();\n\n    $.ajax({\n        url: bonusUrl,\n        method: 'GET',\n        dataType: 'html',\n        success: function (html) {\n            var parsedHtml = parseHtml(html);\n            $('#chooseBonusProductModal .modal-body').empty();\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\nfunction handlePostCartAdd(response) {\n    $('.minicart').trigger('count:update', response);\n    $('body').trigger('pwa:updateCard', response.cart);\n\n    // show add to cart toast\n    if (response.newBonusDiscountLineItem &&\n        Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n        chooseBonusProducts(response.newBonusDiscountLineItem);\n    } else {\n        let url = $('.js-minicart').data('action-url');\n        let count = parseInt($('.js-minicart .minicart-quantity').text(), 10);\n\n        if (count !== 0 && $('.minicart .popover.show').length === 0) {\n            let miniCartModal = $('.js-minicart-body');\n            $('#miniCartModal').modal('show');\n            miniCartModal.spinner().start();
15\n            $.get(url, function (data) {\n\n                miniCartModal.empty();\n                miniCartModal.append(data);\n\n                if (typeof $('body #js-added-to-cart-msg') == \"undefined\") {\n                    $('body').prepend($('#js-added-to-cart-msg'));\n                }\n                // use for AB Test OCS-248 Variation 2\n                $('#layerCart').addClass('test-hide');\n\n                $('#js-added-to-cart-msg').addClass('show');\n\n\n\n                var checkExist = setInterval(function () {\n                    var $reco = $(document).find('#slot-pushproduct');\n\n                    // use for AB Test OCS-248 Variation 1\n                    var useAnchor = $(document).find('.js-minicart-body').data('use-anchor');\n                    if(useAnchor === undefined) {\n                        useAnchor = true;\n                    }\n                    // END AB Test OCS-248 Variation 1\n                    \n                    if ($reco && $reco.length > 0) {\n                        var anchor = $reco.data('slot-anchor');\n                        if (anchor && useAnchor) {\n                            $reco.parents('.modal-content').animate({ scrollTop: $reco[0].offsetTop }, 'slow');\n\n                        }\n                        clearInterval(checkExist);\n                    }\n                }, 200);\n                miniCartModal.spinner().stop();\n            });\n        }\n    }\n}\n\n/**\n * re-renders the order totals and the number of items in the cart\n * @param {Object} data - AJAX response from the server\n */\nfunction updateCartTotals(data) {\n    $('body').trigger('pwa:updateCard', data);\n\n    $('.number-of-items').empty().append(data.resources.numberOfItems);\n    $('.shipping-cost-cart').empty().append(data.totals.totalShippingCost);\n    $('.shipping-cost').empty().append(data.totals.totalShippingCost);\n    $('.tax-total').empty().append(data.totals.totalTax);\n    if ($('#checkout-main').length > 0) {\n        $('.grand-total-sum').empty().append(data.totals.grandTotal);\n    } else {\n        $('.grand-total').empty().append(data.totals.grandTotal);\n    }\n    let deliveryCost = \"\";\n    const deliveryMethod = data.shipments[0].bestShippingMethodDisplayName !== undefined ? data.shipments[0].bestShippingMethodDisplayName : data.shipments[0].selectedShippingMethodDisplayName;\n    if (data.shipments[0].bestShippingMethodTotals !== undefined && data.shipments[0].bestShippingMethodTotals.totalShippingCost !== undefined ) {\n        deliveryCost = data.shipments[0].bestShippingMethodTotals.totalShippingCost;\n    } else {\n        data.shipments[0].shippingMethods.forEach(function(deliveryMethodName) {\n            if (deliveryMethodName.displayName == deliveryMethod) {\n                if (deliveryMethodName.shippingCost == '0,00 €') {\n                    deliveryCost = $('.delivery-value').attr('data-free-delivery');\n                } else {\n                    deliveryCost = deliveryMethodName.shippingCost;\n                }\n            }\n        })\n    }\n    $('.delivery-text').empty().append(deliveryMethod);\n    $('.delivery-value').empty().append(deliveryCost);\n    $('.totalPrice').empty().append(data.totals.grandTotal);\n    $('.sub-total').empty().append(data.totals.subTotal);\n    $('.minicart-quantity').empty().append(data.numItems);\n    $('.minicart-layer-quantity').empty().append('(' + data.numItems + ')');\n\n    $('.bonus-product-line-item').remove();\n    if (data.hasBonusProduct) {\n        addProductlineItem(data);\n    }\n\n    if (data.totals.orderLevelDiscountTotal.value > 0) {\n        $('.order-discount').removeClass('hide-order-discount');\n        $('.order-discount-total').empty()\n            .append('- ' + data.totals.orderLevelDiscountTotal.formatted);\n    } else {\n        $('.order-discount').addClass('hide-order-discount');\n    }\n\n    if (data.totals.shippingLevelDiscountTotal.value > 0) {\n        $('.shipping-discount').removeClass('hide-shipping-discount');\n        $('.shipping-discount-total').empty().append('- ' +\n            data.totals.shippingLevelDiscountTotal.formatted);\n    } else {\n        $('.shipping-discount').addClass('hide-shipping-discount');\n    }
15\n\n    data.items.forEach(function (item) {\n        $('.item-' + item.UUID).empty().append(item.renderedPromotions);\n        $('.item-total-' + item.UUID).empty().append(item.priceTotal.renderedPrice);\n    });\n\n    //ABtestEconomy  segment : economyProductBasket // economyBasket\n    var $cartEconomySelector = $('.js-cart-economy');\n    if ($cartEconomySelector.length > 0) {\n        if (data.totals.cartEconomy) {\n            $cartEconomySelector.replaceWith(data.totals.cartEconomyHtml);\n        } else {\n            $cartEconomySelector.empty();\n        }\n    }\n}\n\n/**\n * Checks whether the basket is valid. if invalid displays error message and disables\n * checkout button\n * @param {Object} data - AJAX response from the server\n */\nfunction validateBasket(data) {\n    if (data.valid.error) {\n        if (data.valid.message) {\n            displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.valid.message);\n\n            if (data.valid.invalidProducts.length > 0) {\n                $('.product-cart-invalid').removeClass('d-flex').addClass('d-none');\n                data.valid.invalidProducts.forEach(function(invalidProduct) {\n                    $('.product-cart-invalid[data-pid=\"' + invalidProduct + '\"]').removeClass('d-none').addClass('d-flex');\n                });\n            }\n        } else {\n            $('.cart').empty().append('<div class=\"row\"> ' +\n                '<div class=\"col-12 text-center\"> ' +\n                '<h1>' + data.resources.emptyCartMsg + '</h1> ' +\n                '</div> ' +\n                '</div>'\n            );\n            $('.number-of-items').empty().append(data.resources.numberOfItems);\n            $('.minicart-quantity').empty().append(data.numItems);\n            $('.minicart-layer-quantity').empty().append('(' + data.numItems + ')');\n            $('.minicart .popover').empty();\n            $('.minicart .popover').removeClass('show');\n        }\n\n        $('.checkout-btn').addClass('disabled');\n    } else {\n        $('.checkout-btn').removeClass('disabled');\n        $('.product-cart-invalid').removeClass('d-flex').addClass('d-none');\n    }\n}\n\nfunction validateExclusionProducts(validExclusionProducts, basket) {\n    let productAvailable = true;\n    const jsValidExluButton = document.querySelectorAll('.js-valid-exclusion'); /* Mobile and desktop buttons */\n    if (validExclusionProducts && validExclusionProducts.valid) {\n        $(document).find('.valid-exclusion-product-error').addClass('d-none');\n    }\n    else {\n        $(document).find('.valid-exclusion-product-error').removeClass('d-none');\n    }\n\n    if (jsValidExluButton.length !== 0) {\n        basket.items.forEach(function(product) {\n            product.available !== true ? productAvailable = false : false ;\n        })\n\n        jsValidExluButton.forEach(function(button) { \n            productAvailable == true ? (button.classList.remove('disabled'), button.setAttribute('aria-disabled', 'false')) : (button.classList.add('disabled'), button.setAttribute('aria-disabled', 'true')) ;\n        })\n    }\n}\n\n/**\n * Updates price of all product lines item\n * @param {Object} items - list of items from the server\n * Info : it's useful only when valopanier said to apply Pricebook when customer update quantity\n */\nfunction updatePrice(items) {\n    for (var i = 0; i < items.length; i++) {\n        var priceSelector = '.Price-' + items[i].UUID;\n        $(priceSelector).replaceWith(items[i].price.html);\n\n        //ABtestEconomy  segment : economyProductBasket\n        var economySelector = '.js-lineitem-economy-' + items[i].UUID;\n        if ($(economySelector).length > 0) {\n            if (items[i].economy) {\n                $(economySelector).replaceWith(items[i].economyHtml);\n            } else {\n                $(economySelector).empty();\n            }\n        }\n    }\n}\n\nfunction ajaxAddToCart(data, dataPageOrigin){\n    \n    let GTMaddToCart = __webpack_require__(/*! ../gtm/util/layers/addToCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/addToCart.js\");\n    GTMaddToCart.getDataLayerForLayer({\n        product: data.product,\n        pageOrigin: dataPageOrigin,\n        currentBasketId: data.currentBasketId,\n        pidsObj: data.pidsObj,\n        product_array: data.product_array,\n        isCartCreation: data.isCartCreation \n    });\n\n    if($(document).find('#batch').length > 0) {\n        let cartEventsBatch = __webpack_require__(/*! ../batch/cartEventsBatch */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/batch/cartEventsBatch.js\");\n        cartEventsBatch.addedToCart(data.cart, data.product);\n    } else if($(document).find('#adrenalead').length > 0) {\n        let cartEventsAdrenalead = __webpack_require__(/*! ../adrenalead/cartEventsAdrenalead */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/adrenalead/cartEventsAdrenalead.js\");\n        cartEventsAdrenalead.addedToCart(data.cart, data.product);\n    }\n\n    // update bestshippingMethodName\n    if (data && data.bestShippingMethodName) {\n        if ($('.js-best-shipping-name').length > 0) {\n            $('.js-best-shipping-name').empty().html(data.bestShippingMethodName);\n        }\n    }\n    if ($('.Cart-Show').length > 0 && data) {\n        if (data.cartWasEmpty) {\n            window.location.reload();\n        } else {\n            updateProductsInCart(data); //ok\n            $('.coupons-and-promos').empty().append(data.cart.totals.discountsHtml); //ok\n            //ABTestEconomy segment : economyProductBasket // economyBasket // Control\n            //Tracking\n            let GTMcartUpdate = __webpack_require__(/*! ../gtm/util/actions/cart
15Update */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/cartUpdate.js\");\n            GTMcartUpdate.getDataLayerForAction({\n                cart: data.cart,\n                action: 'product added to cart'\n            });\n            //////////////////////////////////////////////////////////\n            updateCartTotals(data.cart);\n            approachingDiscounts.updateApproachingDiscounts(data.cart.approachingDiscounts); //ok\n            $('body').trigger('setShippingMethodSelection', data.cart);\n            validateBasket(data.cart);\n            validateExclusionProducts(data.validExclusionProducts, data.cart);\n            updatePrice(data.cart.items);\n            $('body').trigger('cart:update');\n        }\n    }\n    \n    handlePostCartAdd(data);\n    $('body').trigger('product:afterAddToCart', data);\n    $.spinner().stop();\n}\n\nmodule.exports = {\n    ajaxAddToCart : ajaxAddToCart\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/addToCartSuccess.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/base.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar sizeChartAlreadyLoaded = false;\nvar lastUrl = \"\";\nvar helpers = __webpack_require__(/*! ../helpers */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/helpers.js\");\nconst addToCartSuccess = __webpack_require__(/*! ./addToCartSuccess */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/addToCartSuccess.js\");\nconst addToCart = __webpack_require__(/*! ../gtm/util/layers/addToCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/addToCart.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\");\n\n/**\n * appends params to a url\n * @param {string} url - Original url\n * @param {Object} params - Parameters to append\n * @returns {string} result url with appended parameters\n */\nfunction appendToUrl(url, params) {\n    var newUrl = url;\n    newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n        return key + '=' + encodeURIComponent(params[key]);\n    }).join('&');\n\n    return newUrl;\n}\n/**\n * 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').data('pid');\n    } else if($('.container-adproduct').length){\n        pid = $($el).closest('.container-adproduct').data('pid');\n    }else {\n        pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n    }\n\n    return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n    return $el && $('.set-items').length ?\n        $($el).closest('.product-detail').find('.quantity-select') :\n        $('.quantity-select');\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/** Manage position of the active color **/\nfunction colorSelectedFirstPos() {\n    const colors = document.querySelectorAll(\".product-detail .color-attribute\");\n    if (colors) {\n        colors.forEach(function(color) {\n            color.classList.contains('selected') ? color.classList.remove('selected') : false ;\n            if (color.querySelector('.color-value') != null && color.querySelector('.color-value').classList.contains('selected')) {\n                colors[0].insertAdjacentElement('beforebegin', color)\n            }\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, $productC
15ontainer, 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.length !== 0) {\n            if (attrValue.selected) {\n                var $attrSelected = $(\"#js-color-name\")[0];\n                $attrValue.addClass('selected');\n                $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\n                if ($attrValue.length > 0) {\n                    var $selectedColor = $attrValue[0].getAttribute(\"data-color\");\n                    // update attribute label\n                    var colorText = $('#js-color-name .attr-text')[0].innerText;\n                    $attrSelected.innerHTML = '<span class=\"attr-text\">'+colorText+'</span>'+ $selectedColor;\n                    $attrValue[0].closest(\"a.ocs-item-control-item\") !== null ? $attrValue[0].closest(\"a.ocs-item-control-item\").classList.add(\"selected\") : false;\n                    // update product label\n                    var $productName = $(\"h1.product-name\")[0];\n                    var productDataName = $productContainer.data('name');\n                    $productName.innerHTML = productDataName;\n                    var productDataDisplayColor = $productContainer.data('displaycolor');\n                    if (!productDataDisplayColor && $('.set-items').length === 0) {\n                        $productName.innerHTML += \" - \" + $selectedColor;\n                    }\n                }\n            } else {\n                $attrValue.removeClass('selected');\n                $attrValue[0].closest(\"a.ocs-item-control-item\") !== null ? $attrValue[0].closest(\"a.ocs-item-control-item\").classList.remove(\"selected\") : false;\n                $attrValue.siblings('.selected-assistive-text').empty();\n            }\n        }\n\n        /* --------------------- AB OCS-1136 --------------------- */\n        if (attr.attributeId == \"color\" && document.querySelector('#colorSelect') !== null) {\n            var colorOpt = document.querySelectorAll('#colorSelect option');\n            colorOpt.forEach(function(opt) {\n                opt.getAttribute('data-color') == attrValue.displayValue ? opt.setAttribute('data-url', attrValue.url) : false;\n            })\n        }\n        /* --------------------- AB OCS-1136 --------------------- */\n        \n        if (attrValue.url) {\n            $swatchButton.attr('data-url', attrValue.url);\n        } else {\n            $swatchButton.removeAttr('data-url');\n        }\n    });\n}\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {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        $attrValue.removeAttr('disabled');\n\n        var $attrButton = $attrValue.parent();\n\n        // Check if the button and span shoud be disabled or not\n        if (!attrValue.selectable) {\n            /* --------------------- AB OCS-1136 --------------------- */\n            if ($attrValue[0] !== null) {\n                if ($attrValue[0].localName == \"option\") {\n                    $attrValue[0].setAttribute('disabled', true);\n                    if ($attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input input[type=\"text\"]').value == attrValue.displayValue) { /*It means the option selected is now disabled */\n                        $attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input').classList.remove('has-value');\n                        $attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input input[type=\"text\"]').value = \"\";\n                    }\n            /* --------------------- AB OCS-1136 --------------------- */\n                } else {\n                    $attrValue[0].closest(\".ocs-item-control-item\").setAttribute('disabled', true);\n                    $attrValue[0].closest(\"button.ocs-button\").setAttribute('aria-disabled', true);\n                    $attrButton.prop('disabled', true).removeClass('selectable').addClass('unselectable');\n                    $attrValue.removeClass('selectable').addClass('unselectable');\n                }\n            }\n        } else {\n            /* --------------------- AB OCS-1136 --------------------- */\n            if ($attrValue[0] !== null) {\n                if ($attrValue[0].localName == \"option\") {\n                    $attrValue[0].removeAttribute('disabled');\n            /* --------------------- AB OCS-1136 --------------------- */\n                } else {\n                    $attrValue[0].closest(\".ocs-item-control-item\").removeAttribute(\"disabled\");\n                    $attrValue[0].closest(\"button.ocs-button\").setAttribute(\"aria-disabled\", false);\n                    $attrButton.removeAttr('disabled').removeClass('unselectable').addClass('selectable');\n                    $attrValue.removeClass('unselectable').addClass('selectable');\n                }\n            }\n        }\n\n        if ($attrValue[0] !== null && $attrValue[0].localName !== \"option\") { /* --------------------- AB OCS-1136 CONDITION --------------------- */\n            // Set/Unset the select class fron the attribute\n            if (!attrValue.selected) {\n                $attrValue.removeClass('select');\n                $attrValue[0].closest(\"button.ocs-button\").classList.remove(\"selected\");\n                $attrValue[0].closest('.ocs-item-control-item').classList.remove(\"selected\");\n            } else {\n                $attrValue.addClass('select');\n                $attrValue[0].closest(\"button.ocs-button\").classList.add(\"selected\");\n                \n                if ($('.set-items').length)\n                    var selectCheckbox = $productC
15ontainer.find(':checkbox');\n                if (selectCheckbox && !selectCheckbox.is(':checked'))\n                    selectCheckbox.attr('checked', 'checked').addClass('checked').trigger('change');\n            }\n        }\n\n        /* Override the standard only for length */\n        if (attr.id === 'length') {\n            if (attrValue.selected) {\n                $attrValue.prop('selected', true);\n            } else {\n                $attrValue.prop('selected', false);\n            }\n        }\n    });\n}\n\nfunction adProcessNonSwatchValues(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\n    attr.values.forEach(function (attrValue) {\n        var $attrValue = $productContainer\n            .find($attr + ' select.js-select-adproduct-' + attr.id + ' option[data-attr-value=\"' + attrValue.value + '\"]');\n        $attrValue.attr('value', attrValue.url);\n        $attrValue.attr('data-url', attrValue.url);\n        $attrValue.removeAttr('disabled');\n        \n\n        // Check if the button and span shoud be disabled or not\n        if (!attrValue.selectable) {\n            $attrValue.prop('disabled', true)\n        } else {\n            $attrValue.removeAttr('disabled')\n        }\n\n        // Set/Unset the select class fron the attribute\n        if (!attrValue.selected) {\n            $attrValue.removeAttr('selected');\n        } else {\n            $attrValue.prop('selected',true);\n        }\n\n        /* Override the standard only for length */\n        if (attr.id === 'length') {\n            if (attrValue.selected) {\n                $attrValue.prop('selected', true);\n            } else {\n                $attrValue.prop('selected', false);\n            }\n        }\n\n        if (!attrValue.selectable && $attrValue[0] !== null && $attrValue[0].localName == \"option\") {\n            $attrValue[0].setAttribute('disabled', true);\n            if ($attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input input[type=\"text\"]').value == attrValue.displayValue) { /*It means the option selected is now disabled */\n                $attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input').classList.remove('has-value');\n                $attrValue[0].closest(\".ocs-select\").querySelector('.ocs-input input[type=\"text\"]').value = \"\";\n            }\n        }\n    });\n}\n\n/**\n * Decide whether to display or not the length attribute field\n *\n * The length attribute field is displayed when:\n *   - A size is selected, and at least one \"real\" size exists\n *\n * @param {Object} attrSize - The size attribute\n * @param {Object} attrLength - The length attribute\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateLengthVisibilty(attrSize, attrLength, $productContainer) {\n    /* Default value for length display is false */\n    var isLengthDisplayed = false;\n    var sizeValueSelected = false;\n\n    /* Search if a size is selected */\n    attrSize.values.forEach(function (attrSizeValue) {\n        if (attrSizeValue.selected) {\n            sizeValueSelected = true;\n        }\n    });\n\n    /* When a size is selected, decide if the length should be diplated */\n    if (sizeValueSelected === true) {\n        var countSelectableRealLengthValues = 0;\n\n        /* Count the real number of selectable length. */\n        attrLength.values.forEach(function (attrLengthValue) {\n            /* The value \"099099\" is not a real value. It is used as a default value for items that doesn't have a size\n              It will be removed from import data, but is still here for sometimes.\n            */\n            //TODO To be removed when no more \"099099\" are sent in HC import files\n            if (attrLengthValue.selectable && attrLengthValue.id !== \"099099\") {\n                countSelectableRealLengthValues++;\n            }\n        });\n\n        if (countSelectableRealLengthValues > 0) {\n            isLengthDisplayed = true;\n        }\n    }\n\n    if (isLengthDisplayed === true) {\n        selectLengthIfOnlyOne();\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}
15 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    var attrSize = null;\n    var attrLength = null;\n\n    attrs.forEach(function (attr) {\n        if (attrsWithSwatches.indexOf(attr.id) > -1) {\n            processSwatchValues(attr, $productContainer, msgs);\n        } else {\n            if($productContainer[0].closest('.container-adproduct') !== null){\n                adProcessNonSwatchValues(attr, $productContainer);\n            }else{   \n                processNonSwatchValues(attr, $productContainer);\n            }\n        }\n\n        if (attr.id === 'size') {\n            attrSize = attr;\n        }\n        if (attr.id === 'length') {\n            attrLength = attr;\n        }\n    });\n\n\n    if (attrSize !== null && attrLength !== null) {\n        updateLengthVisibilty(attrSize, attrLength, $productContainer);\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 = '<li class=\"message-taille-longueur\"><div>' + response.resources.info_selectforstock + '</div></li>';\n    } else {\n        availabilityMessages.forEach(function (message) {\n            availabilityValue += '<li><div>' + message + '</div></li>';\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\nfunction updateStressMarketing(response, $productContainer) {\n    $productContainer.find('.availability-msg');\n\n    if ($productContainer.find('.js-stressmarketing') && $productContainer.find('.js-stressmarketing').length > 0) {\n        $productContainer.find('.js-stressmarketing').closest('li').remove();\n    }\n    \n    if (response.product && response.product.stressMarketingMessage && response.product.stressMarketingMessage != \"\") {\n        $productContainer.find('.availability-msg').prepend('<li><div class=\"js-stressmarketing\">'+ response.product.stressMarketingMessage +'</div></li>');\n    }\n}\n\n/**\n * Generates html for promotions section\n *\n * @param {array} promotions - list of promotions\n * @return {string} - Compiled HTML\n */\nfunction getPromotionsHtml(promotions) {\n    if (!promotions) {\n        return '';\n    }\n\n    var html = '';\n\n    promotions.forEach(function (promotion) {\n        if (promotion.displayCalloutMessagePDP) {\n            html += '<div class=\"callout\" title=\"' + promotion.details + '\">' + promotion.calloutMsg +\n                '</div>';\n        }\n    });\n\n    return html;\n}\n\n/* Product Waro traceability update */\nfunction updateWaroData(product) {\n    if(product.agec == true){\n        if (document.querySelector('.waro-widget') !== null) {\n            const waroButton = document.querySelector('.waro-widget');\n            const waroButtonAttr = 'data-prop-sku';\n            const allLinkAgec = document.querySelectorAll('.link_agec');\n            product !== undefined ? waroButton.setAttribute(waroButtonAttr, product.variationGroupID ? product.variationGroupID : product.id) : false;\n            allLinkAgec.forEach(function(item) {\n                item.classList.contains('waro') ? (item.classList.add('d-block'), item.classList.remove('d-none')) : (item.classList.remove('d-block'), item.classList.add('d-none'));\n            })\n        }\n    }\n}\n\n/* Product Chrystalchain and Winddle traceability update */\nfunction updateChrystalChainWinddle(product) { \n    var traceability = null;\n    if(product.agec == true){\n            if(product.agecType == \"CrystalChain\"){\n                traceability = \"chrystalchain\";\n            }else if(product.agecType == \"Winddle\" && product.agecUUID !== undefined && product.agecUUID !== null && product.agecUUID !== \"\" && product.agecUUID !== \"null\"){\n                traceability = \"winddle\";\n            }\n    }\n\n    if(traceability){\n        const allLinkAgec = document.querySelectorAll('.link_agec');
15\n        allLinkAgec.forEach(function(item) {\n            item.classList.contains(traceability) ? (item.classList.add('d-block'), item.classList.remove('d-none')) : (item.classList.remove('d-block'), item.classList.add('d-none'));\n        })\n    }\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n    if (!attributes) {\n        return '';\n    }\n\n    var html = '';\n\n    attributes.forEach(function (attributeGroup) {\n        if (attributeGroup.ID === 'mainAttributes') {\n            attributeGroup.attributes.forEach(function (attribute) {\n                html += '<div class=\"attribute-values\">' + attribute.label + ': ' +\n                    attribute.value + '</div>';\n            });\n        }\n    });\n\n    return html;\n}\n\n/**\n * @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} options - Ajax response options from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(options, $productContainer) {\n    options.forEach(function (option) {\n        var $optionEl = $productContainer.find('.product-option[data-option-id*=\"' + option.id +\n            '\"]');\n        option.values.forEach(function (value) {\n            var valueEl = $optionEl.find('option[data-value-id*=\"' + value.id + '\"]');\n            valueEl.val(value.url);\n        });\n    });\n}\n\nfunction updateSoclozButton(product) {\n    if (document.querySelector('button.socloz') !== null) {\n        const soclozButton = document.querySelector('button.socloz');\n        const soclozColorAttr = 'data-socloz-product-attributes-color';\n        const soclozSizeAttr = 'data-socloz-product-attributes-clothes_size';\n        product.colorDisplayValue !== undefined ? soclozButton.setAttribute(soclozColorAttr, product.colorDisplayValue) : false;\n        product.sizeDisplayValue !== undefined ? soclozButton.setAttribute(soclozSizeAttr, product.sizeDisplayValue) : false;\n        product.onStore !== undefined && product.onStore == true ? soclozButton.style.display = \"flex\" : soclozButton.style.display = \"none\";\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 createCarouselQuickview(imgs, secondaryImageUrls, $productContainer, flagsPromo) {\n    var carousel = $productContainer.find('.carousel');\n    var carouselId = $(carousel).attr('id');\n    var carouselSmallImages = $('.carousel-outer', $productContainer).empty();\n    for (var i = 0; i < secondaryImageUrls.length; i++) {\n        if (i == 0) {\n            carouselSmallImages.append('<a class=\"image-indicator active\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + i + '\">' + '<img src=\"' + secondaryImageUrls[i].url + '\" class=\"d-block img-fluid\" alt=\"' + secondaryImageUrls[i].alt + '\" itemprop=\"image\" />' + '</a>');\n        } else {\n            carouselSmallImages.append('<a class=\"image-indicator\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + i + '\">' + '<img src=\"' + secondaryImageUrls[i].url + '\" class=\"d-block img-fluid\" alt=\"' + secondaryImageUrls[i].alt + '\" itemprop=\"image\" />' + '</a>');\n        }\n    }\n\n    var flagNew = flagsPromo.flagNew ? '<div class=\"newcollection\"><img src=\"' + flagsPromo.flagNew + '\" alt=\"\"/></div>' : '';\n    var flagProduct = ''\n\n    if (flagsPromo && flagsPromo.tabOfFlags && flagsPromo.tabOfFlags.length > 0) {\n        for (var i = 0; i < flagsPromo.tabOfFlags.length;
15 i++) {\n            flagProduct = flagProduct + '<div class=\"product\"><img src=\"' + flagsPromo.tabOfFlags[i].flagProduct + '\" alt=\"\"/></div>'\n        }\n    }\n    $(carousel).carousel('dispose');\n    $(carousel).empty().append('<ol class=\"carousel-indicators\"></ol><div class=\"carousel-inner\" data-toggle=\"modal\" data-bs-target=\"#myModal\" role=\"listbox\"><div class=\"flags\">' + flagNew + flagProduct + '</div></div><button class=\"carousel-control-prev ocs-button overflow-inverse has-icon medium\" aria-disabled=\"false\"><a role=\"button\" href=\"#' + carouselId + '\" data-bs-slide=\"prev\"><i class=\"ocs-icon arrow-left-large medium\" aria-hidden=\"true\"></i></a><span class=\"sr-only\">' + $(carousel).data('prev') + '</span></button><button class=\"carousel-control-next ocs-button overflow-inverse has-icon medium\" aria-disabled=\"false\"><a role=\"button\" href=\"#' + carouselId + '\" data-bs-slide=\"next\"><i class=\"ocs-icon arrow-right-large medium\" aria-hidden=\"true\"></i></a><span class=\"sr-only\">' + $(carousel).data('next') + '</span></button>');\n    \n\n    for (var i = 0; i < imgs.length; i++) {\n        $('<div class=\"carousel-item\"><img src=\"' + imgs[i].url + '\" class=\"d-block img-fluid\" alt=\"' + imgs[i].alt + '\" title=\"' + imgs[i].title + '\" itemprop=\"image\" /></div>').appendTo($(carousel).find('.carousel-inner'));\n        $('<li data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + i + '\" class=\"\"></li>').appendTo($(carousel).find('.carousel-indicators'));\n    }\n\n    $($(carousel).find('.carousel-item')).first().addClass('active');\n    $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\n\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 * 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, secondaryImageUrls, $productContainer, flagsPromo, brightcoveVideo,pdpCarouselPortraitImageUrls) {\n    var $carousel = $productContainer.find('.carousel');\n    var carouselId = $carousel.attr('id');\n    var carouselSmallImages = $('.carousel-outer', $productContainer);\n    var carouselDisImg;\n    var adProduct = $productContainer.hasClass('container-adproduct') ? true : false;\n    var carWithVideo = !adProduct;\n\n    var desktopBurstMobileCurrent = $productContainer[0].classList.contains('desktopBurstMobileCurrent');\n    var desktopDevice = window.outerWidth > 768 ? true : false;\n\n    if($carousel[0] != null){\n        carouselDisImg = $carousel[0].closest('.product-detail');\n        $carousel[0].id && $carousel[0].id.indexOf('adsProductCarousel') !== -1 ? false : true;\n    }\n\n    if (carouselSmallImages.hasClass('slick-initialized')) {\n        carouselSmallImages.slick('destroy');\n    }\n\n    carouselSmallImages.empty();\n    var html = '';\n    var imgUrl = '';\n    var imgAdUrl = '';\n\n    var globalIndex = 0;\n    var nbOfVideosPositioned = 0;\n    for (var i = 0; i < secondaryImageUrls.length; i++) {\n\n        if (carouselDisImg) {\n            if (carouselDisImg.dataset.disimages && carouselDisImg.dataset.disimages == 'false' ) {\n                imgUrl = secondaryImageUrls[i].staticURL\n            } else {\n                imgUrl = secondaryImageUrls[i].url\n            }\n        } else {\n            imgUrl = secondaryImageUrls[i].url\n        }\n\n        if (carWithVideo && brightcoveVideo && brightcoveVideo.position == (globalIndex + 1)) {\n\n            if (globalIndex == 0) {\n                html += '<a class=\"image-indicator active is-video-poster\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + brightcoveVideo.poster + '\" class=\"d-block img-fluid\" alt=\"' + brightcoveVideo.alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1;\" />' + '</a>';\n            } else {\n                html += '<a class=\"image-indicator is-video-poster\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + brightcoveVideo.poster + '\" class=\"d-block img-fluid\" alt=\"' + brightcoveVideo.alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1;\" />' + '</a>';\n            }\n            nbOfVideosPositioned = nbOfVideosPositioned + 1;\n            globalIndex = globalIndex + 1;\n        }\n\n        if (globalIndex == 0) {\n            html += '<a class=\"image-indicator active\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + imgUrl + '\" class=\"d-block img-fluid\" alt=\"' + secondaryImageUrls[i].alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1.5\" />' + '</a>';\n        } else {\n            html += '<a class=\"image-indicator\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + imgUrl + '\" class=\"d-block img-fluid\" alt=\"' + secondaryImageUrls[i].alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1.5\" />' + '</a>';\n        }\n\n        globalIndex = globalIndex + 1;\n    }\n\n    if (carWithVideo && brightcoveVideo && nbOfVideosPositioned == 0) {\n        if (globalIndex == 0) {\n            html += '<a class=\"image-indicator active is-video-poster\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + brightcoveVideo.poster + '\" class=\"d-block img-fluid\" alt=\"' + brightcoveVideo.alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1;\" />' + '</a>';\n        } else {\n            html += '<a class=\"image-indicator is-video-poster\" data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\">' + '<img src=\"' + brightcoveVideo.poster + '\" class=\"d-block img-fluid\" alt=\"' + brightcoveVideo.alt + '\" itemprop=\"image\" width=\"95\" height=\"140\" style=\"object-fit: cover; aspect-ratio: 1/1;\" />' + '</a>';\n        }\n    }\n    carouselSmallImages.append(html);\n    \n    carouselSmallImages.slick({\n        vertical: true,\n        slidesToShow: 5,\n        slidesToScroll: 1,\n        verticalSwiping: true,\n        prevArrow: '<button class=\"ocs-button overflow-inverse has-icon medium prev\"><i class=\"ocs-icon arrow-up-large medium\" aria-hidden=\"true\"></i></button>',\n        nextArrow: '<button class=\"ocs-button overflow-inverse has-icon medium next\"><i class=\"ocs-icon arrow-down-large medium\" aria-hidden=\"true\"></i></button>',\n        infinite: false\n    });\n    if ($('.image-indicator').length >= 6) {\n        $('.product-detail-container .carousel-outer')[0].insertAdjacentHTML(\"beforeend\", '<div class=\"nav-button\"><div class=\"nav-button-container\"></div></div>');\n        $('.nav-button-container')[0].insertAdjacentElement(\"afterbegin\", $('.product-detail-container .carousel-outer .ocs-button.next')[0]);\n        $('.nav-button-container')[0].insertAdjacentElement(\"afterbegin\", $('.product-detail-container .carousel-outer .ocs-button.prev')[0]);\n    }\n\n    var flagNew = flagsPromo.flagNew ? '<div class=\"newcollection\"><img src=\"' + flagsPromo.flagNew + '\" alt=\"\"/></div>' : '';\n    var flagProduct = '';\n    if (flagsPromo && flagsPromo.tabOfFlags && flagsPromo.tabOfFlags.length > 0) {\n        for (var i = 0; i < flagsPromo.tabOfFlags.length;
15 i++) {\n            flagProduct = flagProduct + '<div class=\"product\"><img src=\"' + flagsPromo.tabOfFlags[i].flagProduct + '\" alt=\"\"/></div>'\n        }\n    }\n                \n                \n    var controls = $carousel.data('controls') ? '<button class=\"carousel-control-prev ocs-button secondary has-icon medium\" aria-disabled=\"false\"><a role=\"button\" href=\"#' + carouselId + '\" data-bs-slide=\"prev\"><i class=\"ocs-icon arrow-left-large medium\" aria-hidden=\"true\"></i></a><span class=\"sr-only\">' + $carousel.data('prev') + '</span></button><button class=\"carousel-control-next ocs-button secondary has-icon medium\" aria-disabled=\"false\"><a role=\"button\" href=\"#' + carouselId + '\" data-bs-slide=\"next\"><i class=\"ocs-icon arrow-right-large medium\" aria-hidden=\"true\"></i></a><span class=\"sr-only\">' + $carousel.data('next') + '</span></button>' : '';\n  \n    if (desktopBurstMobileCurrent== true && desktopDevice == true) { /* MIN HEIGHT FOR CLS */\n        $('.product-detail .product-detail-container').css(\"min-height\", $('.product-detail-container').height()+\"px\")\n    }\n    $carousel.carousel('dispose');\n    $carousel.empty().append('<ol class=\"carousel-indicators\"></ol><div class=\"carousel-inner\" role=\"listbox\" data-toggle=\"modal\" data-bs-target=\"#fullWidthModal\"><div class=\"flags\">' + flagNew + flagProduct + '</div></div>' + controls);\n  \n    var $carouselIndicators = $carousel.find('.carousel-indicators');\n\n    globalIndex = 0;\n    nbOfVideosPositioned = 0;\n\n    for (var i = 0; i < imgs.length; i++) {\n        if (carWithVideo && brightcoveVideo && brightcoveVideo.position == (globalIndex + 1)) {\n            $('<div class=\"carousel-item js-isvideo\"><video-js id=\"brightcoveplayer\" data-account=\"'+ brightcoveVideo.accountId +'\" data-player=\"'+ brightcoveVideo.playerId +'\" data-embed=\"default\" controls=\"\" data-video-id=\"'+ brightcoveVideo.videoId +'\" data-playlist-id=\"\" data-application-id=\"\" class=\"vjs-fluid\" playinline ></video-js></div>').appendTo($carousel.find('.carousel-inner'));\n            $('<li data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\" class=\"video-indicator\"></li>').appendTo($carouselIndicators);\n            globalIndex = globalIndex + 1;\n            nbOfVideosPositioned = nbOfVideosPositioned + 1;\n        }\n\n        // provoque bug OCS-563\n        //carouselDisImg ? carouselDisImg.dataset.disimages ? carouselDisImg.dataset.disimages == 'false' ? imgUrl = imgs[i].staticURL : imgUrl = imgs[i].url : false : false;\n        imgUrl = imgs[i].url;\n\n        if(adProduct){\n            imgAdUrl = pdpCarouselPortraitImageUrls[i].url;\n            $('<div data-image-large=\"'+ imgUrl +'\" class=\"carousel-item\"><picture><source srcset=\"'+ imgUrl +'\" media=\"(min-width: 959px)\" width=\"1300\" height=\"1300\" /><source srcset=\"'+ imgAdUrl +'\" media=\"(max-width: 959px)\" width=\"400\" height=\"600\"/><img alt=\"' + imgs[i].alt + '\" src=\"'+ imgAdUrl +'\" width=\"400\" height=\"600\"/></picture></div>').appendTo($carousel.find('.carousel-inner'));\n        }
15else{\n            $('<div data-image-large=\"'+ imgUrl +'\" class=\"carousel-item\"><img src=\"' + imgUrl + '\" class=\"d-block img-fluid\" alt=\"' + imgs[i].alt + '\" title=\"' + imgs[i].title + '\" itemprop=\"image\" /></div>').appendTo($carousel.find('.carousel-inner'));\n        }\n        \n        $('<li data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\" class=\"\"></li>').appendTo($carouselIndicators);\n\n        globalIndex = globalIndex + 1;\n    }\n    \n    if (carWithVideo && brightcoveVideo && nbOfVideosPositioned == 0) {\n        $('<div class=\"carousel-item js-isvideo\"><video-js id=\"brightcoveplayer\" data-account=\"'+ brightcoveVideo.accountId +'\" data-player=\"'+ brightcoveVideo.playerId +'\" data-embed=\"default\" controls=\"\" data-video-id=\"'+ brightcoveVideo.videoId +'\" data-playlist-id=\"\" data-application-id=\"\" class=\"vjs-fluid\" playinline ></video-js></div>').appendTo($carousel.find('.carousel-inner'));\n        $('<li data-bs-target=\"#' + carouselId + '\" data-bs-slide-to=\"' + globalIndex + '\" class=\"video-indicator\"></li>').appendTo($carouselIndicators);\n    }\n\n    $carousel.find('.carousel-item').first().addClass('active');\n    $carouselIndicators.find('li').first().addClass('active');\n    $('<div class=\"overView\"><button class=\"ocs-button has-icon medium overflow-inverse\" data-bs-dismiss=\"modal\" aria-label=\"overView\" aria-disabled=\"false\"><i role=\"button\" class=\"ocs-icon full-screen-on medium\" aria-hidden=\"true\"></i></button></div>').appendTo($carousel.find('.carousel-inner'));\n    if (imgs.length === 1) {\n        $carouselIndicators.detach();\n        $carousel.find('a[class^=\"carousel-control-\"]').detach();\n    }\n\n    $carousel.carousel();\n    $carouselIndicators.attr('aria-hidden', true);\n    $carousel.append('<div class=\"modal fade\" id=\"fullWidthModal\"><div class=\"modal-header\"><button type=\"button\" class=\"btn-close close\" data-dismiss=\"modal\"></button></div><div class=\"modal-dialog modal-dialog-centered\"><div class=\"modal-content\"><div class=\"modal-body\"><img src=\"\" class=\"img-fluid\"></div></div></div><div class=\"fullwidth-control fullwidth-prev\" role=\"button\" data-bs-slide=\"prev\"><span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span><span class=\"sr-only\">Previous</span></div><div class=\"fullwidth-control fullwidth-next\" role=\"button\" data-bs-slide=\"next\"><span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span><span class=\"sr-only\">Next</span></div></div>');\n    \n    if (carWithVideo && brightcoveVideo) {\n        $carousel.append('<script src=\"'+ brightcoveVideo.scriptUrl +'\"><\/script>');\n    }\n    \n    $(\".carousel-inner\").swipe({\n        swipeLeft: function (event, direction, distance, duration, fingerCount, fingerData) {\n            this.closest('.carousel').carousel('next');\n        },\n        swipeRight: function (event, direction, distance, duration, fingerCount, fingerData) {\n            this.closest('.carousel').carousel('prev');\n        },\n        //Default is 75px, set to 0 for demo so any distance triggers swipe\n        threshold: 50\n    });\n\n    //Add a mutationObserver to observe if element js-isvideo loose class active\n    if (carWithVideo && brightcoveVideo && window.videojs != undefined && $('#brightcoveplayer') && $('#brightcoveplayer').length > 0) {\n        var mut = new MutationObserver(function(mutations, mut){\n\n        mutations.forEach(function(mutation) {\n            if(mutation.attributeName == \"class\" && !mutation.target.classList.contains('active')){\n                videojs.getPlayer('brightcoveplayer').pause();\n            }\n            });\n        });\n        \n        mut.observe(document.querySelector(\".js-isvideo\"),{\n        'attributes': true\n        });\n    }\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}
15 $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    var secondaryImageUrls = response.product.images.small;\n    var pdpCarouselPortraitImageUrls = response.product.images.pdpCarouselPortrait;\n    $productContainer.parent('.product-quickview')\n    let isQuickview =\n        $productContainer.hasClass('product-quickview');\n\n    if (isQuickview) {\n        createCarouselQuickview(primaryImageUrls, secondaryImageUrls, $productContainer, response.product.flagsPromo);\n    } else {\n        createCarousel(primaryImageUrls, secondaryImageUrls, $productContainer, response.product.flagsPromo, response.product.brightcoveVideos,pdpCarouselPortraitImageUrls);\n\n    }\n\n    // update bestshippingMethodName\n    if (response && response.bestShippingMethodName) {\n        if ($('.js-best-shipping-name').length > 0) {\n            $('.js-best-shipping-name').empty().html(response.bestShippingMethodName);\n        }\n    }\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    $('.promotions').empty().html(getPromotionsHtml(response.product.promotions));\n\n    updateAvailability(response, $productContainer);\n\n    updateStressMarketing(response, $productContainer);\n\n    if (isChoiceOfBonusProducts) {\n        var $selectButton = $productContainer.find('.select-bonus-product');\n        $selectButton.trigger('bonusproduct:updateSelectButton', {\n            product: response.product,\n            $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,\n            $productContainer: $productContainer\n        }).trigger('product:statusUpdate', response.product);\n    }\n\n\n    // Update attributes\n    $productContainer.find('.main-attributes').empty()\n        .html(getAttributesHtml(response.product.attributes));\n}\nfunction adHandleVariantResponse(response, $productContainer) {\n    \n    var isVaraint;\n    if (response.product.variationAttributes) {\n        updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n        isVaraint = response.product.productType === 'variant';\n        if (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    var secondaryImageUrls = response.product.images.small;\n    var pdpCarouselPortraitImageUrls = response.product.images.pdpCarouselPortrait;\n\n    $productContainer.parent('.product-quickview')\n    let isQuickview =\n        $productContainer.hasClass('product-quickview');\n    if (isQuickview) {\n        createCarouselQuickview(primaryImageUrls, secondaryImageUrls, $productC
15ontainer, response.product.flagsPromo);\n    } else {\n        createCarousel(primaryImageUrls, secondaryImageUrls, $productContainer, response.product.flagsPromo, response.product.brightcoveVideos,pdpCarouselPortraitImageUrls);\n    }\n\n    // Update pricing\n    var $priceSelector = $('.prices .price', $productContainer).length ?\n        $('.prices .price', $productContainer) :\n        $('.prices .price');\n    $priceSelector.replaceWith(response.product.price.html);\n    \n    // Update promotions\n    $('.promotions').empty().html(getPromotionsHtml(response.product.promotions));\n\n    updateAvailability(response, $productContainer);\n\n    updateStressMarketing(response, $productContainer);\n\n    $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n        product: response.product,\n        $productContainer: $productContainer\n    }).trigger('product:statusUpdate', response.product);\n\n}\n\n/**\n * @param {*} htmlPromo - html representant les promos\n */\nfunction updatePromo(htmlPromo) {\n    if ($('.op-commercial') && !$('.op-commercial').find(\".soldes\").hasClass('product-set')) {\n        $('.op-commercial').empty().html(htmlPromo);\n    }\n}\n\n/**\n * @param {*} htmlPromo - html representant le bouton de reservation en boutique\n */\nfunction updateOnStoreStatus(htmlSocloz) {\n    if ($('.js-eresa')) {\
15n        $('.js-eresa').empty().html(htmlSocloz);\n    }\n}\n\nfunction callAPIOneStock(url,product) {\n    $.ajax({\n        url: url + \"&rct=\" + product.id,\n        method: 'get',\n        success: function (data) {\n            if ($('.js-eresa')) {\n                $('.js-eresa').empty().html(data);\n            }\n            var selectedSizeBtn = $(\"[data-attr=size] .size-attribute .selectable.select\");\n            var selectedSizeDropdown = $('.js-select-adproduct-size').val();\n            var isOutOfStock = $('.js-eresa .eresa').hasClass('false');\n\n            if ((selectedSizeBtn.length || selectedSizeDropdown) && isOutOfStock) {\n                $('.js-eresa .eresa').addClass('not-instock');\n            }\n\n        }\n    });\n}\n\nfunction updateStockMag(stockMagPdp){\n    $('.ocs-content-layer #woosmapstore').value = \"\";\n    if($('.size-attribute.selectable').hasClass('selected')){\n        $(\".displayIf-isSizeSelected-false\").addClass('d-none');\n        $(\".displayIf-isSizeSelected-true\").removeClass('d-none');\n    }\n    if(stockMagPdp){\n        $('.displayIf-selectedStoreAvailable-true').removeClass('d-none');\n        $('.displayIf-selectedStoreAvailable-false').addClass('d-none');\n    }else{\n        $('.displayIf-selectedStoreAvailable-false').removeClass('d-none');\n        $('.displayIf-selectedStoreAvailable-true').addClass('d-none');\n    }\n}\n\n/**\n * @param {*} htmlPromo - html representant le bouton de reservation en boutique\n */\nfunction updateProductSet(productID) {\n    if ($('.js-pushSet').length > 0) {\n        if (productID != null) {\n            var urlParams = {\n                productID: productID\n            };\n            var url = appendToUrl($('.js-pushSet').data('url'), urlParams);\n            $.ajax({\n                url: url,\n                method: 'get',\n                success: function (htmlProductSet) {\n                    if ($('.js-pushSet')) {\n                        $('.js-pushSet').empty().html(htmlProductSet);\n                    }\n                }\n            });\n        } else {\n            $('.js-pushSet').empty();\n        }\n    }\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    var quantitySelected = false;\n    if (!($productContainer.parent('.bonus-product-item').length > 0)) {\n        var optionsHtml = quantities.map(function (quantity) {\n            var selected = '';\n            if(quantity.selected){\n                selected =' selected ';\n                quantitySelected = quantity.value;\n            }\n            return '<option value=\"' + quantity.value + '\"  data-url=\"' + quantity.url + '\"' +\n                selected + '>' + quantity.value + '</option>';\n        }).join('');\n        var quantitySelector = getQuantitySelector($productContainer);\n        quantitySelector.empty().html(optionsHtml);\n        if(!quantitySelected){\n            quantitySelector.closest('.ocs-select').find('input[type=\"text\"]').val(\"1\");\n        }
15else{\n            quantitySelector.closest('.ocs-select').find('input[type=\"text\"]').val(quantitySelected);\n        }\n    }\n}\n\n\n/**\n * updates the recommendations CArousel\n * @param {object} data - product requested\n */\nfunction updateRecommendations(data) {\n\n    $('.push-product-reco').empty();\n    if (!data.recommendations || data.recommendations.length === 0) {\n        return;\n    }\n\n    $('.push-product-reco .ocs-swiper-recommendation').remove();\n    var pids = data.recommendations;\n    \n    $.ajax({\n        url: $('.product-detail').data('update-recommendations-url') + \"?pids=\" + pids,\n        type: 'get',\n        success: function (data) {\n            if ($('.push-product-reco .ocs-swiper-recommendation').length == 0) {\n                $('.push-product-reco').append(data);\n                var swiper = new Swiper('.swiper', {\n                    observer: true,\n                    observeParents: true,\n                    slidesPerView: 2.3,\n                    spaceBetween: 8,\n                    breakpoints: {\n                        769: {\n                            slidesPerView: 3.3,\n                            spaceBetween: 16\n                        },\n                        1320: {\n                            slidesPerView: 4.3,\n                        }\n                    },\n                    loop: false,\n                    navigation: {\n                        nextEl: '.swiper-button-next',\n                        prevEl: '.swiper-button-prev',\n                    },\n                    /*\n                    a11y : {\n                        nextSlideMessage: $('.swiper-button-next')[0].getAttribute('aria-label'),\n                        prevSlideMessage: $('.swiper-button-prev')[0].getAttribute('aria-label'), \n                    },\n                    scrollbar: {\n                        el: '.swiper-scrollbar',\n                    },*/\n                    on: {\n                        init: function () {\n                            $(this.el).find('.swiper-wrapper .swiper-slide').css('opacity', '1');\n                            $(this.el).find('.before-loading').removeClass('before-loading');\n                        },\n                    },\n                });\n            }\n        },\n        error: function (error) {\n        }\n    });\n}\n\nfunction gtmRatingProduct(selectedValueUrl) {\n    if (selectedValueUrl) {\n        $.ajax({\n            url: selectedValueUrl,\n            method: 'GET',\n            success: function (data) {\
15n                let GTMratingProduct = __webpack_require__(/*! ../gtm/util/actions/ratingProduct */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/ratingProduct.js\");\n                GTMratingProduct.getDataLayerForAction({product: data.product});\n            },\n            error: function () {}\n        });\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 * @param {Boolean} canChangeUrl - specify if the script can change page url\n */\nfunction attributeSelect(selectedValueUrl, $productContainer, canChangeUrl) {\n    if (selectedValueUrl) {\n        $productContainer.spinner().start();\n        $.ajax({\n            url: selectedValueUrl,\n            method: 'GET',\n            success: function (data) {\n                const productType = data.product.productType;\n                productType === \"variationGroup\" ? $productContainer.data('idvariationgroup', data.product.id) : false;\n\n                //Only on product Page\n                if (canChangeUrl && $('.Product-Show').length > 0 && data.variationGroupUrl) {\n                    history.replaceState(null, null, data.variationGroupUrl);\n                }\n\n                $productContainer.data('name', data.product.productName);\n\n                if ($('#js-isproductpage-productquantity').length > 0) {\n                    $('#js-isproductpage-productquantity').val(data.product.selectedQuantity);\n                }\n                if ($('#js-isproductpage-productid').length > 0) {\n                    $('#js-isproductpage-productid').val(data.product.id);\n                }\n\n                handleVariantResponse(data, $productContainer);\n                updateOptions(data.product.options, $productContainer);\n                updateQuantities(data.product.quantities, $productContainer);\n                updatePromo(data.product.price.htmlOp);\n                data.product.enableWaro == true ? updateWaroData(data.product) : updateChrystalChainWinddle(data.product); /* Product traceability update */\n                if(data.product.htmlSocloz) {\n                    updateOnStoreStatus(data.product.htmlSocloz);\n                }else if(data.product.isOneStock) {\n                    callAPIOneStock(selectedValueUrl.replace('Product','OneStock').replace('Variation','CheckOneStock'), data.product);\n                }\n\n                if ($productContainer.closest('#quickViewModal').length == 0) { /* No update reco when quickview click comes from reco */\n                    updateRecommendations(data);\n                }\n                updateSoclozButton(data.product);\n                updateStockMag(data.selectedStoreAvailable);\n                // comment the updateProductSet because we don't need to get productSet for variants \n                // updateProductSet(data.product.id);\n                $('body').trigger('product:afterAttributeSelect', {\n                    data: data,\n                    container: $productContainer\n                });\n\n                if ($productContainer.prevObject[0] && $productContainer.prevObject[0].classList.contains('color-attribute') && ($('[data-attr=\"color\"] a:not(.more-colors):not(.color-attribute-mobile)').length > 1 || $('[data-attr=\"color\"] select option').length > 1)) { \n                    let GTMColorChanged = __webpack_require__(/*! ../gtm/util/actions/colorChanged */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/colorChanged.js\");\n                    let valueSizeColorChanged;\n                    const defaultValueSize = function addDefaultValueSize() {\n                        let defaultValueSize = '';\n                        data.product.variationAttributes.forEach( item => {\n                            if (item.attributeId == 'size') {\n                                item.values.forEac
15h( value => {\n                                    defaultValueSize == '' && value.selectable ? defaultValueSize = value.url  : false;\n                                })\n                            } else if (item.attributeId == 'length') {\n                                item.values.forEach( value => {\n                                    value.selectable ? defaultValueSize += \"&dwvar_\"+data.product.id+\"_length=\"+value.id+\"\"  : false;\n                                })\n                            } else {\n                                false\n                            }\n                        })\n                        $.ajax({\n                            url: defaultValueSize,\n                            success: function(data) {\n                                GTMColorChanged.getDataLayerForAction({\n                                    idProductRC: data.product.variationGroupID ? data.product.variationGroupID : data.product.id,\n                                    idProductRCT: data.product.id,\n                                    label: data.product.colorDisplayValue\n                                });\n                            }\n                        })\n                    }\n                    data.product.sizeDisplayValue !== \"\" ? valueSizeColorChanged = data.product.id : valueSizeColorChanged = (defaultValueSize(), defaultValueSize);\n                    if (typeof(valueSizeColorChanged) !== 'function') {\n                        GTMColorChanged.getDataLayerForAction({\n                            idProductRC: data.product.variationGroupID ? data.product.variationGroupID : data.product.id,\n                            idProductRCT: valueSizeColorChanged,\n                            label: data.product.colorDisplayValue\n                        });\n                    }\n                }\n                \n                if ($productContainer.prevObject[0] && ($productContainer.prevObject[0].classList.contains('size-choose') || $productContainer.prevObject[0].classList.contains('length-choose')) && $('button.size-attribute').length > 1) {                \n                    let colorProductLabel = data.product.sizeDisplayValue;\n                    if ($('.length-choose').length !== 0 && productType !== \"variationGroup\") {\n                        colorProductLabel = data.product.sizeDisplayValue + \" \" + $('.select.length-choose')[0].innerText;\n                    }\n                    \n                    if (productType !== \"variationGroup\") { // release the event only when all sizes are chosen, ex. with width and height for jeans\n                        let GTMSizeChanged = __webpack_require__(/*! ../gtm/util/actions/sizeChanged */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/sizeChanged.js\");\n                        GTMSizeChanged.getDataLayerForAction({\n                            idProductRC: data.product.variationGroupID ? data.product.variationGroupID : data.product.id,\n                            idProductRCT: data.product.id,\n                            label: colorProductLabel\n                        });\n                    }\n                }\n                \n                $.spinner().stop();\n            },\n            error: function () {\n                $.spinner().stop();\n            }\n        });\n    }\n}\n\nfunction adAttributeSelect(selectedValueUrl, $productContainer, canChangeUrl) {\n    if (selectedValueUrl) {\n        $productContainer.spinner().start();\n        $.ajax({\n            url: selectedValueUrl,\n            method: 'GET',\n            success: function (data) {\
15n                data.product.productType === \"variationGroup\" ? $productContainer.data('idvariationgroup', data.product.id) : false;\n\n                $productContainer.data('name', data.product.productName);\n\n                adHandleVariantResponse(data, $productContainer);\n                updateOptions(data.product.options, $productContainer);\n                updatePromo(data.product.price.htmlOp);\n                if (data.product.htmlSocloz) {\n                    updateOnStoreStatus(data.product.htmlSocloz);\n                }\n                updateSoclozButton(data.product);\n                // comment the updateProductSet because we don't need to get productSet for variants \n                //updateProductSet(data.product.id);\n                $('body').trigger('product:afterAttributeSelect', {\n                    data: data,\n                    container: $productContainer\n                });\n                \n                $.spinner().stop();\n            },\n            error: function () {\n                $.spinner().stop();\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 = $('<div>').append($.parseHTML(html));\n\n    var body = $html.find('.choice-of-bonus-product');\n    var footer = $html.find('.modal-footer').children();\n\n    return {\n        body: body,\n        footer: footer\n    };\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 = '\x3c!-- Modal --\x3e' +\n        '<div class=\"modal fade\" id=\"chooseBonusProductModal\" role=\"dialog\">' +\n        '<div class=\"modal-dialog choose-bonus-product-dialog\" ' +\n        'data-total-qty=\"' + data.maxBonusItems + '\"' +\n        'data-UUID=\"' + data.uuid + '\"' +\n        'data-pliUUID=\"' + data.pliUUID + '\"' +\n        'data-addToCartUrl=\"' + data.addToCartUrl + '\"' +\n        'data-pageStart=\"0\"' +\n        'data-pageSize=\"' + data.pageSize + '\"' +\n        'data-moreURL=\"' + data.showProductsUrlRuleBased + '\"' +\n        'data-bonusChoiceRuleBased=\"' + data.bonusChoiceRuleBased + '\">' +\n        '\x3c!-- Modal content--\x3e' +\n        '<div class=\"modal-content\">
15' +\n        '<div class=\"modal-header\">' +\n        '    <span class=\"\">' + data.labels.selectprods + '</span>' +\n        '    <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">&times;</button>' +\n        '</div>' +\n        '<div class=\"modal-body\"></div>' +\n        '<div class=\"modal-footer\"></div>' +\n        '</div>' +\n        '</div>' +\n        '</div>';\n    $('body').append(htmlString);\n    $('.modal-body').spinner().start();\n\n    $.ajax({\n        url: bonusUrl,\n        method: 'GET',\n        dataType: 'html',\n        success: function (html) {\n            var parsedHtml = parseHtml(html);\n            $('#chooseBonusProductModal .modal-body').empty();\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\nfunction appendToUrl(url, params) {\n    var newUrl = url;\n    newUrl += (newUrl.indexOf('?') !== -1 ? '&' : '?') + Object.keys(params).map(function (key) {\n        return key + '=' + encodeURIComponent(params[key]);\n    }).join('&');\n\n    return newUrl;\n}\n\nfunction changeReco(contentJsonReco,url,divreco){\n    \n    var contentJsonRecoNew = contentJsonReco.toString();\n    contentJsonRecoNew = contentJsonRecoNew.replace(/\\\\n/g, \"\\\\n\")  \n               .replace(/\\\\'/g, \"\\\\'\")\n               .replace(/\\\\\"/g, '\\\\\"')\n               .replace(/\\\\&/g, \"\\\\&\")\n               .replace(/\\\\r/g, \"\\\\r\")\n               .replace(/\\\\t/g, \"\\\\t\")\n               .replace(/\\\\b/g, \"\\\\b\")\n               .replace(/\\\\f/g, \"\\\\f\")\n               .replace(\"/\",\"\");\n    // remove non-printable and other non-valid JSON chars\n    contentJsonRecoNew = contentJsonRecoNew.replace(/[\\u0000-\\u0019]+/g,\"\"); \n    var contentReco = JSON.stringify(contentJsonRecoNew);\n\n    var urlParams = {\n        contentReco: contentReco,\n        divreco: divreco,\n        template: 'layer'\n    };\n\n    var urlChangeReco = appendToUrl(url, urlParams);\n\n    $.ajax({\n        url: urlChangeReco,\n        method: 'GET',\n        dataType: 'html',\n        success: function (html) {\n            var $recoDiv = $('#'+divreco);\n            $recoDiv.html(html);\n        },\n        error: function (err) {\n           \n        }\n    });\n\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\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}
15\n\nfunction sizeGuideModal() {\n    $('.sizeguide-trigger').on('click', function (e) {\n        e.preventDefault();\n        var sizeChartAsset = $(this).data('sizechartasset');\n        var url = $(this).data('sizecharturl');\n\n        if (!sizeChartAlreadyLoaded) {\n            $.ajax({\n                url: url,\n                data: { sizeChartAsset: sizeChartAsset },\n                success: function (data) {\n                    if (data  && data.sizeChartAsset) {\n                        $('#sizeModal').find('.modal-body').append(data.sizeChartAsset);\n                        sizeChartAlreadyLoaded = true;\n                    }\n                }\n            });\n        }\n        $('#sizeModal').modal('show');\n    });\n}\n\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n//all of these functions are use for cart.js and addToCart function\n\n\n\n\n    /**\n * re-renders the order totals and the number of items in the cart\n * @param {Object} data - AJAX response from the server\n */\nfunction updateCartTotals(data) {\n    $('body').trigger('pwa:updateCard', data);\n\n    $('.number-of-items').empty().append(data.resources.numberOfItems);\n    $('.shipping-cost-cart').empty().append(data.totals.totalShippingCost);\n    $('.shipping-cost').empty().append(data.totals.totalShippingCost);\n    $('.tax-total').empty().append(data.totals.totalTax);\n    if ($('#checkout-main').length > 0) {\n        $('.grand-total-sum').empty().append(data.totals.grandTotal);\n    } else {\n        $('.grand-total').empty().append(data.totals.grandTotal);\n    }\n    let deliveryCost = \"\";\n    const deliveryMethod = data.shipments[0].bestShippingMethodDisplayName !== undefined ? data.shipments[0].bestShippingMethodDisplayName : data.shipments[0].selectedShippingMethodDisplayName;\n    if (data.shipments[0].bestShippingMethodTotals !== undefined && data.shipments[0].bestShippingMethodTotals.totalShippingCost !== undefined ) {\n        deliveryCost = data.shipments[0].bestShippingMethodTotals.totalShippingCost;\n    } else {\n        data.shipments[0].shippingMethods.forEach(function(deliveryMethodName) {\n            if (deliveryMethodName.displayName == deliveryMethod) {\n                if (deliveryMethodName.shippingCost == '0,00 €') {\n                    deliveryCost = $('.delivery-value').attr('data-free-delivery');\n                } else {\n                    deliveryCost = deliveryMethodName.shippingCost;\n                }\n            }\n        })\n    }\n    $('.delivery-text').empty().append(deliveryMethod);\n    $('.delivery-value').empty().append(deliveryCost);\n    $('.totalPrice').empty().append(data.totals.grandTotal);\n    $('.sub-total').empty().append(data.totals.subTotal);\n    $('.sub-total').attr('data-subtotal', data.totals.subTotalSimple);\n    $('.minicart-quantity').empty().append(data.numItems);\n    $('.minicart-layer-quantity').empty().append('(' + data.numItems + ')');\n\n    $('.bonus-product-line-item').remove();\n    if (data.hasBonusProduct) {\n        addProductlineItem(data);\n    }\n\n    if (data.totals.orderLevelDiscountTotal.value > 0) {\n        $('.order-discount').removeClass('hide-order-discount');\n        $('.order-discount-total').empty()\n            .append('- ' + data.totals.orderLevelDiscountTotal.formatted);\n    } else {\n        $('.order-discount').addClass('hide-order-discount');\n    }\n\n    if (data.totals.shippingLevelDiscountTotal.value > 0) {\n        $('.shipping-discount').removeClass('hide-shipping-discount');\n        $('.shipping-discount-total').empty().append('- ' +\n            data.totals.shippingLevelDiscountTotal.formatted);\n    } else {\n        $('.shipping-discount').addClass('hide-shipping-discount');\n    }\n\n    data.items.forEach(function (item) {\n        $('.item-' + item.UUID).empty().append(item.renderedPromotions);\n        $('.item-total-' + item.UUID).empty().append(item.priceTotal.renderedPrice);\n    });\n\n    //ABtestEconomy  segment : economyProductBasket // economyBasket\n    var $cartEconomySelector = $('.js-cart-economy');\n    if ($cartEconomySelector.length > 0) {\n        if (data.totals.cartEconomy) {\n            $cartEconomySelector.replaceWith(data.totals.cartEconomyHtml);\n        } else {\n            $cartEconomySelector.empty();\n        }\n    }\n}\n\n/**\n * Updates price of all product lines item\n * @param {Object} items - list of items from the server\n * Info : it's useful only when valopanier said to apply Pricebook when customer update quantity\n */\n function updatePrice(items) {\n    for (var i = 0; i < items.length;
15 i++) {\n        var priceSelector = '.Price-' + items[i].UUID;\n        if (document.querySelector(priceSelector+'.price')) {\n            $(priceSelector+' .price').html(items[i].price.sales.formatted);\n        }\n        else {\n            $(priceSelector).replaceWith(items[i].price.html);\n        }\n\n        //ABtestEconomy  segment : economyProductBasket\n        var economySelector = '.js-lineitem-economy-' + items[i].UUID;\n        if ($(economySelector).length > 0) {\n            if (items[i].economy) {\n                $(economySelector).replaceWith(items[i].economyHtml);\n            } else {\n                $(economySelector).empty();\n            }\n        }\n    }\n}\n\n    /**\n * Checks whether the basket is valid. if invalid displays error message and disables\n * checkout button\n * @param {Object} data - AJAX response from the server\n */\nfunction validateBasket(data) {\n    if (data.valid.error) {\n        if (data.valid.message) {\n            displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'error', data.valid.message);\n\n            if (data.valid.invalidProducts.length > 0) {\n                $('.product-cart-invalid').removeClass('d-flex').addClass('d-none');\n                data.valid.invalidProducts.forEach(function(invalidProduct) {\n                    $('.product-cart-invalid[data-pid=\"' + invalidProduct + '\"]').removeClass('d-none').addClass('d-flex');\n                });\n            }\n        } else {\n            $('.cart').empty().append('<div class=\"row\"> ' +\n                '<div class=\"col-12 text-center\"> ' +\n                '<h1>' + data.resources.emptyCartMsg + '</h1> ' +\n                '</div> ' +\n                '</div>'\n            );\n            $('.number-of-items').empty().append(data.resources.numberOfItems);\n            $('.minicart-quantity').empty().append(data.numItems);\n            $('.minicart-layer-quantity').empty().append('(' + data.numItems + ')');\n            $('.minicart .popover').empty();\n            $('.minicart .popover').removeClass('show');\n        }\n\n        $('.checkout-btn').addClass('disabled');\n    } else {\n        $('.checkout-btn').removeClass('disabled');\n        $('.product-cart-invalid').removeClass('d-flex').addClass('d-none');\n    }\n}\n\nfunction validateExclusionProducts(validExclusionProducts, basket) {\n    let productAvailable = true;\n    const jsValidExluButton = document.querySelectorAll('.js-valid-exclusion'); /* Mobile and desktop buttons */\n    if (validExclusionProducts && validExclusionProducts.valid) {\n        $(document).find('.valid-exclusion-product-error').addClass('d-none');\n    }\n    else {\n        $(document).find('.valid-exclusion-product-error').removeClass('d-none');\n    }\n\n    if (jsValidExluButton.length !== 0) {\n        basket.items.forEach(function(product) {\n            product.available !== true ? productAvailable = false : false ;\n        })\n\n        jsValidExluButton.forEach(function(button) { \n            productAvailable == true ? (button.classList.remove('disabled'), button.setAttribute('aria-disabled', 'false')) : (button.classList.add('disabled'), button.setAttribute('aria-disabled', 'true')) ;\n        })\n    }\n}\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\nfunction selectVariantIfOnlyOne () {\n    $('div').find(\"[data-attr=size]\").each(function(){\n        var $sizeAttrs = $(this).find('.size-attribute');\n        if ($sizeAttrs.length == 1 && $sizeAttrs.hasClass('selectable')){\n            if (!$sizeAttrs.find('.selectable').hasClass('select')){\n                $sizeAttrs.click();\n            }\n        }\n    });\n}\n\nfunction selectLengthIfOnlyOne () {\n    $('div').find(\"[data-attr=length]\").each(function(){\n        var $sizeAttrs = $(this).find('.size-attribute');\n        if ($sizeAttrs.length == 1 && $sizeAttrs.hasClass('selectable')){\n            if (!$sizeAttrs.find('.selectable').hasClass('select')){\n                $sizeAttrs.click();\n            }\n        }\n    });\n}\n\n/* Update fidelity points in DOM */\nfunction updateFidelityPoints(data) {\
15n    document.querySelector('.pointsEarned .points') !== null && data.basketPointNumber !== null ? document.querySelector('.pointsEarned .points').innerText = data.basketPointNumber : false;\n}\n\nmodule.exports = {\n    attributeSelect: attributeSelect,\n    methods: {\n        editBonusProducts: function (data) {\n            chooseBonusProducts(data);\n        },\n        updateCartTotals: function(data) {\n            updateCartTotals(data);\n        },\n        validateBasket: function(data) {\n            validateBasket(data);\n        },\n        validateExclusionProducts: function(validExclusionProducts, basket) {\n            validateExclusionProducts(validExclusionProducts, basket);\n        },\n        updatePrice: function(items) {\n            updatePrice(items);\n        },\n        selectVariantIfOnlyOne: function() {\n            selectVariantIfOnlyOne();\n        },\n        selectLengthIfOnlyOne: function() {\n            selectLengthIfOnlyOne();\n        },\n        colorSelectedFirstPos: function() {\n            colorSelectedFirstPos();\n        },\n        updateFidelityPoints: function(data) {\n            updateFidelityPoints(data);\n        }      \n    },\n    ratingAttribute: function () {\n        $(document).on('click', '.bzv-global-rating, #js-zone-reviews button, #js-zone-qa button', function (e) {\n            e.preventDefault();\n            var gtmRatingProductUrl = lastUrl == \"\"  ? $('[data-attr=\"size\"] .select').length !== 0 ? $('[data-attr=\"size\"] .select').attr('value') : atob($('[data-attr=\"color\"] .selected').closest('a').attr('data-url')) : lastUrl;\n\n            if ($('.container-adproduct').length == 0){\n                gtmRatingProduct(gtmRatingProductUrl, true);\n            }\n        })\n    },\n    colorAttribute: function () {\n        $(document).on('click', '[data-attr=\"color\"] a:not(.more-colors):not(.color-attribute-mobile)', function (e) {\n            e.preventDefault();\n            if ($(this).attr('disabled')) {\n                return;\n            }\n            var $productContainer = $(this).closest('.set-item');
15\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.product-detail');\n            }\n            \n            var decodeUrl = atob($(this).attr('data-url'));\n            lastUrl = decodeUrl;\n            if($(this).closest('.container-adproduct').length !== 0){\n                $productContainer = $(this).closest('.container-adproduct');\n                adAttributeSelect(decodeUrl, $productContainer, true);\n            }else{\n                attributeSelect(decodeUrl, $productContainer, true);\n            }\n        });\n\n        /* --------------------- AB OCS-1136 --------------------- */\n        $(document).on('change', '[data-attr=\"color\"] select', function(e) {\n            e.preventDefault();\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            var decodeUrl = atob($(this).children('option:selected').attr('data-url'));\n            lastUrl = decodeUrl;\n            if($(this).closest('.container-adproduct').length !== 0){\n                false;\n            }
15else{\n                attributeSelect(decodeUrl, $productContainer, true);\n            }\n        })\n        /* --------------------- AB OCS-1136 --------------------- */\n\n    },\n    selectAttribute: function () {\n        /*\n        ** Le on('click') n'est pas directement sur le span mais sur le bouton car non supporté par\n        ** mozilla sur macOs\n        */\n\n        $(document).off('click', 'button.size-attribute.selectable').on('click', 'button.size-attribute.selectable', function (e) {\n            e.preventDefault();\n            var $span = $(this).find(\"span\");\n            var $productContainer = $span.closest('.set-item');\n            lastUrl = $span.attr('value');\n\n            if (!$productContainer.length) {\n                $productContainer = $span.closest('.product-detail');\n            }\n\n            attributeSelect($span.attr('value'), $productContainer);\n            \n        });\n\n        /* --------------------- AB OCS-1136 --------------------- */\n        $(document).on('change', '[data-attr=\"size\"] select, [data-attr=\"length\"] select', function() {\n            var $productContainer = $(this).children('option:selected').closest('.set-item');
15\n            if (!$productContainer.length) {\n                $productContainer = $(this).children('option:selected').closest('.product-detail');\n            }\n            attributeSelect($(this).children('option:selected').attr('value'), $productContainer);\n        });\n        $(document).ready(function() {\n            if (document.querySelector('[data-attr=size] select') !== null && document.querySelectorAll('[data-attr=size] select option:not(:disabled)').length == 1) {\n                const changeEvent = new Event('change', { bubbles: true });\n                document.querySelector('[data-attr=size] select').dispatchEvent(changeEvent);\n            }\n            if (document.querySelector('[data-attr=length] select') !== null && document.querySelectorAll('[data-attr=length] select option:not(:disabled)').length == 1) {\n                const changeEvent = new Event('change', { bubbles: true });\n                document.querySelector('[data-attr=length] select').dispatchEvent(changeEvent);\n            }\n        })\n        /* --------------------- AB OCS-1136 --------------------- */\n\n        /*---Google Shopping---*/\n        if($('.container-adproduct').length){\n            $(document).off('change', '.js-select-adproduct').on('change', '.js-select-adproduct', function (e) {\n                e.preventDefault();\n                var $option = $(this).find(':selected');\n                var $productContainer = $option.closest('.container-adproduct');\n                adAttributeSelect($option.attr('data-url'), $productContainer);\n            });\n        }\n\n    },\n\n    selectAttributeIndicator: function () {\n        $(document).on('click', '.image-indicator', function (e) {\n            e.preventDefault();\n\n            $('.image-indicator').removeClass('active');\n\n            $(this).addClass('active');\n        });\n    },\n\n    selectAttributeSliderIndicator: function () {\n        $(document).on('click', '.carousel-indicators li', function (e) {\n            e.preventDefault();\n\n            $('.image-indicator').removeClass('active');\n            $('a[data-bs-slide-to=\"' + $(this).attr('data-bs-slide-to') + '\"]').addClass('active');\n        });\n    },\n\n    productSetSelectProducts: function () {\n        $(document).on('change', '.set-items :checkbox', function () {\n            let totalPriceSet = 0;\n            let totalBaseSet = 0\n            let nbChecked = 0;\n            let $priceProductSet = $('.product-set-detail .prices.total .ocs-price');\n            let dataPriceAll = false;\n            $('.set-item').each(function () {\n                if ($(this).find(':checkbox').is(':checked')) {\n                    nbChecked++;\n                    let $price = $(this).find('.prices .ocs-price span')[0].innerText;\n                    totalPriceSet = totalPriceSet + parseFloat($price);\n                    if ($(this).find('.prices .ocs-price span')[1] !== undefined) {\n                        totalBaseSet = totalBaseSet + parseFloat($(this).find('.prices .ocs-price span')[1].innerText);\n                    } else {\n                        totalBaseSet = totalBaseSet + parseFloat($(this).find('.prices .ocs-price span')[0].innerText);\n                    }\n                }\n            });\n\n            let totalPriceSetStr = totalPriceSet.toFixed(2) + \"€\";\n\n            if ($($priceProductSet[0]).attr('data-priceall')) {\n                dataPriceAll = true;\n                if ($($priceProductSet[0]).data('priceall') == totalPriceSetStr) {\n                    $priceProductSet[0].children[0].innerText = $($priceProductSet[0]).data('priceset');\n                } else {\n                    $priceProductSet[0].children[0].innerText = totalPriceSetStr;\n                }\n            } else {\n                $priceProductSet[0].children[0].innerText = totalPriceSetStr;\n            }\n\n            if ($priceProductSet[0].children[1] !== undefined) {\n                $priceProductSet[0].children[1].innerText = totalBaseSet.toFixed(2) + \"€\";\n                \n                if (totalBaseSet == 0 || totalBaseSet == totalPriceSet) {\n                    $priceProductSet[0].children[1].style.display = \"none\";\n                    $($priceProductSet[0].children[0]).removeClass('discount-price');\n                    $($priceProductSet[0].children[0]).addClass('price');\n                } else {\n                    $($priceProductSet[0].children[0]).addClass('discount-price');\n                    $($priceProductSet[0].children[0]).removeClass('price');\n                    $priceProductSet[0].children[1].style.display = \"block\";\n                }\n            }\n\n            if ($('.set-item').length == nbChecked && dataPriceAll == true) {\n                $priceProductSet[0].children[0].innerText = $($priceProductSet[0]).data('priceset');\n                $priceProductSet[0].children[1].innerText = $($priceProductSet[0]).data('priceall');\n                $($priceProductSet[0].children[0]).addClass('discount-price');\n                $($priceProductSet[0].children[0]).removeClass('price');\n                $priceProductSet[0].children[1].style.display = \"block\";\n            }\n            \n            if ($('.set-item').length == nbChecked) {\n                $('.not-all-items-selected').addClass('d-none');\n                $('.all-items-selected').removeClass('d-none');\n            } else {\n                $('.not-all-items-selected').removeClass('d-none');\n                $('.all-items-selected').addClass('d-none');\n            }\n        });\n    },\n\n    availability: function () {\n        $(document).on('change', '.quantity-select', function (e) {\n            e.preventDefault();
15\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).off('click', 'button.add-to-cart, button.add-to-cart-global').on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\n            var addToCartUrl;\n            var pid;\n            var pidsObj;\n            var setPids;\n            var pidVariant;\n            var isOk = true;\n            var setPidsVariant = [];\n            var isProductSet = false;\n            var $productErrors = [];\n\n            pidVariant = $(this).closest('.product-detail').data('idvariationgroup');\n\n            $('body').trigger('product:beforeAddToCart', this);\n\n            if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\n                setPids = [];\n                isProductSet = true;\n                $('.product-detail').each(function () {\n                    if (!$(this).hasClass('product-set-detail') && $(this).find(':checkbox').is(':checked')) {\n                        setPids.push({\n                            pid: $(this).data('pid').toString(),\n                            qty: $(this).find('.quantity-select').val(),\n                            options: getOptions($(this))\n                        });\n                        if ($(this).data('idvariationgroup') == $(this).data('pid')) {\n                            isOk = false;\n                            $productErrors.push($(this));\n                        }\n                    }\n                });\n                pidsObj = JSON.stringify(setPids);\n            }\n\n            pid = getPidValue($(this));\n\n            var $productContainer = $(this).closest('.product-detail');
15\n            if (!$productContainer.length) {\n                $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\n            }\n\n            addToCartUrl = getAddToCartUrl();\n\n            var dataPageOrigin =$(this).parents('.js-data-page').data('page');\n\n            var form = {\n                pid: pid,\n                pidsObj: pidsObj,\n                childProducts: getChildProducts(),\n                quantity: getQuantitySelected($(this)),\n                addToCartOrigin: dataPageOrigin\n            };\n            \n            if (!$('.bundle-item').length) {\n                form.options = getOptions($productContainer);\n            }\n\n            if (!isProductSet) {\n                if (pid == pidVariant) {\n                    isOk = false;\n                    $productErrors.push($(this).closest('.product-detail'));\n                }\n            } else {\n                if (setPids.length == 0) {\n                    isOk = false;\n                    $productErrors.push($(this).closest('.product-detail'));\n                }\n            }\n            \n            $(this).trigger('updateAddToCartFormData', form);\n            if (addToCartUrl && isOk) {\n                $.ajax({\n                    url: addToCartUrl,\n                    method: 'POST',\n                    data: form,\n                    success: function (data) {\
15n                        addToCartSuccess.ajaxAddToCart(data,dataPageOrigin);\n                        updateFidelityPoints(data);\n                        $('.coupons-and-promos').empty().append(data.cart.totals.discountsHtmlDS);\n                        $('.basketvalueDiscounts').children().length !== 0 ?($('.coupons-and-promos').addClass('d-block'),$('.coupons-and-promos').removeClass('d-none')) : ($('.coupons-and-promos').addClass('d-none'), $('.coupons-and-promos').removeClass('d-block'));\n                        if(!($('.fitle-placeholder').is(':empty'))) {\n                            ftltag('event', 'cart', {\n                                product_id: data.product.variationGroupID,\n                                size: data.product.sizeDisplayValue\n                            });\n                        }\n                    },\n                    error: function () {\n                        if (isProductSet && $productErrors.length > 0) {\n                            $('html, body').scrollTop({ scrollTop: $productErrors[0].offset().top - 80 }, 'slow');\n                        }\n                        $.spinner().stop();\n                    }\n                });\n            } else {\n                var msg;\n                if (isProductSet && setPids.length == 0) {\n                    msg = $($('.error-select-none-msg')[0]).text();\n                } else {\n                    msg = $($('.error-select-size-msg')[0]).text();\n                }\n                $('.availability-msg').text(\"\").removeClass(\"error-select-size\");\n                $productErrors.forEach(function ($productError) {\n                    $productError.find('.availability-msg').text(msg).addClass(\"error-select-size\");\n                })\n                if ($productErrors.length > 0) {\n                    $('html, body').animate({ scrollTop: $($productErrors[0]).find('*[data-attr=\"size\"]').offset().top - 80 }, 'slow');\n                }\n                $.spinner().stop();\n            }\n        });\n\n        $(document).off('click','button.js-add-to-cart-ads').on('click','button.js-add-to-cart-ads',function(){\n            var addToCartUrl;\n            var pid;\n            var pidsObj;\n            var pidVariant;\n            var isOk = true;\n            var isProductSet = false;\n            var $productErrors = [];\n\n            pidVariant = $(this).closest('.container-adproduct').data('idvariationgroup');\n\n            $('body').trigger('product:beforeAddToCart', this);\n\n            pid = getPidValue($(this));\n\n            addToCartUrl = getAddToCartUrl();\n\n            var dataPageOrigin =$(this).parents('.js-data-page').data('page');\n\n            var form = {\n                pid: pid,\n                pidsObj: pidsObj,\n                childProducts: getChildProducts(),\n                quantity: 1,\n                addToCartOrigin: dataPageOrigin\n            };\n\n            if (!isProductSet) {\n                if (pid == pidVariant) {\n                    isOk = false;\n                    $productErrors.push($(this).closest('.container-adproduct'));\n\n                }\n            } \n            \n            $(this).trigger('updateAddToCartFormData', form);\n            if (addToCartUrl && isOk) {\n                $.ajax({\n                    url: addToCartUrl,\n                    method: 'POST',\n                    data: form,\n                    success: function (data) {\
15n                        addToCartSuccess.ajaxAddToCart(data,dataPageOrigin);\n                    },\n                    error: function () {\n                        $.spinner().stop();\n                    }\n                });\n            } else {\n                var msg = $($('.error-select-size-msg')[0]).text();\n                $('.availability-msg').text(\"\").removeClass(\"error-select-size\");\n                $productErrors.forEach(function ($productError) {\n                    $productError.find('.availability-msg').text(msg).addClass(\"error-select-size\");\n                })\n                \n                if ($productErrors.length > 0) {\n                    $('html, body').animate({ scrollTop: $($productErrors[0]).find('*[data-attr=\"size\"]').offset().top - 80 }, 'slow');\n                }\n                $.spinner().stop();\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($(this).parents('.choice-of-bonus-product').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 = $(this).parents('.choice-of-bonus-product').find('.product-option').data('option-id');\n            var valueId = $(this).parents('.choice-of-bonus-product').find('.options-select option:selected').data('valueId');\n            if (totalQty <= maxPids) {\n                var selectedBonusProductHtml = '' +\n                    '<div class=\"selected-pid row\" ' +\n                    'data-pid=\"' + pid + '\"' +\n                    'data-qty=\"' + submittedQty + '\"' +\n                    'data-optionID=\"' + (optionID || '') + '\"' +\n                    'data-option-selected-value=\"' + (valueId || '') + '\"' +\n                    '>' +\n                    '<div class=\"col-sm-11 col-9 bonus-product-name\" >' +\n                    $choiceOfBonusProduct.find('.product-name').html() +\n                    '</div>' +\n                    '<div class=\"col-1\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></div>' +\n                    '</div>';\n                $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n                $('.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').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\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) {\
15n                    $.spinner().stop();\n                    if (data.error) {\n                        $('.error-choice-of-bonus-products')\n                            .html(data.errorMessage);\n                    } else {\n                        $('.configure-bonus-product-attributes').html(data);\n                        $('.bonus-products-step2').removeClass('hidden-xxl-down');\n                        $('#chooseBonusProductModal').modal('hide');\n\n                        if ($('.add-to-cart-messages').length === 0) {\n                            $('body').append(\n                                '<div class=\"add-to-cart-messages\"></div>'\n                            );\n                        }\n                        $('.minicart-quantity').html(data.totalQty);\n                        $('.minicart-layer-quantity').html(data.totalQty);\n                        displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'success', data.msgSuccess);\n                        setTimeout(function () {\n                            $('.add-to-basket-alert').remove();\n                            if ($('.cart-page').length) {\n                                location.reload();\n                            }\n                        }, 3000);\n                    }\n                },\n                error: function () {\n                    $.spinner().stop();\n                }\n            });\n        });\n    },\n    getPidValue: getPidValue,\n    getQuantitySelected: getQuantitySelected,\n    sizeGuideModal : sizeGuideModal,\n    initFunction: $(function() {\n        if($('.product-detail .before-loading').length && $('.active-loader').length){\n            $('.product-detail .before-loading').removeClass('before-loading');\n            $('.before-loading_icon').removeClass('before-loading_icon');\n            $('.before-loading_fixHeight').removeClass('before-loading_fixHeight');\n        } \n            \n\n        if($('.search-results .before-loading').length && $('.active-loader').length){\n            $('.search-results .before-loading').removeClass('before-loading');\n            $('.before-loading_icon').removeClass('before-loading_icon');\n            $('.refinements-container').removeClass('d-none');\n        }\n            \n    })\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/base.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/clickproduct.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n    clickproduct: function (e) {\n        $('body').on('click', '.product-tile .clickproduct', function (e) {\n            //ExitRateBasket block link on cart\n            if ($(this).closest('.exitRateBasket').length == 0 \n                && !(e.target).classList.contains('ocs-icon') && !(e.target).closest('.carousel-indicators') == null) { /* means click is in a carousel control/indicator element*/\n                var urlProduct = $(this).data('link');\n                window.location.href = urlProduct;\n            }\n        });\n\n    },\n    clickProductMiddle: function () {\n        $('body').on('mouseup', '.image-container .clickproduct', function (event) {\n            if (!event.target.classList.contains('ocs-icon') && event.target.closest('.carousel-indicators') == null) { /* means click is in a carousel control/indicator element*/\n                var urlProduct = $(this).data('link');\n                //ExitRateBasket block link on cart\n                if ($(this).closest('.exitRateBasket').length == 0) {\n                    \n                    if(event.button == 1) {\n                            window.open(\n                                urlProduct,\n                                '_blank'\n                            );\n                        \n                    } else if (event.button !== 2){ \n                            window.location.href = urlProduct;\n                    }\n                }\n            }\n            \n        });\n    }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/clickproduct.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/detail.js":function(module,exports,__webpack_require__){"use strict";eval("\nvar base = __webpack_require__(/*! ./base */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/base.js\");\nvar displayNotification = __webpack_require__(/*! ../ds/displayNotification */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/ds/displayNotification.js\")\nvar clientHelpers = __webpack_require__(/*! ../helpers */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/helpers.js\");\n\nvar reviews = __webpack_require__(/*! ../components/reviews */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/reviews.js\");\n\n//Stock mag PDP\n$(document).off('click', '.changeStore').on('click', '.changeStore', displayLayer);\n\nfunction displayLayer(e){\n    var $productErrors = [];\n    var pid = $(this).closest('.product-detail').data('pid');\n    var pidVariant = $(this).closest('.product-detail').data('idvariationgroup');\n    var msg = $($('.error-select-size-msg')[0]).text();\n    var sticky = false\n    \n    if(e.currentTarget.classList.contains('isSizeSelected-false') && pid == pidVariant){\n        $productErrors.push($(this).closest('.product-detail'));\n        $('.availability-msg').text(\"\").removeClass(\"error-select-size\");\n        $productErrors.forEach(function ($productError) {\n            $productError.find('.availability-msg').text(msg).addClass(\"error-select-size\");\n        })\n        if ($productErrors.length > 0) {\n            $('html, body').animate({ scrollTop: $($productErrors[0]).find('*[data-attr=\"size\"]').offset().top - 80 }, 'slow');\n        }\n    }else{\n        document.querySelector('body').classList.add('no-scroll', 'overlay');\n        const layer = $('.ocs-content-layer');\n        //Si productDetail à une position sticky, stocker la valeur, la supprimer et la remettre au on close\n        if($('.primary-details').attr('style')){\n            sticky = $('.primary-details').attr('style');\n            $('.primary-details').attr('style','position: initial;');\n        }\n        layer.show();\n        layer.attr('aria-hidden', 'false');\n        document.querySelector('body').style ='overflow: hidden';\n        //Close layer si click sur la croix\n        $(document).on('click','.close-layer', function(){\n            $('.primary-details').attr('style', sticky);\n            closeLayer();\n        });\n        //Close layer si click sur le bouton Annuler\n        $(document).on('click', '.cancel', function(){\n            $('.primary-details').attr('style', sticky);\n            closeLayer();\n        });\n        //Close layer si click sur l'overlay\n        $('body').on('click', function(e){\n            if (e.target.classList.contains('overlay')) {\n                $('.primary-details').attr('style', sticky);\n                closeLayer();\n            }\n        });\n        document.querySelector('#detect-location-store').click();\n        document.querySelector('#ocsCheckout-content-store').focus();\n        var gtmUrl = $('#sizeRecommander').data('gtm-url'); // ou un autre élément portant déjà cet attribut\n        $.ajax({\n            url: gtmUrl,\n            data: { pid: pid },\n            async: false,\n            method: 'GET',\n            success: function (data) {\
15n                let GTMOpenLayer = __webpack_require__(/*! ./../gtm/util/actions/storePdp */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/storePdp.js\");\n                GTMOpenLayer.getDataLayerForAction({\n                    product: data.product\n                });\n            }\n        });\n\n    }\n}\n\nfunction closeLayer(){\n    const layer = $('.ocs-content-layer');\n    document.querySelector('body').style ='overflow: auto';\n    document.querySelector('body').classList.remove('no-scroll', 'overlay');\n    layer.hide();\n    layer.attr('aria-hidden', 'true');\n    let GTMcloseLayer = __webpack_require__(/*! ./../gtm/util/actions/closeLayer */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/closeLayer.js\");\n    GTMcloseLayer.getDataLayerForAction();\n}\n//Gestoin du toggle\n$(document).on('change', '.ocs-toggle', function(){\n    const stores = document.querySelectorAll('.option-card-checkbox');\n    if($(this).hasClass('checked')){\n        stores.forEach(store => {\n            if($('.store.' + store.value).find('.ocs-icon.radio-button-filled').hasClass('red')){\n                $('.store.' + store.value).parents('.content-store').addClass('d-none');\n            }\n        });\n    }else{\n        $('.content-store').removeClass('d-none');\n    }\n});\n//Gestion accessibilité, quand on tape du text dans l'input et que l'on souhaite aller vers le bas pour aller dans la prédiction\n$(document).on('keyup', '#woosmapstore', function(e){\n    if(e.code === 'ArrowDown'){\n        document.querySelector('.prediction-store').focus();\n    }\n});\n$(document).on('keydown', '.prediction-store', function(e){\n    e.preventDefault();\n    if(e.key === 'ArrowDown' || e.code === 'Tab'){\n        const next = e.currentTarget.nextElementSibling;\n        if (next && next.classList.contains('prediction-store')) {\n            next.focus();\n        }\n    }\n    if (e.key === 'ArrowUp') {\n        const prev = e.currentTarget.previousElementSibling;\n        if (prev && prev.classList.contains('prediction-store')) {\n            prev.focus();\n        } else {\n            $('#woosmapstore').focus();\n        }\n    }\n    if(e.key === 'Enter'){\n        e.currentTarget.click();\n    }\n})\n//Gestion d'affichage des horraires dans la modale\n$(document).off('click', '.ocsCheckout-content-hours').on('click', '.ocsCheckout-content-hours', function(e){\n    e.preventDefault();\n    const hours = $(this).parent().find('.ocsCheckout-content-value');\n    const ico = $(this).parent().find('.ocs-icon.chevron-down.add-large');\n    if(hours.is(':visible')){\n        hours.hide();\n        ico.css('rotate','none');\n    }else{\n        hours.show();\n        ico.css('rotate','180deg');\n    }\n});\n//Choix magasin\n$(document).on('click', '.ocsCheckout-content-option-card button', function(e){\n    e.preventDefault();\n    if(e.target.classList.contains('ocsCheckout-trigger-hours')){\n        return;\n    }\n    $('.ocsCheckout-option-card.active').find('.option-card-checkbox').removeAttr('checked');\n    $('.ocsCheckout-option-card.active').removeClass('active');\n    \n    $(this).find('.ocsCheckout-option-card').addClass('active');\n    $(this).find('.option-card-checkbox').attr('checked', 'checked');\n    $('.ocs-button.large.has-content.fab.disabled').removeClass('disabled');\n});\n//submit\n$(document).off('submit', '#storeForm').on('submit', '#storeForm', function(e){\n    e.preventDefault();\n    const storeId = document.querySelector('.ocsCheckout-option-card.active').querySelector('#storeID').value;\n    const isAvailable = document.querySelector('.ocsCheckout-option-card.active').querySelector('.radio-button-filled').classList.contains('green') ? true : false; \n    const storeName = document.querySelector('.ocsCheckout-option-card.active').querySelector('#storeName').value;\n    $.ajax({\n        url: document.querySelector('#storeForm').getAttribute('action') + '?storeId=' + storeId + '&isAvailable=' + isAvailable + '&storeName=' + storeName,\n        type: 'get',\n        dataType: 'json',\n        success: function (data) {\
15n            if(data.success){\n                $('#stock-in-store').html(data.renderTemplate);\n                $('.displayIf-isSizeSelected-true').removeClass('d-none');\n                $('.displayIf-isSizeSelected-false').addClass('d-none');\n                $('#shippingCountrydefault').val(data.countryCode);        \n                if(data.selectedStoreAvailable){\n                    $('.displayIf-selectedStoreAvailable-true').removeClass('d-none');\n                    $('.displayIf-selectedStoreAvailable-false').addClass('d-none');\n                }else{\n                    $('.displayIf-selectedStoreAvailable-false').removeClass('d-none');\n                    $('.displayIf-selectedStoreAvailable-true').addClass('d-none');\n                }\n                closeLayer();\n            }else{\n                closeLayer();  \n                alertNotification.methods.displayAlert($('#disponibilityUnavailable')[0].textContent, 'danger');\n            }\n        },error: function (){\n            closeLayer();  \n            alertNotification.methods.displayAlert($('#disponibilityUnavailable')[0].textContent, 'danger');\n        }\n    });\n});\n\nfunction socialIcons() {\n    $('.social-icons > button').on('click', function (e) {\n        e.preventDefault();\n        var encodedUrl = $(this).attr('data-href');\n        window.open(clientHelpers.decode_base64(encodedUrl), '_blank');\n    });\n}\n\nfunction paypalMessage(amount){\n    if($('.pp-message').length){\n        paypal.Messages({\n            amount: amount,\n            placement: 'product',\n            style: {\n              layout: 'text',\n              logo: {\n                type: 'inline',\n              },\n              text: {\n                size: 14\n              }\n            },\n            onClick: () => {\n                let GTMPaiementNfois = $('.cart').length ? __webpack_require__(/*! ../gtm/util/layers/paiementNFoisCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js\") : __webpack_require__(/*! ../gtm/util/layers/paiementNFoisPDP */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js\");\n                GTMPaiementNfois.getDataLayerForLayer();\n            },\n        })\n        .render('.pp-message');\n    }\n}\n\nmodule.exports = {\n    availability: base.availability,\n    addToCart: base.addToCart,\n    selectVariantIfOnlyOne: function () {\n        $(document).ready(function(){\n            base.methods.selectVariantIfOnlyOne();\n        }); \n    },\n    \n    productSetSelectProducts: base.productSetSelectProducts,\n    socialIcons: socialIcons,\n    anchorDescription: function () {\n        $(document).on('click', '#anchor-description', function (e) {\n            if (document.querySelector('.description-and-details') !== null) {\n                const descrDetails = document.querySelectorAll('.description-and-details');\n                let count = 0;\n                Array.from(descrDetails).filter(function(tab) {\n                    if (window.getComputedStyle(tab).display !== 'none' && count == 0) {\n                        count +=1;\n                        let topX;\n                        window.innerWidth >
15 1279 ? document.querySelector('.navbar') !== null ? topX = document.querySelector('.navbar').clientHeight : topX = 100 : document.querySelector('.header.container') !== null ? topX = document.querySelector('.header.container').clientHeight : topX = 100;\n                        if (e.currentTarget.getAttribute('data-descid') !== null) {\n                            window.scrollBy({top: document.getElementById(e.currentTarget.getAttribute('data-descid')).getBoundingClientRect().top - topX, behavior: \"smooth\"});\n                        } else {\n                            window.scrollBy({top: tab.getBoundingClientRect().top - topX , behavior: \"smooth\"});\n                        }\n                    }\n                })\n\n            }\n        })\n    },\n\n    sortBackground: function () {\n        $(document).on('click', '.socialBtn', function (e) {\n            $('.share-background').toggleClass('active');\n            $('body').toggleClass('overflow-hidden');\n        });\n    },\n    sortBackgroundClickOut: function () {\n        $(document).click(function (e) {\n            var container = $(\".socialBtn\");\n            if (!container.is(e.target) &&\n                container.has(e.target).length === 0) {\n                $('.share-background').removeClass('active');\n                $('body').removeClass('overflow-hidden');\n                $('.socialBox').collapse('hide');\n            }\n        });\n    },\n    copylink: function () {\n        $(document).on('click', '.socialBox .linkShare', function (e) {\n            //var copyText = $('.socialBox .linkShare').data('link');\n            var copyText = document.querySelector('#inputlinkshare');\n            var messageSuccessShare = $(this).data('success');\n            copyText.select();\n            document.execCommand(\"copy\");\n            displayNotification(document.querySelector('.ocs-notification[role=alert]'), 'success', messageSuccessShare);\n        });\n    },\n\n    selectAttributeIndicator: function () {\n        $(document).on('click', '.image-indicator', function (e) {\n\n            $('.image-indicator').removeClass('active');\n\n            $(this).addClass('active');\n        });\n    },\n\n    selectAttributeSliderIndicator: function () {\n        $(document).on('click', '.carousel-indicators li', function (e) {\n\n            $('.image-indicator').removeClass('active');\n            $('a[data-bs-slide-to=\"' + $(this).attr('data-bs-slide-to') + '\"]').addClass('active');\n        });\n    },\n\n    setCarouselMinHeight: function () {\n        $(window).resize(function () {\n            $('.carousel').css('minHeight', $('.carousel-item.active img').height());\n        }).resize();\n    },\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-xxl-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-xxl-down');\n            }\n\n            if (data.longDescription) {\n                $productContainer.find('.description-and-detail .details')\n                    .removeClass('hidden-xxl-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-xxl-down');\n            }\n        });\n    },\n\n    showSpinner: function () {\n        $('body').on('product:beforeAddToCart', function () {\n            $.spinner().start();\n        });\n    },\n    updateAttribute: function () {\n        $('body').on('product:afterAttributeSelect', function (e, response) {\n            const description = document.querySelectorAll('.description-and-details');\n            let activeDesc;\n            description.forEach(function(desc) {\n                window.getComputedStyle(desc).display !== 'none' ? activeDesc = desc : false;\n            })\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                response.container.find('.product-id').attr('data-productidforbv', response.data.productIdForBV);\n                activeDesc !== undefined && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-description').html(response.data.product.longDescription) : $(activeDesc).find('.product-description .product-description').html(response.data.product.longDescription) ;\n                activeDesc !== undefined && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-composition p').html(response.data.product.composition) : $(activeDesc).find('.product-composition .product-composition').html(response.data.product.composition);\n                response.data.product.pdpInfoComplementaire ? response.container.find('.pdp-info-complementaire').html(response.data.product.pdpInfoComplementaire) : response.container.find('.pdp-info-complementaire').html('');\n                 if (response.container.find('.pdp-info-complementaire_2').length === 0) {\n                    response.container.find('.pdp-info-complementaire').after('<div class=\"pdp-info-complementaire_2\"></div>');\n                }\n                if (response.data.product.pdpInfoComplementaire2) {\n                    response.container.find('.pdp-info-complementaire_2').html(response.data.product.pdpInfoComplementaire2);\n                } else {\n                    response.container.find('.pdp-info-complementaire_2').html('');\n                }\n                \n\n                if(response.data.product.variationGroupID != undefined && response.data.product.variationGroupID.length > 0) {\n                    response.container.find('.js-agec-modal').attr('data-productid',response.data.product.variationGroupID);\n                } else {\n                    response.container.find('.js-agec-modal').attr('data-productid',response.data.product.id);\n                }\n                if(response.data.product.agecUUID != undefined && response.data.product.agecUUID.length > 0) {\n                    response.container.find('.js-agec-modal').attr('data-productid',response.data.product.agecUUID);\n                }\n            } else if ($('.product-set-detail').eq(0).length > 0) {\n                response.container.data('pid', response.data.product.id);\n                response.container.find('.product-id').text(response.data.product.id);\n                activeDesc !== undefined  && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-description').html(response.data.product.longDescription) : $(activeDesc).find('.product-description .product-description').html(response.data.product.longDescription) ;\n                activeDesc !== undefined  && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-composition p').html(response.data.product.composition) : $(activeDesc).find('.product-composition .product-composition').html(response.data.product.composition);\n                response.container.find('.product-id').attr('data-productidforbv', response.data.productIdForBV);\n                response.data.product.pdpInfoComplementaire ? response.container.find('.pdp-info-complementaire').html(response.data.product.pdpInfoComplementaire) : response.container.find('.pdp-info-complementaire').html('');\n                if (response.container.find('.pdp-info-complementaire_2').length === 0) {\n                    response.container.find('.pdp-info-complementaire').after('<div class=\"pdp-info-complementaire_2\"></div>');\n                }\n                if (response.data.product.pdpInfoComplementaire2) {\n                    response.container.find('.pdp-info-complementaire_2').html(response.data.product.pdpInfoComplementaire2);\n                } else {\n                    response.container.find('.pdp-info-complementaire_2').html('');\n                }\n                \n                if(response.data.product.variationGroupID != undefined && response.data.product.variationGroupID.length > 0) {\n                    response.container.find('.js-agec-modal').attr('data-productid',response.data.product.variationGroupID);\n                } else {\n                    response.container.find('.js-agec-modal').attr('data-productid',response.data.product.id);\n                }\n                if(response.data.product.agecUUID != undefined && response.data.product.agecUUID.length > 0) {\n                    response.container.find('.js-agec-modal').attr('data-productid',response.data.product.agecUUID);\n                }\n            } else {\n                $('.product-id').text(response.data.product.id);\n                activeDesc !== undefined  && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-description').html(response.data.product.longDescription) : $(activeDesc).find('.product-description .product-description').html(response.data.product.longDescription) ;\n                activeDesc !== undefined  && activeDesc.classList.contains('slider') ? $(activeDesc).find('.product-composition p').html(response.data.product.composition) : $(activeDesc).find('.product-composition .product-composition').html(response.data.product.composition);\n                $('.product-detail:not(\".bundle-item\")').data('pid', response.data.product.id);\n                $('.container-adproduct').data('pid', response.data.product.id);\n                $('.product-id').attr('data-productidforbv', response.data.productIdForBV);\n                response.data.product.pdpInfoComplementaire ? response.container.find('.pdp-info-complementaire').html(response.data.product.pdpInfoComplementaire) : response.container.find('.pdp-info-complementaire').html('');\n                     if (response.container.find('.pdp-info-complementaire_2').length === 0) {\n                    response.container.find('.pdp-info-complementaire').after('<div class=\"pdp-info-complementaire_2\"></div>');\n                }\n                if (response.data.product.pdpInfoComplementaire2) {\n                    response.container.find('.pdp-info-complementaire_2').html(response.data.product.pdpInfoComplementaire2);\n                } else {\n                    response.container.find('.pdp-info-complementaire_2').html('');\n                }\n                \n                \n                if(response.data.product.variationGroupID != undefined && response.data.product.variationGroupID.length > 0) {\n                    $('.js-agec-modal').attr('data-productid',response.data.product.variationGroupID);\n                } else {\n                    $('.js-agec-modal').attr('data-productid',response.data.product.id);\n                }\n\n                if(response.data.product.agecUUID != undefined && response.data.product.agecUUID.length > 0) {\n                    $('.js-agec-modal').attr('data-productid',response.data.product.agecUUID);\n                }\n            }\n        });\n    }
15,\n    showOneStockIframe: function() {\n        $(document).on('click', '.eresa', function () {\n            if ($(this).hasClass('onestock')) {\n                var url = $(this).data('onestock-action');\n                var productID = $(this).data('onestock-product-id');\n                var locale = $(this).data('onestock-locale');\n                var rct = $(this).data('onestock-item-id');\n                var quantity = $(this).data('onestock-quantity');\n\n                var pidVariant;\n                var pid;\n                var $productErrors = [];\n                var msg = $($('.error-select-size-msg')[0]).text();\n\n                if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\n                    pid = $(this).closest('.modal-content').find('.product-quickview').data('pid');\n                } else if ($('.product-set-detail').length || $('.product-set').length) {\n                    pid = $(this).closest('.product-detail').data('pid');\n                } else if($('.container-adproduct').length){\n                    pid = $(this).closest('.container-adproduct').data('pid');\n                }else {\n                    pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n                }\n                \n                pidVariant = $(this).closest('.product-detail').data('idvariationgroup');\n                if(pid == pidVariant){\n                    $productErrors.push($(this).closest('.product-detail'));\n                    $('.availability-msg').text(\"\").removeClass(\"error-select-size\");\n                    $productErrors.forEach(function ($productError) {\n                        $productError.find('.availability-msg').text(msg).addClass(\"error-select-size\");\n                    })\n                    if ($productErrors.length > 0) {\n                        $('html, body').animate({ scrollTop: $($productErrors[0]).find('*[data-attr=\"size\"]').offset().top - 80 }, 'slow');\n                    }\n                }
15else{\n                    $.ajax({\n                        url: url + '?rct=' + rct + '&quantity=' + quantity + '&locale=' + locale,\n                        type: 'get',\n                        dataType: 'json',\n                        success: function (data) {\n                            $('.onestock-modal').show();\n                            $('.onestock-frame').html(data.url);\n                            if(data.qty > 0) {\n                                $('.qty-bullet').html(data.qty);\n                                $('.minicart-eresa').show().removeClass('d-none');\n                                $('.eresa-separator').show().removeClass('d-none');\n                            }\n                        }\n                    });\n                }\n\n            }\n        });\n    },\n    hideOneStockIframe: function() {\n        $('body').on('click', '.onestock-modal .icon-cross-black', function () {\n            $('.onestock-modal').hide();\n        });\n    },\n    updateAddToCart: function () {\n        $('body').on('product:updateAddToCart', function (e, response) {\n            $('.availability-msg').removeClass('error-select-size');\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            // $('button.add-to-cart-global').attr('disabled', !enable);\n            if (typeof $(document).find('#wishlist-icon') != 'undefined') {\n                var $wishlistIcon = $(document).find('#wishlist-icon');\n                $wishlistIcon.removeClass('full');\n                $wishlistIcon.addClass('enable');\n                $wishlistIcon.removeAttr('disabled');\n            }\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        var $sizeChart = $('.size-chart-collapsible');\n        $('.size-chart a').on('click', function (e) {\n            e.preventDefault();\n            var url = $(this).attr('href');\n            if ($sizeChart.is(':empty')) {\n                $.ajax({\n                    url: url,\n                    type: 'get',\n                    dataType: 'json',\n                    success: function (data) {\
15n                        $sizeChart.append(data.content);\n                    }\n                });\n            }\n            $sizeChart.toggleClass('active');\n        });\n\n        $('body').on('click touchstart', function (e) {\n            if ($('.size-chart').has(e.target).length <= 0) {\n                $sizeChart.removeClass('active');\n            }\n        });\n    },\n\n    sizeGuide: function () {\n        $('.sizeGuide-text').click(function (e) {\n            e.preventDefault();\n            ('.menu-toggleable-right').append(\"<p>test</p>\");\n        });\n    },\n\n    backNav: function () {\n        $(document).on('click', '#btnbacknav, .continue-shopping-link-return', function (e) {\n            e.preventDefault();\n                \n                let hostname = window.location.hostname;\n                let referrer = document.referrer;\n\n                if (referrer == \"\" || referrer.indexOf(hostname) == -1 || history.length <= 1) {\n                    let urlcategory = $('#btnbacknav').data('urlcategory');\n                    if (urlcategory == null || urlcategory == \"\") {\n                        let urlhome = $('#btnbacknav').data('home');\n                        location.href = urlhome;
15\n                    } else {\n                        location.href = urlcategory;\n                    }\n                } else {\n                    history.back();\n                }\n        });\n    },\n\n    readMoreReadLess: function () {\n        $('.product-description').each(function () {\n            var $el = $(this);\n\n            var $c = $el\n           .clone()\n           .css({'display': 'none','text-align': 'justify', 'font-size': '.875rem','padding-right' : '30px', 'padding-left' : '30px'})\n           .appendTo('body');\n\n            if( $c.height() == $el.height() ) {\n                $el.siblings('.rmrl').css('display', 'none');\n            }\n            setTimeout(() => {\n                $c.remove();\n            }, 2500);\n\n            if (this.nextElementSibling !== null) {\n                this.nextElementSibling.addEventListener('click', function(e) {\n                    if($el.hasClass(\"webkit\")){\n                        $el.removeClass(\"webkit\");\n                    }else{\n                        $el.addClass(\"webkit\");\n                    }\n                \n                    if (e.currentTarget.classList.contains(\"rmrl\")) {\n                        $(this).find('span').toggleClass('d-none');\n                    }\n                })\n            }\n        })\n    },\n    agecLink: function(){\n        $(document).on('click', '.description-and-details .js-agec-modal', function(e){\n            e.stopPropagation();\n            e.preventDefault();\n            $('body').spinner().start();\n            $('#agecModal').remove();\n            var url = $(this).data('endpointagec') + $(this).attr('data-productid');    \n            var htmlString = '<div class=\"modal fade right\" id=\"agecModal\" role=\"dialog\">'\n                + '<div class=\"modal-dialog \">'\n                + '\x3c!-- Modal content--\x3e'\n                + '<div class=\"modal-content\">'\n                + '<button type=\"button\" class=\"btn-close close\" data-bs-dismiss=\"modal\" aria-label='+$('.dataRessources').data('aria-close')+'></button>'\n                + '<div class=\"modal-body\">'\n                + '<iframe src=\"'+ url +'\" width=\"100%\" height=\"100%\"> </iframe>'\n                + '</div>'\n                + '</div>'\n                + '</div>'\n                + '</div>'\n                + '</div>';\n            $('body').append(htmlString);\n            $('#agecModal').modal('show');\n            $('body').spinner().stop();\n        });\n    },\n    layerPaimentMethod: function(){\n        if($('.pp-message').length){\n            var amount = $('.pp-message').data('amount');\n            paypalMessage(amount);\n        }\n        $('body').on('click','#modalAlmaPaypal .js-layer-paiement_btn',function(){\n            var layerTitle = $(this).data('layer-title');\n            var btnClick = $(this);\n            $('#modalAlmaPaypal .js-layer-paiement_content').each(function(){\n                var thisContent = $(this);\n                if(!btnClick.hasClass('active-title') && thisContent.data('layer-content') === layerTitle){\n                    $('#modalAlmaPaypal .js-layer-paiement_content').removeClass('active-layer');\n                    $('#modalAlmaPaypal .js-layer-paiement_btn').removeClass('active-title');\n                    thisContent.addClass('active-layer');\n                    btnClick.addClass('active-title');\n                }\n            })\n        });\n        \n        $('body').on('click','.display-alma',function () {\n            $('.alma-payment-plans-container').trigger(\"click\");\n            let GTMPaiementNfois = $('.cart').length ? __webpack_require__(/*! ../gtm/util/layers/paiementNFoisCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js\") : __webpack_require__(/*! ../gtm/util/layers/paiementNFoisPDP */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js\");\n            GTMPaiementNfois.getDataLayerForLayer();\n        })\n        $('body').on('click','.btn-more',function(){\n            let GTMPaiementNfois 
15= $('.cart').length ? __webpack_require__(/*! ../gtm/util/layers/paiementNFoisCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisCart.js\") : __webpack_require__(/*! ../gtm/util/layers/paiementNFoisPDP */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/paiementNFoisPDP.js\");\n            GTMPaiementNfois.getDataLayerForLayer();\n        })\n    },\n    batchProductVisited: function(){\n        if ($('#bazarvoice-product').length) {\n            var jsonData = $('#bazarvoice-product').data('productinfo');\n            var customerCode = $('#bazarvoice-product').data('customercode');\n            if (typeof batchSDK !== 'undefined') {\n                batchSDK(function (api) {\n                    api.trackEvent(\"visited_product\",{\n                        attributes: {\n                            \"product_rct\": jsonData.product.rct,\n                            \"product_subcategory\": jsonData.product.subCategory,\n                            \"user_id_uncrypted\": customerCode,\n                            \"product_rc\": jsonData.product.rc,\n                            \"product_category\": jsonData.product.category,\n                            \"product_discountati\": {\n                            type: api.eventAttributeTypes.FLOAT,\n                            value: jsonData.product.discountAti,\n                            },\n                            \"product_unitpriceati\": {\n                            type: api.eventAttributeTypes.FLOAT,\n                            value: jsonData.product.unitpriceAti,\n                            },\n                            \"product_r\": jsonData.product.r,\n                            \"product_quantity\":{\n                            type: api.eventAttributeTypes.INTEGER,\n                            value: \"1\",\n                            },\n                            \"product_gender\": jsonData.product.gender,\n                            \"product_url\": {\n                            type: api.eventAttributeTypes.URL,\n                            value: jsonData.page.name,\n                            },\n                            \"product_name\": jsonData.product.name,\n                            \"product_season\": jsonData.product.season,\n                            \"product_subsubcategory\": jsonData.product.subsubCategory,\n                            \"product_subsubsubcategory\": jsonData.product.subsubsubCategory,\n                        }\n                    });\n                })\n            }\n        }\n    },\n    reviewsShowMoreLess: reviews.reviewsShowMoreLess,\n    sizeGuideModal: base.sizeGuideModal,\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/detail.js?")},
15"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js":function(module,exports,__webpack_require__){"use strict";eval("\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\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js?")},
vendor: 2,465 bytes, lines 15-18
15"./node_modules/webpack/buildin/global.js":function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function("return this")() || (1, eval)("this");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n//# sourceURL=webpack:///(webpack)/buildin/global.js?')}});
16var __fstrzSep="";
17/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790222548547%2Fjs%2Fcommon.js */
18!function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s="./cartridges/app_coremodel_storefront/cartridge/client/default/js/common.js")}({
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/common.js":function(module,exports,__webpack_require__){eval('var processInclude = __webpack_require__(/*! ./util */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js");\n\n$(function() {\n    processInclude(__webpack_require__(/*! ./components/clientSideValidation */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/clientSideValidation.js"));\n    processInclude(__webpack_require__(/*! ./gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js"));\n});\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/common.js?')},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/clientSideValidation.js":function(module,exports,__webpack_require__){"use strict";eval("\n\n/**\n * Validate whole form. Requires `this` to be set to form object\n * @param {jQuery.event} event - Event to be canceled if form is invalid.\n * @returns {boolean} - Flag to indicate if form is valid\n */\nfunction validateForm(event) {\n    var valid = true;\n    if (this.checkValidity && !this.checkValidity()) {\n        // safari\n        valid = false;\n        if (event) {\n            event.preventDefault();\n            event.stopPropagation();\n            event.stopImmediatePropagation();\n        }\n        $(this).find('input, select').each(function () {\n            if (!this.validity.valid) {\n                $(this).trigger('invalid', this.validity);\n            }\n        });\n        radioButtonsGroupCheck();\n    }\n    return valid;\n}\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nfunction clearForm(form) {\n    // KT => ocs-338 : create conflict with validation form\n    //$(form).find('.form-control.is-invalid').removeClass('is-invalid');\n}\n\n/**\n * Radio button group validation\n */ \nfunction radioButtonsGroupCheck() {\n    if ($('.form-check-radio.required').length !== 0) { /* form-check-radio is the container of the multiple inputs radio to check */\n        let inputChecked = 0;\n        const allInputs = $('.form-check-radio input[type=radio]');\n        allInputs.each(function(index, input) {\n            input.checked == true ? inputChecked++ : false ;\n            if (allInputs.length == index + 1) { /* End of the loop */\n                if (inputChecked == 0) { /* No one radio checked */\n                    allInputs.addClass('is-invalid');\n                    $(input).closest('.form-check-radio').find('.invalid-feedback').addClass('d-block');\n                } else {\n                    allInputs.removeClass('is-invalid');\n                    $(input).closest('.form-check-radio').find('.invalid-feedback').removeClass('d-block');\n                }\n            }\n        });\n    }\n}\n\nmodule.exports = {\n    invalid: function () {\n        $('form input, form select,form textarea').on('invalid', function (e) {\n            e.preventDefault();\n            this.setCustomValidity('');\n            if (!this.validity.valid) {\n                var validationMessage = this.validationMessage;\n                $(this).addClass('is-invalid');\n                if (this.validity.badInput && $(this).data('bad-input')) {\n                    validationMessage = $(this).data('bad-input');\n                } else if (this.validity.patternMismatch && $(this).data('pattern-mismatch')) {\n                    validationMessage = $(this).data('pattern-mismatch');\n                } else if ((this.validity.rangeOverflow || this.validity.rangeUnderflow)\n                    && $(this).data('range-error')) {\n                    validationMessage = $(this).data('range-error');\n                } else if ((this.validity.tooLong || this.validity.tooShort)\n                    && $(this).data('range-error')) {\n                    validationMessage = $(this).data('range-error');\n                } else if (this.validity.valueMissing && this.form.getAttribute('data-missing-value')) {\n                    validationMessage = this.form.getAttribute('data-missing-value');\n                } else if (this.validity.valueMissing && $(this).data('missing-error')) {\n                    validationMessage = $(this).data('missing-error');\n                }\n                $(this).parents('.form-group').find('.invalid-feedback').text(validationMessage);\n            }\n        });\n        //celle du haut ne fonctionne pas dans tout les cas, celle ci non plus (les deux sont necessaire)\n        \n        $('body').on('invalid','form input, form select, form textarea', function (e) {\n            e.preventDefault();\n            this.setCustomValidity('');\n            if (!this.validity.valid) {\n                var val
18idationMessage = this.validationMessage;\n                $(this).addClass('is-invalid');\n                if (this.validity.badInput && $(this).data('bad-input')) {\n                    validationMessage = $(this).data('bad-input');\n                } else if (this.validity.patternMismatch && $(this).data('pattern-mismatch')) {\n                    validationMessage = $(this).data('pattern-mismatch');\n                    $(this).addClass('is-invalid');\n                } else if ((this.validity.rangeOverflow || this.validity.rangeUnderflow)\n                    && $(this).data('range-error')) {\n                    validationMessage = $(this).data('range-error');\n                    $(this).addClass('is-invalid');\n                } else if ((this.validity.tooLong || this.validity.tooShort)\n                    && $(this).data('range-error')) {\n                    validationMessage = $(this).data('range-error');\n                    $(this).addClass('is-invalid');\n                } else if (this.validity.valueMissing && this.form.getAttribute('data-missing-value')) {\n                    validationMessage = this.form.getAttribute('data-missing-value');\n                } else if (this.validity.valueMissing && $(this).data('missing-error')) {\n                    validationMessage = $(this).data('missing-error');\n                    $(this).addClass('is-invalid');\n                }\n                $(this).parents('.form-group').find('.invalid-feedback').text(validationMessage);\n            }\n        });\n    },\n\n    submit: function () {\n        $('body').on('submit', 'form', function (e) {\n            if(!this.classList.contains('ocs-form')){\n                return validateForm.call(this, e);\n            }\n        });\n    },\n\n    buttonClick: function () {\n        $('body').on('click','form button[type=\"submit\"], form input[type=\"submit\"]', function () {\n            // clear all errors when trying to submit the form\n            if(!this.classList.contains('ocs-form')){\n                clearForm($(this).parents('form'));\n                radioButtonsGroupCheck();\n            }\n        });\n    },\n\n    functions: {\n        validateForm: function (form, event) {\n            if(!$(form).hasClass('ocs-form')){\n                validateForm.call($(form), event || null);\n            }\n        },\n        clearForm: clearForm,\n        radioButtonsGroupCheck: radioButtonsGroupCheck\n    }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/components/clientSideValidation.js?")},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js":function(module,exports,__webpack_require__){"use strict";eval("\n// set all GTM events here\nvar GTMHelper = __webpack_require__(/*! ./gtm/GTMHelper.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar processInclude = __webpack_require__(/*! ./util */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js\");\nprocessInclude(__webpack_require__(/*! ./gtm/pwa-analytics.js */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js\"));\n\nvar gtm = {};\nvar $cache = {};\n\nfunction initializeCache() {\n    $cache.document = $(document);\n}\n\nfunction isDatalayerDefined() {\n    return typeof dataLayer !== 'undefined';\n}\n\nfunction removeDataLayer (event, template) {\n    if (!isDatalayerDefined()) {\n        return;\n    }\n    if (event) {\n        var index = null;\n        for (var i = 0; i < dataLayer.length && index == null; i++) {\n            if (template != null) {\n                if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n                    index = i;\n            } else {\n                if (dataLayer[i].event === event)\n                    index = i;\n            }\n        }\n        if (index != null)\n            dataLayer.splice(index, 1);\n    }\n}\n\nfunction findDataLayer (event, template) {\n    if (!isDatalayerDefined()) {\n        return;\n    }\n    if (event) {\n        for (var i = 0; i < dataLayer.length; i++) {\n            if (template != null) {\n                if (dataLayer[i].event === event && dataLayer[i].layer.template === template)\n                    return (dataLayer[i]);\n            } else {\n                if (dataLayer[i].event === event)\n                    return (dataLayer[i]);\n            }\n        }\n    }\n    return null;\n}\n\nfunction fillDataLayer (data){\n\tif (!isDatalayerDefined()) {\n        return;\n    }\n\n    if (data)\n        dataLayer.push(data);\n    // dataLayer.push({\n    //     \"event\": data.event,\n    //     \"page\": data.page,\n    //     \"eeAction\": data.eeAction,\n    //     \"currencyCode\": data.currency,\n    //     \"checkoutStep\": data.checkoutStep,\n    //     \"checkoutType\": data.checkoutType,\n    //     \"products\": data.products\n    // });\n    return;\n}\n\nfunction fillSecondaryDataLayer(data){\n\tif (!isDatalayerDefined()) {\n        return;\n    }\n\n\tdataLayer.push({\n\t\t\"event\": data.event2,\n\t\t\"checkoutStep\": data.prevcheckoutStep,\n\t\t\"checkoutOption\": data.checkoutOption\n\t});\n}\n\nfunction initializeEvents() {\n    $cache.document.on('paymentStepGTM', function(event, data) {\n    \tdata.event='virtualPageview';\n    \tdata.page='/payment';\n\t\tdata.checkoutStep='3';\n\t\tdata.prevcheckoutStep='2';\n\n\t\tfillDataLayer(data);\n    \tfillSecondaryDataLayer(data);\n\n        return;\n    });\n}\n\nfunction clicCrossSell_GTM($click) {\n    var title = '';\n    var $title = $click.closest('.product-carousel').siblings('.title');\n    if ($title.length === 0)\n        $title = $click.closest('#slot-pushproduct').find('.title-reco');\n    if ($title.length === 0) {\n        \n        $title = $click.closest('.container-reco').find('.swipper-title');\n    }\n    if ($title.length != 0) {\n       var calloutmsg = $title.data('calloutmsg');\n        var recommender = $title.data('recommender');\n        title = calloutmsg;\n        if (recommender)\n            title = title + '/' + recommender;\n    }\n    \n    var url = $click.data('gtm-url');\n    var pid = $click.data('pid');\n    $.ajax({\n        url: url,\n        data: {\n            pid: pid\n        },\n        async: false,\n        method: 'GET',\n        success: function (data) {\
18n            let GTMclicCrossSell = __webpack_require__(/*! ./gtm/util/actions/clicCrossSell */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js\");\n            GTMclicCrossSell.getDataLayerForAction({\n                product: data.product,\n                title: title\n            });\n        }\n    });\n}\n\nmodule.exports = {\n    fillDataLayer : fillDataLayer,\n    removeDataLayer : removeDataLayer,\n    findDataLayer: findDataLayer,\n    init : function() {\n        initializeCache();\n        initializeEvents();\n        $cache.document.trigger('GTMReady');\n\n        $(document).on('click', '.slotReco .clickproduct', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.slotReco .product-tile .tile-body .pdp-link .link', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.slotReco .product-tile .tile-body .color-swatches', function(){\n            clicCrossSell_GTM($(this));\n        });\n        $(document).on('click', '.container-reco .clickproduct', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.container-reco .product-tile .tile-body .pdp-link .link', function(){\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.container-reco .product-tile .tile-body .color-swatches', function(){\n            clicCrossSell_GTM($(this));\n        });\n       \n        // Reco dans le mini-panier\n        $(document).on('click', '.js-minicart-body .clickproduct', function () {\n            clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.js-minicart-body .product-tile .tile-body .pdp-link .link', function () {\n        clicCrossSell_GTM($(this));\n        });\n\n        $(document).on('click', '.js-minicart-body .product-tile .tile-body .color-swatches', function () {\n        clicCrossSell_GTM($(this));\n        });\n    }\n}\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js?")},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js":function(module,exports){eval('getProductJsonBase = function (Product, price, quantity, addToCartOrigin) {\n    if (Product.price) {\n        var discount = Product.price.list ? Product.price.list.value : price\n        discount = discount - price;\n        if (discount != 0)\n            discount = Math.round(discount * 100) / 100;\n    }\n    var rc = null;\n    var rct = null;\n    var rct_sku = \'\';\n    if (Product.productType == \'variationGroup\') {\n        rc = Product.id.toLowerCase();\n        rct_sku = \'\';\n        //not for layer\n    } else if (Product.productType == \'variant\') {\n        rct = Product.id.toLowerCase();\n        rct_sku = Product.rctSku ? Product.rctSku : \'\';\n        if (Product.variationGroupID) {\n            rc = Product.variationGroupID;\n        }\n    }\n    \n    let r = Product.masterID || Product.id;\n    let name = Product.productName ? Product.productName.toLowerCase() : "";\n    let category = Product.primaryCategory && Product.primaryCategory.category ? Product.primaryCategory.category.toLowerCase() : null;\n    let subCategory = Product.primaryCategory && Product.primaryCategory.subCategory ? Product.primaryCategory.subCategory.toLowerCase() : null;\n    let subsubCategory = Product.primaryCategory && Product.primaryCategory.subSubCategory ? Product.primaryCategory.subSubCategory.toLowerCase() : null;\n    let subsubsubCategory = Product.primaryCategory && Product.primaryCategory.subSubSubCategory ? Product.primaryCategory.subSubSubCategory.toLowerCase() : null;\n    let categoryName = Product.primaryCategory && Product.primaryCategory.categoryname ? Product.primaryCategory.categoryname.toLowerCase() : null;\n    let subCategoryName = Product.primaryCategory && Product.primaryCategory.subCategoryname ? Product.primaryCategory.subCategoryname.toLowerCase() : null;\n    let subsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubCategoryname ? Product.primaryCategory.subSubCategoryname.toLowerCase() : null;\n    let subsubsubCategoryName = Product.primaryCategory && Product.primaryCategory.subSubSubCategoryname ? Product.primaryCategory.subSubSubCategoryname.toLowerCase() : null;\n    let gender = Product.sexe ? Product.sexe.toLowerCase() : "";\n    let season = Product.season ? Product.season.toLowerCase() : "";\n    let price_flag = Product.flagsPromo && Product.flagsPromo.flagPromoName ? Product.flagsPromo.flagPromoName.toLowerCase() : "";\n    let product_flag = [];\n    let productset_id;\n    let productset_products_number;\n\n    \n    if (Product.flagsPromo && Product.flagsPromo.tabOfFlags && Product.flagsPromo.tabOfFlags.length > 0) {\n        for (var i = 0; i < Product.flagsPromo.tabOfFlags.length; i++) {\n            product_flag.push(Product.flagsPromo.tabOfFlags[i].name.toLowerCase());\n        }\n    }\n\n    var flagNewName;\n    if (Product.flagsPromo && Product.flagsPromo.flagNewName) {\n        flagNewName = Product.flagsPromo.flagNewName;\n    }\n\n    let brand = Product.brand ? Product.brand.toLowerCase() : "";\n    let rating = Product.rating;\n\n    let price_calcul = price;\n    if (Product.productType !== \'set\') {\n        if (Product.price.type != undefined && Product.price.type == "range") {\n            price_calcul = Product.price.max.sales.values;\n        } else {\n            price_calcul = Product.price.sales.value;\n        }\n    }\n\n    let unitpriceAti = price_calcul;\n    let brandName = Product.brandName ? Product.brandName.toLowerCase() : "";\n    let brandTitle = Product.brandTitle ? Product.brandTitle.toLowerCase() : "";\n\n    let productJson = {\n        "r": r,\n        "rc": rc,\n        "rct": rct,\n        "rct_sku": rct_sku,\n        "name": name,\n        "category": category,\n        "subCategory": subCategory,\n        "subsubCategory": subsubCategory,\n        "subsubsubCategory": subsubsubCategory,\n        "category_label": categoryName,\n        "subCategory_label": subCategoryName,\n        "subsubCategory_label": subsubCategoryName,\n        "subsubsubCategory_label": subsubsubCategoryName,\n        "gender": gender,\n        "season": season,\n        "price_flag": price_flag,\n        "product_flag": product_flag,\n        "new_flag": flagNewName,\n        "brand": brand,\n        "brandName": brandName,\n        "brandTitle": brandTitle,\n        "rating": rating,\n        "unitpriceAti": unitpriceAti,\n        "discountAti": discount,\n        "hasVideo": !!(Product.brightcoveVideos),\n        "imageNumber": Product.images && Product.images.large ? Product.images.large.length : 0\n    };\n\n    if (Product.productType == \'set\') {\n        productJson.productset_id = Product.id;\n        productJson.productset_products_number = Product.individualProducts.length;\n    }\n\n    if (quantity) {\n        productJson.quantity = quantity;\n    }\n    \n    if(addToCartOrigin){\n        productJson.addToCartOrigin = addToCartOrigin;\n    }\n\n    return productJson;\n},\n\n    module.exports = {\n        populateProduct: function (productLineItems, addQuantity, addToCartOrigin) {\n            // Prepare default value\n            addQuantity = addQuantity || false;\n            for (let i in productLineItems) {\n                let item = productLineItems[i].product;\n                //let price = item.basePrice ? item.basePrice.getValue() : item.price.sales.decimalPrice.value;\n                let price = null;\n\n                if (item.price != null) {\n                    if (item.price.sales != null) {\n                        if (item.price.sales.type == "range") {\n                            price = item.price.max.sales.values;\n                        } else {\n                            price = item.price.sales.value;\n                        }\n                    }\n                }\n\n                let quantity = null;\n                if (addQuantity) {\n                    quantity = item.quantity || parseInt(addQuantity);\n                }\n                return (getProductJsonBase(item, price, quantity, addToCartOrigin));\n            }\n        },\n    }\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js?')},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n    pwaInstalled: function() {\n        window.addEventListener('appinstalled', function(evt) {\n            let GTMPWAInstalled = __webpack_require__(/*! ./util/actions/pwaInstalled */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js\");\n            GTMPWAInstalled.getDataLayerForAction();\n        });\n    },\n    usePWA: function() {\n        window.addEventListener('load', function () {\n\n            let displayMode = 'browser tab';\n\n            // Pour Safari sur IOs qui ne dispose pas de matchMedia\n            if (navigator.standalone) {\n                displayMode = 'standalone-ios';\n            }\n            \n            if (window.matchMedia('(display-mode: standalone)').matches) {\n                displayMode = 'standalone';\n            }\n\n            var hasPWA = displayMode.indexOf('standalone') != -1 ? 'yes' : 'no';\n            let GTMhasPWA = __webpack_require__(/*! ./util/pages/pwa */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js\");\n            GTMhasPWA.getDataLayerForPage({\n                hasPWA : hasPWA\n            });\n            \n        });\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/pwa-analytics.js?")},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\nvar GTMHelper = __webpack_require__(/*! ../../GTMHelper */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "clic cross-sell",\n        };\n\n        params = params || {};\n\n        data.e = [];\n\n        var product = [];\n        if (params.product){\n            product = (GTMHelper.populateProduct([{product : params.product}], false));\n        }\n        data.e={\n            category: \'cross-sell\',\n            action: params.title.trim(),\n            product: product\n        };\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/clicCrossSell.js?')},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js":function(module,exports,__webpack_require__){eval('var gtm = __webpack_require__(/*! ../../../gtm */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js");\n\nmodule.exports = {\n    populateData :  function (params) {\n        var data = {\n            "event": "pwa installed",\n        };\n\n        return data;\n    },\n    getDataLayerForAction : function(params) {\n        var data = this.populateData(params);\n        gtm.fillDataLayer(data);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/actions/pwaInstalled.js?')},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js":function(module,exports,__webpack_require__){eval("var GTMHelper = __webpack_require__(/*! ../../GTMHelper */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/GTMHelper.js\");\nvar gtm = __webpack_require__(/*! ../../../gtm */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm.js\");\n\npopulateData =  function (dataLayer, params) {\n    if (dataLayer.env)\n        dataLayer.env.hasPWA = params.hasPWA;\n}\n\nmodule.exports = {\n    removeDataLayer : function()\n    {\n        gtm.removeDataLayer('pageview');\n    },\n    findDataLayer : function()\n    {\n        return gtm.findDataLayer('pageview');\n    },\n    getDataLayerForPage : function(params) {\n        var dataLayer = this.findDataLayer();\n        if (dataLayer)\n            populateData(dataLayer, params);\n    }\n}\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/pages/pwa.js?")},
18"./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js":function(module,exports,__webpack_require__){"use strict";eval("\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\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js?")
vendor: 4 bytes, line 18
18}});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.