PageSourceSearch

https://www.b-z-b.com/fstrz/c1a25f67439100cfddd25359efd90454abc115…-%2Ffr_FR%2Fv1790857808157%2Fjs%2FuiShow.js

js b-z-b.com collected 2026-10-01 15:46:01 UTC 214,613 bytes, 14 lines download raw bytes

1/* creation date: Thu, 01 Oct 2026 15:30:30 GMT
2concat references:
3https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790857808157%2Fjs%2FproductTile.js
4https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790857808157%2Fjs%2Fhome.js
5https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790857808157%2Fjs%2FuiShow.js
6*/
7/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790857808157%2Fjs%2FproductTile.js */
8!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/productTile.js")}({
8"./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?")},
8"./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    }
8,\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?')},
8"./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?")},
8"./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?")},
8"./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) {\
8n            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?")},
8"./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?')},
8"./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?")},
8"./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
8Update.js?")},
8"./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?')},
8"./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?')},
8"./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?')},
8"./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?')},
8"./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?')},
8"./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?')},
8"./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?")},
8"./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?')},
8"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/quickview.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\';\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.product){\n            var product = [];\n            product = (GTMHelper.populateProduct([{product : params.product}], false));\n            data.layer.product = product;\n        }\n\n        data.cart = [];\n        data.cart={\n            id:params.cartId,\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/quickview.js?')},
8"./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?")},
8"./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?")},
8"./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\">
8' +\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();
8\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    }
8\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
8Update */ \"./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?")},
8"./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
8ontainer, 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
8ontainer.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}
8 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');
8\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;
8 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;
8 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        }
8else{\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}
8 $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
8ontainer, 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')) {\
8n        $('.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        }
8else{\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) {\
8n                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
8h( 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) {\
8n                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\">
8' +\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}
8\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;
8 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) {\
8n    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');
8\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            }
8else{\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');
8\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();
8\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');
8\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) {\
8n                        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) {\
8n                        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) {\
8n                    $.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?")},
8"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/quickView.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\");\n\n/**\n * Generates the modal window on the first call.\n *\n */\nfunction getModalHtmlElement() {\n    if ($('#quickViewModal').length !== 0) {\n        $('#quickViewModal').remove();\n    }\n    var htmlString = '\x3c!-- Modal --\x3e'\n        + '<div class=\"modal fade right\" id=\"quickViewModal\" 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 * @typedef {Object} QuickViewHtml\n * @property {string} body - Main Quick View body\n * @property {string} footer - Quick View footer content\n */\n\n/**\n * Parse HTML code in Ajax response\n *\n * @param {string} html - Rendered HTML from quickview template\n * @return {QuickViewHtml} - QuickView content components\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/**\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 */\nfunction fillModalElement(selectedValueUrl) {\n    $('#quickViewModal .modal-body').spinner().start();\n    var checkCart = $('.Cart-Show').length ? true : false;\n    $.ajax({\n        url: selectedValueUrl,\n        method: 'GET',\n        data: {checkCart:checkCart}
8,\n        success: function (data) {\n            let GTMquickview = __webpack_require__(/*! ../gtm/util/layers/quickview */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/quickview.js\");\n            \n            if($('.Cart-Show').length > 0) {\n                GTMquickview = __webpack_require__(/*! ../gtm/util/layers/quickViewCart */ \"./cartridges/app_coremodel_storefront/cartridge/client/default/js/gtm/util/layers/quickViewCart.js\");\n            }\n            ///////////////////////////////////////////////\n            var parsedHtml = parseHtml(data);\n            var productUrl = $(parsedHtml.body).data('url');\n            var quickViewFullDetailMsg = $(parsedHtml.body).data('quickViewFullDetailMsg');\n            var category = $(parsedHtml.body).data('category');\n            var subCategory = $(parsedHtml.body).data('subCategory');\n            var subSubCategory = $(parsedHtml.body).data('subSubCategory');\n\n            GTMquickview.getDataLayerForLayer({\n                product: $(parsedHtml.body).find('#obj-product').data('product'),\n                category: category,\n                subCategory: subCategory,\n                subSubCategory: subSubCategory,\n            });\n\n            $('#quickViewModal .modal-body').empty();\n            $('#quickViewModal .modal-body').html(parsedHtml.body);\n            $('#quickViewModal .modal-footer').html(parsedHtml.footer);\n            $('#quickViewModal .full-pdp-link').text(quickViewFullDetailMsg);\n            $('#quickViewModal .full-pdp-link').attr('href', productUrl);\n            $('#quickViewModal .product-link').attr('href', productUrl);\n            $('#quickViewModal .size-chart').attr('href', productUrl);\n            fillAvailabilitySlot();\n            $('#quickViewModal').modal('show');\n            $('.primary-images .carousel.slide.pointer-event .carousel-indicators li:first-child').click();\n            $.spinner().stop();\n            base.methods.selectVariantIfOnlyOne();\n            base.methods.selectLengthIfOnlyOne();\n        },\n        error: function (err) {\n            console.log(err);\n            $.spinner().stop();\n        }\n    });\n}\n\n/**\n * Génère un appel AJAX pour remplir la section slot availibily\n */\nfunction fillAvailabilitySlot() {\n    if ($('.js-pdp-availability').length > 0) {\n        var url = $('.js-pdp-availability').data('url');\n        $.ajax({\n            url: url,\n            method: 'get',\n            success: function (htmlProductSet) {\n                if ($('.js-pdp-availability')) {\n                    $('.js-pdp-availability').empty().html(htmlProductSet);\n                }\n            }\n        });\n    }\n}\n\nmodule.exports = {\n    showQuickview: function () {\n        $('body').on('click', '.quickview', function (e) {\n            e.preventDefault();\n\n            var selectedValueUrl = $(this).closest('.quickview').data('url');\n            $(e.target).trigger('quickview:show');\n            getModalHtmlElement();\n            fillModalElement(selectedValueUrl);\n        });\n    },\n\n    //exitRateBasket\n    showQuickviewTitleImg: function () {\n        $('body').on('click', '.exitRateBasket span.clickproduct, .product-set-quickview', function (e) {\n            e.preventDefault();\n            var selectedValueUrl = $(this).data('quickview-link');\n            $(e.target).trigger('quickview:show');\n            getModalHtmlElement();\n            fillModalElement(selectedValueUrl);\n        });\n    },\n\n    showQuickviewExitRateBasket: function () {\n        $('body').on('click', '.exitRateBasket .pdp-title-link', function (e) {\n            e.preventDefault();\n\n            var selectedValueUrl = $(this).closest('a.pdp-title-link').attr('data-quickview-link');\n            $(e.target).trigger('quickview:show');\n            getModalHtmlElement();\n            fillModalElement(selectedValueUrl);\n        });\n    },\n\n\n    closeQuickview: function() {\n        $(document).on('hidden.bs.modal', '#quickViewModal', function() {\
8n            // let GTMquickview = require('../gtm/util/layers/quickview');\n            // GTMquickview.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    changeImageNext: function (){\n        $(document).on('click','.carousel-control-next', function() {\n            $(this).closest(\".carousel\").carousel('next');\n\t\t});\n    },\n    changeImagePrev: function (){\n        $(document).on('click','.carousel-control-prev', function() {\n            $(this).closest(\".carousel\").carousel('prev');\n\t\t});\n    },\n    ratingAttribute: base.ratingAttribute,\n    colorAttribute: base.colorAttribute,\n    selectAttribute: base.selectAttribute,\n    removeBonusProduct: base.removeBonusProduct,\n    selectBonusProduct: base.selectBonusProduct,\n    enableBonusProductSelection: base.enableBonusProductSelection,\n    showMoreBonusProducts: base.showMoreBonusProducts,\n    addBonusProductsToCart: base.addBonusProductsToCart,\n    availability: base.availability,\n    addToCart: base.addToCart,\n    popImage: base.popImage,\n    attributeSelect: base.attributeSelect,\n    showSpinner: function () {\n        $('body').on('product:beforeAddToCart', function (e, data) {\n            $(data).closest('.modal-content').spinner().start();\n        });\n    },\n    hideDialog: function () {\n        $('body').on('product:afterAddToCart', function () {\n            $('#quickViewModal').modal('hide');\n        });\n    },\n    beforeUpdateAttribute: function () {\n        $('body').on('product:beforeAttributeSelect', function () {\n            $('.modal.show .modal-content').spinner().start();\n        });\n    },\n    updateAttribute: function () {\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)\n                    .find('.product-id').text(response.data.product.id);\n            } else if ($('.set-items').length) {\n                response.container.find('.product-id').text(response.data.product.id);\n            } else {\n                $('#quickViewModal .product-quickview').data('pid', response.data.product.id);\n                $('#quickViewModal .full-pdp-link')\n                    .attr('href', response.data.product.selectedProductUrl);\n            }\n            $('#quickViewModal .modal-content').spinner().stop();\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            // update global add to cart (single products, bundles)\n            var dialog = $(response.$productContainer)\n                .closest('.quick-view-dialog');\n\n            // $('.add-to-cart-global', dialog).attr('disabled',\n            //     !$('.global-availability', dialog).data('ready-to-order')\n            //     || !$('.global-availability', dialog).data('available')\n            // );\n        });\n    },\n    updateAvailability: function () {\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);
8\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    removeClassCarousel: function () {\n        $('.modal-content').addClass('red');\n    },\n    opensocloz: function () {\n        $(document).on('click', '.socloz', function (e) {\n            $('#quickViewModal').modal('hide');\n        });\n    }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/quickView.js?")},
8"./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/wishlistHeart.js":function(module,exports,__webpack_require__){"use strict";eval("\n\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} data - data returned from the server's ajax call\n * @param {Object} icon - icon that was clicked to add a product to the wishlist\n */\nfunction displayMessageAndChangeIcon(data, icon) {\n    $.spinner().stop();\n    var status;\n    if (data.success) {\n        status = 'success';\n        if (icon.hasClass('fa-heart-o')) {\n            icon.removeClass('fa-heart-o').addClass('fa-heart');\n        }\n    } else {\n        status = 'error';\n    }\n\n    displayNotification(document.querySelector('.ocs-notification[role=alert]'), status, data.msg);\n    \n    $.spinner().stop();\n}\n\nmodule.exports = {\n    addToWishlist: function () {\n        $('body').on('click', '.wishlistTile', function (e) {\n            e.preventDefault();\n            var icon = $(this).find($('i'));\n            var url = $(this).attr('href');\n            var pid = $(this).closest('.product').data('pid');\n            var optionId = $(this).closest('.product-detail').find('.product-option').attr('data-option-id');\n            var optionVal = $(this).closest('.product-detail').find('.options-select option:selected').attr('data-value-id');\n            optionId = optionId || null;\n            optionVal = optionVal || null;\n            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                }
8,\n                success: function (data) {\n                    displayMessageAndChangeIcon(data, icon);\n                },\n                error: function (err) {\n                    displayMessageAndChangeIcon(err, icon);\n                }\n            });\n        });\n    }\n};\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/wishlistHeart.js?")},
8"./cartridges/app_coremodel_storefront/cartridge/client/default/js/productTile.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar processInclude = __webpack_require__(/*! ./util */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js");\n\n$(document).ready(function () {\n    processInclude(__webpack_require__(/*! ./product/quickView */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/quickView.js"));\n    processInclude(__webpack_require__(/*! ./product/wishlistHeart */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/product/wishlistHeart.js"));\n});\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/productTile.js?')},
8"./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?")}});
9var __fstrzSep="";
10/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790857808157%2Fjs%2Fhome.js */
11!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/home.js")}({
11"./cartridges/app_coremodel_storefront/cartridge/client/default/js/home.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar processInclude = __webpack_require__(/*! ./util */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/util.js");\n\n$(document).ready(function () {\n    processInclude(__webpack_require__(/*! ./home/home */ "./cartridges/app_coremodel_storefront/cartridge/client/default/js/home/home.js"));\n});\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/home.js?')},
11"./cartridges/app_coremodel_storefront/cartridge/client/default/js/home/home.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = {\n    showResetPasswordModal: function () {\n        if ($('#js-showresetModalPassword').length > 0){\n            $(\"#requestPasswordResetModal\").modal('show');\n        }\n    }\n};\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/home/home.js?")},
11"./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?")}});
12var __fstrzSep="";
13/*! https%3A%2F%2Fwww.b-z-b.com%2Fon%2Fdemandware.static%2FSites-Bizzbee-SFRA-Site%2F-%2Ffr_FR%2Fv1790857808157%2Fjs%2FuiShow.js */
14!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/uiShow.js")}({
14"./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?")},
14"./cartridges/app_coremodel_storefront/cartridge/client/default/js/uiShow.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\");\n\nasync function checkOcsComponentsValidity(field) {\n        field.setCustomValidity('');\n        if (!field.validity.valid) {\n            checkOcsSpecificField(field, true)\n            return false;\n        }\n        return true;\n    }\n\nasync function checkOcsComponentsValidityForm(ocsForm) {\n    const formElements = ocsForm.elements;\n    let resultValidity = true;\n\n    for (const field of formElements) {\n        if (!await checkOcsComponentsValidity(field)) {\n            resultValidity = false;\n        }\n    }\n\n    return resultValidity;\n}\n\n$(document).ready(function() {\n    let ocsForm;\n    $('form.ocs-form').length !== 0 ? ocsForm =  $('form.ocs-form')[0] : false ;\n    $('form.ocs-form-core').length !== 0 ? ocsForm = $('form.ocs-form-core')[0] : false ;\n    if (ocsForm.length) {\n        let ocsFormSubmit;\n        ocsForm.querySelector('.ocs-button[type=submit]') !== null ? ocsFormSubmit = ocsForm.querySelector('.ocs-button[type=submit]') : ocsFormSubmit = ocsForm.querySelector('.ocs-core-button[type=submit]');\n        \n        $(ocsFormSubmit).on('click', async function(event) {\n            event.preventDefault(); // Prevent the default form submission\n            if (await checkOcsComponentsValidityForm(ocsForm)) {\n                $(ocsForm).submit();\n            }\n        });\n    }\n});\n\n$('.input-text.date').each(function (e) {\n    $(this).focus(function () {\n        $(this).attr('placeholder', 'JJ/MM/YYY');\n    }).blur(function () {\n        $(this).attr('placeholder', ' ');\n    });\n});\n\n$(\".show_hide_password a\").on('click keyup', function (event) {\n    event.preventDefault();\n    if (event.type === 'click' || (event.type === 'keyup' && event.key === \"Enter\")) {\n        if ($('.show_hide_password input').attr(\"type\") == \"text\") {\n            $('.show_hide_password input').attr('type', 'password');\n            $('.show_hide_password i').addClass(\"fa-eye\");\n            $('.show_hide_password i').removeClass(\"fa-eye-slash\");\n        } else if ($('.show_hide_password input').attr(\"type\") == \"password\") {\n            $('.show_hide_password input').attr('type', 'text');\n            $('.show_hide_password i').removeClass(\"fa-eye\");\n            $('.show_hide_password i').addClass(\"fa-eye-slash\");\n        }\n    }\n});\n\n/// Valid or not input\n$.fn.hasAttr = function (name) {\n    return this.attr(name) !== undefined;\n};\n\n$('.input-text.date').blur(function () {\n    if ($(this).is(\":valid\")) {\n        var max = new Date($(this).attr('max'));\n        if (max) {\n            var date = $(this).val();\n            var dateSplit = date.split(\"/\");\n            if (dateSplit.length === 3 &&\n                dateSplit[0] && dateSplit[1] && dateSplit[2]) {\n                var val = new Date(dateSplit[2], dateSplit[1] - 1, dateSplit[0]);\n                if (val < max) {\n                    $(this).addClass('valid');\n                    $(this).removeClass('is-invalid');\n                } else {\n                    $(this).addClass('is-invalid');\n                    $(this).removeClass('valid');\n                    var validationMessage = $(this).data('bad-input');\n                    $(this).parents('.form-group').find('.invalid-feedback')\n                        .text(validationMessage);\n                }\n            } else {\n                $(this).addClass('is-invalid');\n                $(this).removeClass('valid');\n                var validationMessage = $(this).data('bad-input');\n                $(this).parents('.form-group').find('.invalid-feedback')\n                    .text(validationMessage);\n            }\n        }\n    }\n});\n\n$(\"body\").on('blur', 'input, textarea, select', function (e) {\n    \n    if ($(this).attr('id') != 'registration-form-password-confirm') {\n        if ($(this).hasAttr('required') || $(this).val().length) {\n            if ($(this).hasClass('min-today')) {\n                \n                var stringDate = $(this).val();\n                var sliceDate = stringDate.split('/');\n                var date = new Date(sliceDate[2], sliceDate[1] - 1, sliceDate[0]);\n                var today = new Date();\n                var onlyDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n                var onlyTodayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n\n                if (!$(this).val().length || onlyDate < onlyTodayDate) {\n                    $(this).addClass('is-invalid');\n                    $(this).removeClass('valid');\n                    $(this).trigger('invalid');\n                    if ($(this).val().length) {\n                        $(this).parents('.form-group').find('.invali
14d-feedback').text($(this).data('error-date'));\n                    }\n                } else {\n                    $(this).addClass('valid');\n                    $(this).removeClass('is-invalid');\n                }\n            } else if ($(this).is(\":valid\") && !$(this).hasClass('date')) {\n                checkOcsSpecificField(e, false)\n                $(this).addClass('valid');\n                $(this).removeClass('is-invalid');\n            } else if ($(this).is(\":invalid\")) {\n                /* Only for OCS password input because we don't want to display error message on focus out for each other fields */\n                checkOcsSpecificField(e, true)\n                $(this).addClass('is-invalid');\n                $(this).removeClass('valid');\n                $(this).trigger('invalid');\n            }\n        } else {\n            checkOcsSpecificField(e, false)\n            $(this).removeClass('is-invalid');\n        }\n    }\n});\n\n$('input[type=radio].custom-control-input').on('change', function() {\n    if (this.closest('.form-check-radio') !== null) {\n        this.closest('.form-check-radio').querySelectorAll('input[type=radio].custom-control-input').forEach((radio) => radio.classList.remove('is-invalid'));\n        if (this.closest('.form-check-radio ').querySelector('.invalid-feedback') !== null) {\n            this.closest('.form-check-radio').querySelector('.invalid-feedback').classList.remove('d-block');\n        }\n    }\n})\n\n\n$(\"body\").on('blur', 'input.input-email', function(e) {\n    $(this)[0].value = $(this)[0].value.replace(/ /g, '');\n    var inputPattern = $(this).attr('pattern');\n    const regex = new RegExp(inputPattern);\n    if ($(this)[0].value) {\n        if (regex.test($(this)[0].value)){\n            checkOcsSpecificField(e, false);\n            $(this).addClass('valid');\n            $(this).removeClass('is-invalid');\n        } else {\n            checkOcsSpecificField(e, true);\n            $(this).addClass('is-invalid');\n            $(this).removeClass('valid');\n            var validationMessage = $(this).data('pattern-mismatch');\n            $(this).parents('.form-group').find('.invalid-feedback')\n                .text(validationMessage);\n        } \n    } else {\n        checkOcsSpecificField(e, true);\n    }\n})\n\nfunction checkOcsSpecificField(e, errorField) {\n\tlet currentField;\n    if (e.handleObj !== undefined) { /* It mean \"e\" is an event */\n        currentField = e.currentTarget;\n    } else {\n        currentField = e;\n    }\n\tif ((currentField.closest('.ocs-form') || currentField.closest('.ocs-form-core')) && (currentField.attributes.required !== undefined && currentField.attributes.required !== false || currentField.value.trim() !== \"\")) {\n\t\tlet ocsInput;\n        let ocsInputInput;\n        if (currentField.tagName !== 'TEXTAREA' && currentField.tagName !== 'SELECT' && currentField.type !== \"checkbox\") {\n            currentField.closest('.ocs-input') !== null ? ocsInput = currentField.closest('.ocs-input') : ocsInput = currentField.closest('.ocs-core-input');\n            ocsInputInput = ocsInput.querySelector('input');\n\n        }\n        else if (currentField.tagName == 'TEXTAREA') {\n            currentField.closest('.ocs-textarea') !== null ? ocsInput = currentField.closest('.ocs-textarea') : ocsInput = currentField.closest('.ocs-core-textarea');\n            ocsInputInput = currentField;\n        }else if (currentField.tagName == 'SELECT') {\n            currentField.closest('.ocs-select') !== null ? ocsInput = currentField.closest('.ocs-select') : ocsInput = currentField.closest('.ocs-core-input');\n            ocsInputInput = ocsInput.querySelector('select');\n        } else {\n            currentField.closest('.ocs-checkbox') !== null ? ocsInput = currentField.closest('.ocs-checkbox') : ocsInput = currentField.closest('.ocs-core-checkbox');\n            ocsInputInput = currentField;\n        }\n        if (ocsInput !== undefined && ocsInput !== null) {\n\t\t\tif (errorField == true) {\n\t\t\t\tocsInputInput.setCustomValidity('');\n                    let validationMessage;\n                    if (ocsInputInput.validity.badInput && ocsInputInput.getAttribute('data-bad-input') !== null) {\n                        validationMessage = ocsInputInput.getAttribute('data-bad-input');\n                    } else if (ocsInputInput.validity.patternMismatch && ocsInputInput.getAttribute('data-pattern-mismatch') !== null) {\n                        validationMessage = ocsInputInput.getAttribute('data-pattern-mismatch');\n                    } else if ((ocsInputInput.validity.rangeOverflow || ocsInputInput.validity.rangeUnderflow)\n                        && ocsInputInput.getAttribute('data-range-error') !== null) {\n                        validationMessage = ocsInputInput.getAttribute('data-range-error');\n                    } else if ((ocsInputInput.validity.tooLong || ocsInputInput.validity.tooShort)\n                        && ocsInputInput.getAttribute('data-range-error') !== null) {\n                        validationMessage = ocsInputInput.getAttribute('data-range-error');\n                    } else if (ocsInputInput.validity.valueMissing && $(ocsInputInput).data('data-missing-error') !== null) {\n                        validationMessage = ocsInputInput.getAttribute('data-missing-error');\n                    } else if (ocsInputInput.validity.typeMismatch && $(ocsInputInput).data('data-pattern-mismatch') !== null) {\n                        validationMessage = ocsInputInput.getAttribute('data-pattern-mismatch');\n                }\n                const hint = ocsInput.querySelectorAll('.hint');\n                if (hint !== null) {\n                    hint.forEach(function(ht) {\n                        ht.getAttribute('role') !== null ? ht.remove() : false;\n                    })\n                }\n                let ariaDescribedBy = \"\";\n                let ariaDescribedById = \" err_\"+currentField.id+\"\";\n\n                if (ocsInputInput.getAttribute('aria-describedby') !== null &&  ocsInput.querySelector('.help-text') !== null) {\n                    ariaDescribedBy = ocsInputInput.getAttribute('aria-describedby');\n                }\n                if (ocsInputInput.getAttribute('aria-describedby') == null || (ocsInputInput.getAttribute('aria-describedby') !== null && ocsInputInput.getAttribute('aria-describedby').indexOf('err_'+currentField.id+'') == -1)) {\n                    ariaDescribedBy += \" err_\"+currentField.id+\"\";\n                }\n                \n\t\t\t\tconst errorContainer = '<div class=\"hint\" role=\"alert\" id='+ariaDescribedById+'><p class=\"invalid-text\"><i class=\"ocs-icon danger alert-negative-default medium\" aria-hidden=\"true\"></i>'+validationMessage+'</p></div>';\n\t\t\t\tcurrentField.setAttribute('aria-invalid', 'true');\n\t\t\t\tcurrentField.setAttribute('aria-describedby', ariaDescribedBy);\n\t\t\t\tocsInput.classList.remove('valid');\n\t\t\t\tocsInput.classList.add('dirty', 'invalid');\n\t\t\t\tocsInput.insertAdjacentHTML(\"beforeend\", errorContainer);\n\t\t\t} else {\n                const hint = ocsInput.querySelectorAll('.hint');\n                if (hint !== null) {\n                    hint.forEach(function(ht) {\n                        ht.getAttribute('role') !== null ? ht.remove() : false;\n                    })\n                }\n                ocsInputInput.getAttribute('aria-describedby') !== null && ocsInputInput.getAttribute('aria-describedby').indexOf('err_'+currentField.id+'') !== -1 ? ocsInputInput.setAttribute('aria-describedby', ocsInputInput.getAttribute('aria-describedby').replace('err_'+currentField.id+'', '')) : false;\n\t\t\t\tcurrentField.setAttribute('aria-invalid', 'false');
14\n\t\t\t\tocsInput.classList.add('valid');\n\t\t\t\tocsInput.classList.remove('dirty', 'invalid');\n\t\t\t}\n\t\t}\n\t}\n}\n\n$('.form-group select').click(function () {\n    if ($(this).hasAttr('required')) {\n        if ($(this).is(\":valid\")) {\n            $(this).addClass('valid');\n            $(this).removeClass('is-invalid');\n        } else if ($(this).is(\":invalid\")) {\n            $(this).addClass('is-invalid');\n            $(this).removeClass('valid');\n        }\n    }\n});\n\n\n// $('.ocs-core-input select').change(function () {\n//     if ($(this).hasAttr('required')) {\n//         if ($(this).is(\":valid\")) {\n//             $(this).parents('.ocs-core-input').addClass('valid');\n//             $(this).parents('.ocs-core-input').removeClass('dirty invalid');\n//         } else if ($(this).is(\":invalid\")) {\n//             $(this).parents('.ocs-core-input').addClass('dirty invalid');\n//             $(this).parents('.ocs-core-input').removeClass('valid');\n//         }\n//     }\n// });\n\n/// search input\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// checkboxes check\n$(document).on(\"click\", \".custom-checkbox .custom-control-label\", function (e) {\n\n    e.preventDefault();\n    var $input = $(this).siblings(\".custom-checkbox .custom-control-input\");\n    if ($input.hasClass(\"ValidCGV\")) {\n        $('body').spinner().start();\n    }\n    if (!$input.attr('disabled')) {\n        $input.toggleClass('checked')\n        if ($input.attr('checked')) {\n            $input.removeAttr('checked');\n        } else {\n            $input.attr('checked', '');\n        }\n        if ($input.hasClass(\"ValidCGV\")) {\n            $(\"#js-CGV\").attr(\"value\", $input[0].checked);\n            $('body').spinner().stop();\n        }\n    }\n    $input.trigger('change');\n});\n\n// searchbar\nvar $searchinput = $(\".custom-search .input-text\");\nvar $searchinputReset = $(\".custom-search .reset-button\");\n\n$searchinputReset.click(function () {\n    $(this).siblings($searchinput).val('');\n    $(this).parent().addClass(\"icon-navigation-search\");\n});\n$searchinput.on('input', function () {\n    if ($searchinput.val() !== '') {\n        $(this).parent().removeClass(\"icon-navigation-search\");\n        $(this).siblings('.reset-button').show();\n    } else {\n        $(this).parent().addClass(\"icon-navigation-search\");\n        $(this).siblings('.reset-button').hide();\n    }\n});\n\n// auto generate <pre> for contenteditable=\"true\" text elements\nvar editableTexts = $(\"#texts [contenteditable=true]\");\n$('<pre></pre><a href=\"#\" class=\"js-copyToClipboard\">copy code</a>').insertAfter(editableTexts);\neditableTexts.on('DOMSubtreeModified', function () {\n    var elementCode = $(this).prop('outerHTML');\n    elementCode = elementCode.replace(' contenteditable=\"true\"', '');\n    $(this).siblings('pre').text(elementCode);\n});\neditableTexts.trigger('DOMSubtreeModified');\n\n// gender select\n\n$(document).find(\".gender.btn-group-toggle\").on('click', 'label', function () {\n    $(this).closest('.gender').find('label.btn').each(function( index ) {\n        $(this).removeClass('active');\n        var $inputGender = $(this).find('input');\n        if(typeof $inputGender != 'undefined'){\n            $inputGender.removeAttr('checked');\n        }\n        $(this).removeAttr('checked');\n    });\n    $(this).addClass(\"active\");\n    $(this).closest('label.btn-outline-primary').addClass(\"active\");\n    $(this).attr('checked', true);\n    $(this).find('input').attr('checked', true);\n});\n\n// hide message textarea validation\n/*\ndocument.addEventListener('invalid', (function () {\n    return function (e) {\n        e.preventDefault();\n        document.getElementById(\"contactForm-form-message\").focus();\n    };\n})(), true);\n*/\n\n\n// copy code to clipboard\n$('body').append('<input id=\"clipboard\" aria-label=\"clipboard\" value=\"\" style=\"position:absolute;top:-100%\" />')\n$('<a href=\"#\" class=\"js-copyToClipboard\">copy code</a>').insertAfter($('pre'));\nvar btnCopy = $('.js-copyToClipboard');\n\nbtnCopy.click(function () {\n    var toCopy = $(this).siblings('pre').text();\n    var $temp = $('#clipboard');\n    $temp.val(toCopy);\n    $temp.select();\n    document.execCommand('copy');\n    return false;\n});\n\n// custom dropdown with flag\n\n// set form values\n$('.dropbtn').each(function () {\n    $('#' + $(this).data('rel')).val($(this).data('code'));\n});\n\n// dropdown dynamics\n$(document).on('click', '.dropbtn', function (e) {\n    $(this).next('.dropdown-content').not('.dropdown-search .dropdown-content').toggleClass('d-none');\n});\n\n// select actions\n$(document).on('click', '.dropdown-content a, .dropdown-content .option-sort', function (e) {\n    e.preventDefault(); // avoid jump to top\n    var dropbtn = $(this).parent().prev('.dropbtn');\n    // get select datas\n    var countryValue = $(this).data('code');\n    var inputPattern = $(this).data('pattern');\n    var displayValue = $(this).find('.option').text();\n    var selectedValue = $(this).data('value');\n    var inputCaption = $(this).data('caption');\n    // get option datas\n    var relatedInput = dropbtn.data('rel');\n    var linkedInput = dropbtn.data('link');\n    // change selected index\n    dropbtn.trigger('click');\n    dropbtn.find('.value').not('.dropdown-search .value').text(displayValue);\n    dropbtn.find('i').removeClass().addClass('flag-icon flag-icon-' + countryValue);\n    // update current form\n    $('#' + relatedInput).val(selectedValue);\n    $('#' + linkedInput).attr('pattern', inputPattern);\n    $('#' + linkedInput).siblings('.caption').text(inputCaption);\n    dropbtn.find('.value').addClass('selected');\n    if ($('#prefixCountryCode-selected').length) {\n        $('#prefixCountryCode-selected').val(countryValue.toUpperCase());\n    }\n});\n\n// prefill an input hidden with the prefix country code to check the regex in back\n$(document).ready(function () {\n    let $prefixCountryCode = $('#prefixCountryCode-selected');\n\n    if ($prefixCountryCode && $prefixCountryCode.length) {\n\n        let dataCountryCode = $(\".ocs-option-card-label input:checked\").parents('.shipping-dropdown').find('.phoneCode').data('country-code');\n\n        if(dataCountryCode != null){\n            $prefixCountryCode.val(dataCountryCode.toUpperCase());\n        }\n    }\n});\n\n// closing custom dropdowns on outside click\n$(document).on('click', function (e) {\n    var container = $(\".dropbtn, .dropdown-content\");\n    if (!container.is(e.target) && container.has(e.target).length === 0) {\n        container.next('.dropdown-content').not('.dropdown-search .dropdown-content').addClass('d-none');\n    }\n});\n\n\n// auto focus on input invalid\n$('[type=\"submit\"]').on('click', function () {\n    let formValidation = $(this).closest('form');\n\n    //dont work for new DesignSystem\n    if(!formValidation.hasClass('ocs-form') || !formValidation.hasClass('ocs-form-core')){\n        if (formValidation.find(':invalid').first().offset()) {\n            if (!formValidation.hasClass('loginlayer')) {\n                $('html, body').animate({ scrollTop: $(this).closest('form').find(':invalid').first().offset().top - 80 }, 'slow');\n            }\n        }\n    }\n});\n\n// Hide Header on on scroll down\nvar didScroll;\nvar lastScrollTop = 0;\nvar delta = 5;\nvar navbarHeight = $(\".header\").outerHeight();\n$(document).scroll(function () {\n    var st = $(this).scrollTop();\n    // Make sure they scroll more than delta\n    if (Math.abs(lastScrollTop - st) <= delta)\n        return;\n\n    // If they scrolled down and are past the navbar, add class scrollUp.\n    // This is necessary so you never see what is \"behind\" the navbar.\n    if (st > lastScrollTop && st > navbarHeight) {\n        // Scroll Down\n        $('.header').removeClass('nav-down').addClass('scrollUp');\n        $('.refinement-bar').addClass('scrollUp');\n        $('.grid-header').addClass('scrollUp');\n    } else {\n        // Scroll Up\n        if (st + window.innerHeight < $(document).height()) {\n            $('.header').removeClass('scrollUp').addClass('nav-down');\n            $('.refinement-bar').removeClass('scrollUp');\n            $('.grid-header').removeClass('scrollUp');\n        }\n    }\n\n    $('.search-mobile').hasClass('show') ? ($('.header').addClass('nav-down'), $('.header').removeClass('scrollUp')) : false ;
14\n\n    lastScrollTop = st;\n    if(st > 0) {\n        $('.grid-header').addClass('scrolling');\n    }\n    else {\n        $('.grid-header').removeClass('scrolling');\n    }\n});\n\n// closing alert messages\n$(document).on('click', '.alert', function () {\n    $(this).css('animation', 'slide-show 2s reverse forwards');\n});\n\n$(document).on('keyup focus','.datefieldcustom', function (e) {\n    \n    let valeurContent = $(this).val();\n    let sizeContent = valeurContent.length;\n    let newValue = valeurContent;\n    let valuePrecedent = $(this).attr('data-precedent');\n\n    if(typeof valuePrecedent == 'undefined'){\n        valuePrecedent = \"\";\n    }\n    if(sizeContent == 2 || sizeContent == 5){\n        if(valuePrecedent.length<valeurContent.length){\n            newValue = valeurContent+'/';\n            $(this).val(newValue);\n        }\n    }\n\n    $(this).attr('data-precedent',newValue);\n});    \n\n$(document).on('keyup','.dateseparatefields', function (e) {\n    var key = e.which || e.keyCode;\n    if (key == 8) { //backspace\n        if (this.value.length == 0) {\n            $(this).closest(\".form-group\").prev('.form-group').find('.dateseparatefields').focus();\n        }\n    } else {\n        if (this.value.length > this.dataset.maxlen) { //maxlength\n            this.value = this.value.slice(0, this.maxLength);\n        }\n        if (this.value.length == this.dataset.maxlen) { //autofocus\n            $(this).closest(\".form-group\").next('.form-group').find('.dateseparatefields').focus();\n        }\n        concatenationBirthday();\n    }\n});\n\n$(document).on('change','.dateseparatefields', function (e) {\n    concatenationBirthday();\n});\n\nfunction concatenationBirthday() {\n    if($('#form-birthday').length > 0){\n        $(\"#form-birthday\").val( \n            $(\"#form-birthday-day\").val() + \"/\" +\n            $(\"#form-birthday-month\").val() + \"/\" +\n            $(\"#form-birthday-year\").val()\n        );\n    }\n\n    if($('#form-birthday-toggle').length > 0){\n        $(\"#form-birthday-toggle\").val( \n            $(\"#form-birthday-day-toggle\").val() + \"/\" +\n            $(\"#form-birthday-month-toggle\").val() + \"/\" +\n            $(\"#form-birthday-year-toggle\").val()\n        );\n    }\n}\n\n// responsive menu management\n$(window).resize( function() {\n    var divMobileMenu = $('div.isMobileMenu');\n\n    if ( $(window).width()+17 >= 1280 ) {\n        divMobileMenu.removeClass('mobile-menu').addClass('container-fluid d-flex');\n        if ( $('div.mega-menu').length == 0 ) {\n            divMobileMenu.wrap('<div class=\"mega-menu\"></div>');\n            $('div.slotCategory').addClass('d-xl-block');\n        }\n\n        if ( $('li.detached').length ) {\n            $('li[data-levels=true]').each( function() {\n                $(this).addClass('dropdown');\n                $(this).find('> a').addClass('dropdown-toggle').attr('data-toggle','dropdown');\n                var ulTarget = $(this).find('> ul');\n                ulTarget.removeClass('d-none');\n                $(this).nextUntil(':not(.detached)','.detached').removeClass('detached').detach().appendTo(ulTarget);\n            });\n        }\n    } else {\n        divMobileMenu.removeClass('container-fluid d-flex').addClass('mobile-menu');\n        if ( $('div.mega-menu').length ) {\n            $('div.slotCategory').removeClass('d-xl-block');\n            divMobileMenu.unwrap();\n        }\n\n        if ( $('li.detached').length == 0 ) {\n            $('li[data-levels=true]').each( function() {\n                $(this).removeClass('dropdown');\n                $(this).find('> a').removeClass('dropdown-toggle').removeAttr('data-toggle');\n                $(this).find('> ul').addClass('d-none');\n                $(this).find('> ul li').addClass('detached').detach().insertAfter($(this));\n            });\n        }\n    }\n}).resize();\n\n\nlet recoCount = 0;\nlet recoInterval = setInterval(recoResizePlp, 500);\n\nfunction recoResizePlp() {\n    recoCount += 1;\n    const ocsReco = document.querySelectorAll('.ocs-reco-fullpage');\n    const productGrid = document.querySelector('.product-grid');
14\n\n    if (ocsReco.length !== 0) {\n        ocsReco.forEach(function(reco) {\n            if (window.innerWidth > 1319 && productGrid !== null) {\n                reco.style.maxWidth= \"0\";\n                reco.style.maxWidth= productGrid.clientWidth + \"px\";\n            } else {\n                reco.style.maxWidth= \"none\";\n            }\n            if (window.innerWidth > 768) {\n                const swipperButtons = reco.querySelectorAll('.swiper-action .ocs-button, .swiper-action .ocs-core-button');\n                let swipperButtonsCount = 0;\n                let swipeActionDisplay = \"\";\n                swipperButtons.forEach(function (button) {\n                    button.classList.contains('swiper-button-disabled') ? swipperButtonsCount += 1 : false;\n                })\n\n                swipperButtonsCount == swipperButtons.length ? swipeActionDisplay = \"none\" : swipeActionDisplay = \"flex\";\n                reco.querySelector('.swiper-action') !== null ? reco.querySelector('.swiper-action').style.display = swipeActionDisplay : false;\n            }\n        })\n    }\n    recoCount > 5 ? clearInterval(recoInterval) : false;\n}\nrecoResizePlp();\nwindow.addEventListener('resize', recoResizePlp, false);\n\nwindow.lazySizesConfig = window.lazySizesConfig || {};\n\nwindow.lazySizesConfig.expand = 10; //default 360-500\nlazySizesConfig.expFactor = 1.5; //default: 1.7\n\n\n//$(\"img.lazy\").lazyload();\n\n\n//# sourceURL=webpack:///./cartridges/app_coremodel_storefront/cartridge/client/default/js/uiShow.js?")}
vendor: 3 bytes, line 14
14});

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.