{"version":3,"file":"analytics-index.min.js","sources":["analytics-index.min.js"],"sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar PageTypeMap = __webpack_require__(81);\n\n\tvar events = __webpack_require__(83);\n\tvar utils = __webpack_require__(84);\n\t__webpack_require__(85);\n\n\t//Global variable used by analytics\n\twindow['dataLayer'] = window['dataLayer'] || [];\n\twindow.bata_com_ns = window.bata_com_ns || {};\n\twindow.bata_com_ns.analytics = window.bata_com_ns.analytics || {};\n\n\t/**\n\t * @description launch the product (PDP) impression\n\t */\n\tfunction triggerProductsImpressions(pageType) {\n\t    var products;\n\t    var ga4Products;\n\t    if (pageType === 'product') {\n\t        products = utils.getProductDataPDP();\n\t        ga4Products = utils.ga4GetProducts(products);\n\t        var value = ga4Products && ga4Products.length > 0 ? ga4Products[0].price : 0;\n\t        utils.promoImpressionHelper();\n\t        events.ga4ViewItem(window.bata_com_ns.analytics.currency, ga4Products, parseFloat(value));\n\t    } else if (pageType === 'cart') {\n\t        products = utils.getProductsCartData(pageType);\n\t        ga4Products = utils.ga4GetProducts(products);\n\t        var cartPageData = utils.ga4GetCartData();\n\t        events.ga4ViewCart(window.bata_com_ns.analytics.currency, ga4Products, cartPageData.couponNames, parseFloat(cartPageData.value));\n\t    } else {\n\t        products = utils.getProductsData();\n\t        ga4Products = utils.ga4GetProducts(products);\n\t        // track GA4 product views only if not empty\n\t        if (ga4Products && ga4Products.length > 0) {\n\t            events.ga4ViewItemList(window.bata_com_ns.analytics.currency, ga4Products);\n\t        }\n\t    }\n\t    // track UA product views only if not empty\n\t    if (products && products.length > 0) {\n\t        events.trackProductImpression(window.bata_com_ns.analytics.currency, products);\n\t    }\n\t    utils.trackRecommendationsLists();\n\t}\n\n\t/**\n\t * @description get all the global information form the DOM, then eventually, lauch the various impressions\n\t */\n\tfunction pushPageData() {\n\t    var $user = $('#analytics-user');\n\t    var pageType = utils.getPageType();\n\t    var customerCrmId = $user.data('customerCrmId');\n\t    var customerEmail = $user.data('email');\n\t    var currency = $('#analyticsCurrencyCode').data('currency');\n\t    var countryCode = $('#analytics-countryCode').data('content');\n\n\t    // pageType should always be set at least to 'other'\n\t    pageType = pageType && pageType.length > 0 ? pageType : 'other';\n\n\t    //saves useful information in window object to improve the performances\n\t    window.bata_com_ns.analytics.currency = currency;\n\t    window.bata_com_ns.analytics.pageType = pageType;\n\t    window.bata_com_ns.analytics.country = countryCode;\n\n\t    window.bata_com_ns.abTests = {\n\t        callAbTestInteraction: utils.callAbTestInteraction\n\t    };\n\n\t    // businessHours event\n\t    events.businessHours(utils.getBusinessHours());\n\n\t    // abTests data pushing into the dataLayer\n\t    utils.callAbTestInteraction({ 'pageType': pageType });\n\n\t    //If the pageType is detected, track the page impression\n\t    if (pageType) {\n\t        events.pageImpression(customerCrmId, pageType, window.location.href, customerEmail);\n\t        var ga4CrmId = customerCrmId && customerCrmId !== 'guest' ? customerCrmId : null;\n\t        events.ga4PageView({\n\t            pageType: pageType,\n\t            pageURL: window.location.origin,\n\t            pagePath: window.location.pathname,\n\t            userID: ga4CrmId,\n\t            loginStatus: ga4CrmId ? 'loggedIn' : 'guest',\n\t            customerType: ga4CrmId ? 'loyal-cutomer' : '',\n\t            country: countryCode\n\t        });\n\t        utils.PageDesignerPromoImpressionHelper();\n\t    }\n\t    //if the pageType can contains products to track the impressions, trigger the event\n\t    if (PageTypeMap.PRODUCT_IMPRESSION_MAPPING[pageType]) {\n\t        triggerProductsImpressions(pageType);\n\t    }\n\t    //if it is a category or brand page, try to get search data\n\t    if (pageType === 'category' || pageType === 'brands') {\n\t        utils.searchHelper();\n\t    } else if (pageType === 'purchase') {\n\t        //if the user lands on purchase page, launch checkout events\n\t        utils.orderConfirmHelper();\n\t    }\n\n\t    // At cart page check for removed items due to unavailability\n\t    if (pageType === 'cart' && $('#unavailableProductsModal').length > 0) {\n\t        utils.removeFromCartByUnavailabilityModal();\n\t    }\n\t    window.dataLayer.push({ 'event': 'basicAppEventsInitialized' });\n\t}\n\n\t$(document).ready(function () {\n\t    pushPageData();\n\t});\n\n/***/ }),\n\n/***/ 81:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\t//link the information extracted from pdic.action (or other location) to the analytics pages\n\n\tvar pageMetaDataUtils = __webpack_require__(82);\n\n\tvar PAGE_MAPPING = pageMetaDataUtils.getPageMappingFromMetaDataElement('data-analytics-page-type-mapping');\n\n\t//specifies the pages where the event for addToCart needs further information\n\tvar CART_MAPPING = {\n\t    \"category\": \"category\",\n\t    \"wishlist\": \"wishlist view\",\n\t    \"product\": \"product detail page\"\n\t};\n\n\t//specifies the pages where the event for add/remove from wishlist needs further information\n\tvar WISHLIST_MAPPING = {\n\t    \"category\": \"catalog\",\n\t    \"wishlist\": \"wishlist page\",\n\t    \"product\": \"product detail page\"\n\t};\n\n\t//specifies in which pages products impression are tracked (the pages that can contain products)\n\tvar PRODUCT_IMPRESSION_MAPPING = {\n\t    \"account\": false,\n\t    \"billing\": false,\n\t    \"brands\": false,\n\t    \"cart\": true,\n\t    \"category\": true,\n\t    \"checkoutlogin\": false,\n\t    \"content\": false,\n\t    \"home\": true,\n\t    \"ordeConfirmation\": false,\n\t    \"product\": true,\n\t    \"shipping\": false,\n\t    \"wishlist\": true,\n\t    \"storelocator\": false\n\t};\n\n\tmodule.exports = {\n\t    PAGE_MAPPING: PAGE_MAPPING,\n\t    CART_MAPPING: CART_MAPPING,\n\t    WISHLIST_MAPPING: WISHLIST_MAPPING,\n\t    PRODUCT_IMPRESSION_MAPPING: PRODUCT_IMPRESSION_MAPPING\n\t};\n\n/***/ }),\n\n/***/ 82:\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\t//link the information extracted from pdic.action (or other location) to the analytics pages\n\n\tvar getOrSetPageMetaDataAttrElement = function getOrSetPageMetaDataAttrElement(dataAttrName, val) {\n\t    var metaData = document.getElementsByClassName('page-meta-data');\n\t    metaData = metaData && metaData.length > 0 ? metaData[0] : null;\n\n\t    if (!metaData) {\n\t        return null;\n\t    }\n\n\t    if (!dataAttrName) {\n\t        return null;\n\t    }\n\n\t    // get\n\t    if (typeof val === 'undefined') {\n\t        metaData = metaData.getAttribute(dataAttrName);\n\t    }\n\t    // set\n\t    else {\n\t            metaData.setAttribute(dataAttrName, val);\n\t        }\n\n\t    return metaData;\n\t};\n\n\tvar getPageMappingFromMetaDataElement = function getPageMappingFromMetaDataElement(dataAttrName) {\n\t    var metaData = getOrSetPageMetaDataAttrElement(dataAttrName);\n\t    var mapping;\n\t    if (metaData) {\n\t        try {\n\t            mapping = JSON.parse(metaData);\n\t            if (!mapping) {\n\t                // eslint-disable-next-line no-console\n\t                console.log('Error - there was an empty page meta data element on the page !!');\n\t            }\n\t        } catch (e) {\n\t            // eslint-disable-next-line no-console\n\t            console.log('Error - while parsing a JSON attribute of a page meta data !!');\n\t            // eslint-disable-next-line no-console\n\t            console.log(e);\n\t        }\n\t    } else {\n\t        // eslint-disable-next-line no-console\n\t        console.log('Error - there was a missing page meta data element on the page !!');\n\t    }\n\t    return mapping;\n\t};\n\n\tvar PAGE_MAPPING = getPageMappingFromMetaDataElement('data-page-type-mapping');\n\n\tmodule.exports = {\n\t    PAGE_MAPPING: PAGE_MAPPING,\n\t    getOrSetPageMetaDataAttrElement: getOrSetPageMetaDataAttrElement,\n\t    getPageMappingFromMetaDataElement: getPageMappingFromMetaDataElement\n\t};\n\n/***/ }),\n\n/***/ 83:\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\t/**\n\t * Send GA4 event to GTM\n\t * @param {Object} object GA4 data object\n\t */\n\tfunction ga4EventPush(object) {\n\t    if (!object || !object.event) {\n\t        return;\n\t    }\n\t    object.timestamp = Date.now();\n\n\t    // Clear the previous ecommerce object as suggested by google\n\t    window.dataLayer.push({ ecommerce: null });\n\t    // Send data to GTM\n\t    window.dataLayer.push(object);\n\t    // eslint-disable-next-line no-console\n\t    console.table(window.dataLayer);\n\t}\n\n\t/**\n\t * @description push in the data layer the impression of the page\n\t * @param visitorStatus {String} the status of the user: if it is logged is the customerID, guest if not\n\t * @param pageType {String} the type of the page, look at analytics-mapping for more information\n\t * @param url {String} the url of the page\n\t * @param userEmail {String} the user's email if logged, empty otherwhise\n\t */\n\tfunction pageImpression(visitorStatus, pageType, url, userEmail) {\n\t    window.dataLayer.push({\n\t        'event': 'basicPageData',\n\t        'visitorStatus': visitorStatus || 'guest',\n\t        'pageType': pageType,\n\t        'pageURL': url,\n\t        'email': userEmail || ''\n\t    });\n\t}\n\n\t/**\n\t * @description push in the data layer the business hours data\n\t * @param businessHours object is a json that should have a structure like that:\n\t * {'freshchat': {'on': { 'days': {'mo': '7-12, 12:30-17', 'tu': '8-16', ...}}, 'off': { 'days': [ '14.5', '24.12', '11.4:: 7-18' ] }}}\n\t */\n\tfunction businessHours(businessHours) {\n\t    if (businessHours) {\n\t        window.dataLayer.push({\n\t            'event': 'businessHours',\n\t            'businessHours': businessHours\n\t        });\n\t    }\n\t}\n\n\t/**\n\t * @description track the search data\n\t * @param isCategorySearch {Boolean} set true only if the user has landed on page by clicking a category\n\t * @param keyWord {String} the argoument of the search (could be the category name or the keyword inserted in the searchBar)\n\t * @param categoryID {String} the id of the category clicked (set null if it is not a category search)\n\t * @param numberOfResults {Int} the number of results (only if it is not a category search)\n\t */\n\tfunction search(isCategorySearch, keyWord, categoryID, numberOfResults) {\n\t    if (isCategorySearch) {\n\t        window.dataLayer.push({\n\t            'event': 'search',\n\t            'categoryID': categoryID,\n\t            'categoryName': keyWord,\n\t            'ecommerce': {\n\t                'search_term': keyWord\n\t            }\n\t        });\n\t    } else {\n\t        window.dataLayer.push({\n\t            'event': 'search',\n\t            'searchKeyword': keyWord,\n\t            'numberResults': numberOfResults,\n\t            'searchType': 'site search',\n\t            'ecommerce': {\n\t                'search_term': keyWord\n\t            }\n\t        });\n\t    }\n\t}\n\n\t/**\n\t * @description push in the data layer the impression of products\n\t * @param currencyCode {String} The unicode of the currency used\n\t * @param products {Object} contains collection of the products\n\t */\n\tfunction trackProductImpression(currencyCode, products) {\n\t    window.dataLayer.push({\n\t        'event': 'ecommerceTrack',\n\t        'ecommerce': {\n\t            'currencyCode': currencyCode,\n\t            'impressions': products\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * @description push in the data layer the product variant data\n\t * @param currencyCode {String} The currency code used\n\t * @param products {Object} contains collection products\n\t */\n\tfunction variantSelected(currencyCode, products) {\n\t    window.dataLayer.push({\n\t        'event': 'variantSelection',\n\t        'ecommerce': {\n\t            'currencyCode': currencyCode,\n\t            'impressions': products,\n\t            'detail': products\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * @description track the event addToCart\n\t * @param currencyCode {String} The currency code used\n\t * @param products {Object} contains collection products\n\t * @param pageType {String} the current page type, null if the function is invoked inside the PDP\n\t * @param customerEmail {String} the customer email if logged\n\t * @param customerPhone {String} the customer phone if logged\n\t * @param arTryonInfo {arTryonInfo} object with the tryon flags\n\t */\n\tfunction addToCart(currencyCode, products, pageType, customerEmail, customerPhone, arTryonInfo) {\n\t    var eventData = {\n\t        'event': 'addToCart',\n\t        'email': customerEmail,\n\t        'phone': customerPhone,\n\t        'ecommerce': {\n\t            'currencyCode': currencyCode,\n\t            'add': {\n\t                'products': products\n\t            }\n\t        }\n\t    };\n\n\t    //IN-AR TRY ON\n\t    if (arTryonInfo) {\n\t        eventData.tryOnDesktopClick = arTryonInfo.tryOnDesktopClick;\n\t        eventData.tryOnMobileRedirect = arTryonInfo.tryOnMobileRedirect;\n\t    }\n\n\t    if (pageType) {\n\t        eventData.ecommerce.actionField = {};\n\t        eventData.ecommerce.actionField.list = pageType;\n\t        eventData.ecommerce.actionField.action = 'add';\n\t    }\n\t    window.dataLayer.push(eventData);\n\t}\n\n\t/**\n\t * @description track the remove from cart\n\t * @param products {List} contains collection products\n\t */\n\tfunction removeFromCart(products) {\n\t    window.dataLayer.push({\n\t        'event': 'removeFromCart',\n\t        'ecommerce': {\n\t            'remove': {\n\t                'products': products\n\t            }\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * @description push into the datalayer the checkout step data\n\t * @param step {int} The checkout's step\n\t * @param option {String} checkout's information, based on the steps\n\t * @param products {List} the products in the basket during the checkout\n\t */\n\tfunction pushCheckoutData(step, option, products, customerEmail, customerPhone) {\n\t    if (step === 1 && customerEmail && customerPhone) {\n\t        window.dataLayer.push({\n\t            'event': 'ecommerceTrack',\n\t            'email': customerEmail,\n\t            'phone': customerPhone,\n\t            'ecommerce': {\n\t                'checkout': {\n\t                    'actionField': {\n\t                        'step': step,\n\t                        'option': option,\n\t                        'action': 'checkout'\n\t                    },\n\t                    'products': products\n\t                }\n\t            }\n\t        });\n\t    } else {\n\t        window.dataLayer.push({\n\t            'event': 'ecommerceTrack',\n\t            'ecommerce': {\n\t                'checkout': {\n\t                    'actionField': {\n\t                        'step': step,\n\t                        'option': option,\n\t                        'action': 'checkout'\n\t                    },\n\t                    'products': products\n\t                }\n\t            }\n\t        });\n\t    }\n\t}\n\n\t/**\n\t * @description the standalone event for purchase, is launched always with the sixth checkout's step\n\t * @param purchaseData {Object} Purchase data:\n\t * id {String} the id of the order\n\t * revenue {Number} the revenue of the order\n\t * tax {Number} the tax total\n\t * shipping {Number} the order shipping cost\n\t * coupon {String} the name of the order coupon\n\t * products {List} a list of all products purchased\n\t * customerEmail {String} the customer email\n\t * customerPhone {String} the customer phone\n\t * adjustedMerchandizeTotalNetPrice {Decimal} order total net price\n\t * adjustedMerchandizeTotalTax {Decimal} order total tax\n\t */\n\tfunction purchase(purchaseData) {\n\t    window.dataLayer.push({\n\t        'event': 'ecommerceTrack',\n\t        'email': purchaseData.customerEmail,\n\t        'phone': purchaseData.customerPhone,\n\t        'ecommerce': {\n\t            'purchase': {\n\t                'actionField': {\n\t                    'id': purchaseData.id,\n\t                    'affiliation': 'Bata',\n\t                    'revenue': purchaseData.revenue,\n\t                    'adjustedMerchandizeTotalNetPrice': purchaseData.adjustedMerchandizeTotalNetPrice,\n\t                    'adjustedMerchandizeTotalTax': purchaseData.adjustedMerchandizeTotalTax,\n\t                    'tax': purchaseData.tax,\n\t                    'shipping': purchaseData.shipping,\n\t                    'coupon': purchaseData.coupon.couponCodeName,\n\t                    'action': 'purchase'\n\t                },\n\t                'products': purchaseData.products\n\t            }\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * @description registration of new user into the Bata club\n\t * @param userId {String} the id of the user\n\t * @param accountType {String} the type of account used by the user, regular user as default value\n\t * @param socialNetwork {String} The social network used by the user to sign up, empty string as default value\n\t */\n\tfunction registration(userId, email, phone, accountType, socialNetwork) {\n\t    window.dataLayer.push({\n\t        'event': 'customerContact',\n\t        'customerID': userId,\n\t        'email': email,\n\t        'phone': phone,\n\t        'accountType': accountType || 'regular user',\n\t        'socialNetwork': socialNetwork || ''\n\t    });\n\t}\n\n\t/**\n\t * @description login user into the Bata club\n\t * @param userCrmId {String} the crm id of the user\n\t * @param accountType {String} the type of account used by the user, regular user as default value\n\t * @param socialNetwork {String} The social network used by the user to sign up, empty string as default value\n\t */\n\tfunction login(customerCrmId, email, accountType, socialNetwork) {\n\t    window.dataLayer.push({\n\t        'event': 'loggedIn',\n\t        'customerCrmId': customerCrmId,\n\t        'email': email,\n\t        'accountType': accountType || 'regular user',\n\t        'socialNetwork': socialNetwork || ''\n\t    });\n\t}\n\n\t/**\n\t * @description a product link is clicked from the user (exept from minicart)\n\t * @param currencyCode {String} The currency code used\n\t * @param pageType {String} the type of the page, look at analytics-mapping for more information\n\t * @param products {List} the list that contains the product clicked\n\t */\n\tfunction productClick(currencyCode, pageType, products) {\n\t    window.dataLayer.push({\n\t        'event': 'productClick',\n\t        'ecommerce': {\n\t            'currencyCode': currencyCode,\n\t            'click': {\n\t                'actionField': {\n\t                    'list': pageType,\n\t                    'action': 'click'\n\t                },\n\t                'products': products\n\t            }\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * @description register the impression of the promotions in PDP\n\t * @param promotions {List} A list of all the promotions displayed\n\t */\n\tfunction promoImpression(promotions) {\n\t    window.dataLayer.push({\n\t        'event': 'promoView',\n\t        'ecommerce': {\n\t            'promoView': {\n\t                'promotions': promotions\n\t            }\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * @description register the impression of a promotional banner\n\t */\n\tfunction PageDesignerPromoImpression(promotions) {\n\t    window.dataLayer.push({\n\t        'event': 'ecommerceTrack',\n\t        'ecommerce': {\n\t            'promoView': {\n\t                'promotions': promotions\n\t            }\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * @description register the click on a promotional banner\n\t */\n\tfunction PageDesignerPromoClick(promotions) {\n\t    window.dataLayer.push({\n\t        'event': 'promotionClick',\n\t        'ecommerce': {\n\t            'promoClick': {\n\t                'promotions': promotions\n\t            }\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * @description the generic GAevent, take a look into the official documentation to understand his scope\n\t */\n\tfunction trackGAEvent(category, action, label, eventValue, notInteraction) {\n\t    window.dataLayer.push({\n\t        'event': 'GAevent',\n\t        'eventCategory': category || '',\n\t        'eventAction': action || '',\n\t        'eventLabel': label || '',\n\t        'eventValue': eventValue || 0,\n\t        'eventNotInteraction': notInteraction || false\n\t    });\n\t}\n\n\t//\n\t// Google Analytics 4\n\n\t/**\n\t * GA4 add_payment_info event\n\t * @param {Object} checkoutData Checkout data\n\t * @param {Array.<Object>} items items Order items\n\t */\n\tfunction ga4AddPaymentInfo(checkoutData, items) {\n\t    ga4EventPush({\n\t        'event': 'add_payment_info',\n\t        'ecommerce': {\n\t            'currency': checkoutData.currency,\n\t            'payment_type': checkoutData.paymentType,\n\t            'coupon': checkoutData.coupon,\n\t            'payment_method_saved': checkoutData.paymentMethodSaved,\n\t            'value': checkoutData.value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 select_proceed_to_purchase\n\t * @param {Object} order  order data\n\t */\n\tfunction ga4SelectProceedPurchase(order) {\n\t    ga4EventPush({\n\t        'event': 'select_proceed_to_purchase',\n\t        'payment_type': order.defaultPaymentMethod,\n\t        'shipping_tier': order.shipping[0].selectedShippingMethod.displayName\n\t    });\n\t}\n\n\t/**\n\t * GA4 add_shipping_info event\n\t * @param {Object} checkoutData Checkout data\n\t * @param {Array.<Object>} items items Order items\n\t */\n\tfunction ga4AddShippingInfo(checkoutData, items) {\n\t    ga4EventPush({\n\t        'event': 'add_shipping_info',\n\t        'ecommerce': {\n\t            'currency': checkoutData.currency,\n\t            'shipping': checkoutData.shipping,\n\t            'shipping_tier': checkoutData.shippingTier,\n\t            'coupon': checkoutData.coupon,\n\t            'value': checkoutData.value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 add_to_cart event\n\t * @param {String} currencyCode Two-letters currency code\n\t * @param {Number} value Product price\n\t * @param {Array.<Object>} items Products\n\t */\n\tfunction ga4AddToCart(currencyCode, items, value) {\n\t    ga4EventPush({\n\t        'event': 'add_to_cart',\n\t        'ecommerce': {\n\t            'currency': currencyCode,\n\t            'value': value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 add_to_wishlist event\n\t * @param {String} currencyCode Two-letters currency code\n\t * @param {Number} value Product price\n\t * @param {Array.<Object>} items Products\n\t */\n\tfunction ga4AddToWishlist(currencyCode, items, value) {\n\t    ga4EventPush({\n\t        'event': 'add_to_wishlist',\n\t        'ecommerce': {\n\t            'currency': currencyCode,\n\t            'value': value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 remove_from_wishlist event\n\t * @param {String} currencyCode Two-letters currency code\n\t * @param {Number} value Product price\n\t * @param {Array.<Object>} items Products\n\t */\n\tfunction ga4RemoveFromWishlist(currencyCode, items, value) {\n\t    ga4EventPush({\n\t        'event': 'remove_from_wishlist',\n\t        'ecommerce': {\n\t            'currency': currencyCode,\n\t            'value': value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 begin_checkout event\n\t * @param {String} currencyCode Two-letters currency code\n\t * @param {String} coupon List of used order-level coupons separated by |\n\t * @param {Number} value Product price\n\t * @param {Array.<Object>} items Cart items\n\t */\n\tfunction ga4BeginCheckout(currencyCode, items, coupon, value) {\n\t    ga4EventPush({\n\t        'event': 'begin_checkout',\n\t        'ecommerce': {\n\t            'currency': currencyCode,\n\t            'coupon': coupon,\n\t            'value': value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 checkout_progress event\n\t * @param {Object} checkoutData Checkout data object\n\t * @param {Array.<Object>} items Cart items\n\t */\n\tfunction ga4CheckoutProgress(checkoutData, items) {\n\t    ga4EventPush({\n\t        'event': 'checkout_progress',\n\t        'step_label': checkoutData.stepLabel,\n\t        'step_number': checkoutData.stepNumber,\n\t        'ecommerce': {\n\t            'currency': checkoutData.currencyCode,\n\t            'coupon': checkoutData.coupon,\n\t            'value': checkoutData.value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 clear_search event\n\t */\n\tfunction ga4ClearSearch() {\n\t    ga4EventPush({ 'event': 'clear_search' });\n\t}\n\n\t/**\n\t * GA4 Save credit card information\n\t */\n\tfunction ga4SaveCreditCard() {\n\t    ga4EventPush({\n\t        'event': 'save_credit_card'\n\t    });\n\t}\n\n\t/**\n\t * GA4 login event\n\t * @param {Object} loginData Login data\n\t */\n\tfunction ga4Login(loginData) {\n\t    ga4EventPush({\n\t        'event': 'login',\n\t        'method': loginData.method,\n\t        'login_type': loginData.loginType,\n\t        'ecommerce': {\n\t            'customerCrmId': loginData.customerCrmId\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 purchase event\n\t * @param {Object} purchaseData Purchase related data\n\t * @param {Array.<Object>} items Order items\n\t */\n\tfunction ga4Purchase(purchaseData, items) {\n\t    ga4EventPush({\n\t        'event': 'purchase',\n\t        'ecommerce': {\n\t            'currency': purchaseData.currency,\n\t            'payment_type': purchaseData.paymentType,\n\t            'shipping': purchaseData.shipping,\n\t            'shipping_tier': purchaseData.shippingTier,\n\t            'tax': purchaseData.tax,\n\t            'transaction_id': purchaseData.transactionId,\n\t            'coupon': purchaseData.coupon,\n\t            'value': purchaseData.value,\n\t            'adjustedMerchandizeTotalNetPrice': purchaseData.adjustedMerchandizeTotalNetPrice,\n\t            'adjustedMerchandizeTotalTax': purchaseData.adjustedMerchandizeTotalTax,\n\t            'bata_store': purchaseData.bataStore,\n\t            'cart_id': purchaseData.cartId,\n\t            'transaction_type': purchaseData.transactionType,\n\t            'email': purchaseData.email,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 remove_from_cart event\n\t * @param {String} currencyCode Two-letters currency code\n\t * @param {Number} value Product price\n\t * @param {Array.<Object>} items Cart items\n\t */\n\tfunction ga4RemoveFromCart(currencyCode, items, value) {\n\t    ga4EventPush({\n\t        'event': 'remove_from_cart',\n\t        'ecommerce': {\n\t            'currency': currencyCode,\n\t            'value': value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 select_item event\n\t * @param {String} currencyCode Two-letters currency code\n\t * @param {Array.<Object>} items Products\n\t */\n\tfunction ga4SelectItem(currencyCode, items) {\n\t    ga4EventPush({\n\t        'event': 'select_item',\n\t        'ecommerce': {\n\t            'currency': currencyCode,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 select_colour event\n\t */\n\tfunction ga4SelectColor(id, variant) {\n\t    ga4EventPush({\n\t        'event': 'select_color',\n\t        'item_id': id,\n\t        'item_variant': variant ? variant.toString() : \"\"\n\t    });\n\t}\n\n\t/**\n\t * GA4 select_size event\n\t */\n\tfunction ga4SelectSize(id, variant) {\n\t    ga4EventPush({\n\t        'event': 'select_size',\n\t        'item_id': id,\n\t        'item_variant': variant ? variant.toString() : \"\"\n\t    });\n\t}\n\n\t/**\n\t * GA4 select_size_guide event\n\t */\n\tfunction ga4SelectSizeGuide() {\n\t    window.dataLayer.push({ 'event': 'select_size_guide' });\n\t}\n\n\t/**\n\t * GA4 select_content event\n\t * @param {Object} contentData Content related data\n\t */\n\tfunction ga4SelectContent(contentData) {\n\t    ga4EventPush({\n\t        'event': 'select_content',\n\t        'content_id': contentData.contentId,\n\t        'content_type': contentData.contentType,\n\t        'content_name': contentData.contentName\n\t    });\n\t}\n\n\t/**\n\t * GA4 select_promotion event\n\t * @param {Object} promotionData promotion related data\n\t */\n\tfunction ga4SelectPromotion(promotionData) {\n\t    ga4EventPush({\n\t        'event': 'select_promotion',\n\t        'promotion_id': promotionData.promotionId,\n\t        'promotion_name': promotionData.promotionName,\n\t        'items': [{\n\t            'item_id': promotionData.promotionId,\n\t            'item_name': promotionData.promotionName\n\t        }]\n\t    });\n\t}\n\n\t/**\n\t * GA4 view_next_image_pdp event\n\t */\n\tfunction ga4ViewNextImagePDP(imageData) {\n\t    ga4EventPush({\n\t        'event': 'view_next_image_pdp',\n\t        'item_id': imageData.itemId,\n\t        'item_variant': imageData.colorVariant\n\t    });\n\t}\n\n\t/**\n\t * GA4 select_size_wishlist event\n\t */\n\tfunction ga4SelectWishlist() {\n\t    window.dataLayer.push({ 'event': 'select_wishlist' });\n\t}\n\n\t/**\n\t * GA4 start search event\n\t */\n\tfunction ga4StartSearch() {\n\t    ga4EventPush({\n\t        'event': 'start_search'\n\t    });\n\t}\n\n\t/**\n\t * GA4 select_size_wishlist event\n\t */\n\tfunction ga4SearchProduct(searchData) {\n\t    ga4EventPush({\n\t        'event': 'search',\n\t        'search_term': searchData.searchTerm,\n\t        'search_type': searchData.searchType\n\t    });\n\t}\n\n\t/**\n\t * GA4 share event\n\t * @param {Object} shareData Product\n\t */\n\tfunction ga4Share(shareData) {\n\t    ga4EventPush({\n\t        'event': 'share',\n\t        'ecommerce': {\n\t            'method': shareData.method,\n\t            'content_type': shareData.contentType,\n\t            'item_id': shareData.itemId,\n\t            'element_id': shareData.elementId,\n\t            'element_text': shareData.elementText,\n\t            'link_url': shareData.linkUrl,\n\t            'link_domain': shareData.linkDomain,\n\t            'type': shareData.type\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 sign_up event\n\t * @param {Object} registrationData data\n\t */\n\tfunction ga4SignUp(registrationData) {\n\t    ga4EventPush({\n\t        'event': 'sign_up',\n\t        'signup_form_type': registrationData.signupType,\n\t        'ecommerce': {\n\t            'customerCrmId': registrationData.customerCrmId\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 sign_up event in checkout\n\t * @param {Object} registrationData data\n\t */\n\tfunction ga4SignUpCheckout(registrationData) {\n\t    ga4EventPush({\n\t        'event': 'sign_up',\n\t        'signup_form_type': registrationData.signupType\n\t    });\n\t}\n\n\t/**\n\t * GA4 view_cart event\n\t * @param {String} currencyCode Two-letters currency code\n\t * @param {String} coupon List of used order-level coupons separated by |\n\t * @param {Number} value Product price\n\t * @param {Array.<Object>} items Cart items\n\t */\n\tfunction ga4ViewCart(currencyCode, items, coupon, value) {\n\t    ga4EventPush({\n\t        'event': 'view_cart',\n\t        'ecommerce': {\n\t            'currency': currencyCode,\n\t            'coupon': coupon,\n\t            'value': value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 view_item event\n\t * @param {String} currencyCode Two-letters currency code\n\t * @param {Array.<Object>} items Products\n\t */\n\tfunction ga4ViewItem(currencyCode, items, value) {\n\t    ga4EventPush({\n\t        'event': 'view_item',\n\t        'ecommerce': {\n\t            'currency': currencyCode,\n\t            'value': value,\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 view_item_list event\n\t * @param {String} currencyCode Two-letters currency code\n\t * @param {Array.<Object>} items Products\n\t */\n\tfunction ga4ViewItemList(currencyCode, items) {\n\t    ga4EventPush({\n\t        'event': 'view_item_list',\n\t        'ecommerce': {\n\t            'currency': currencyCode,\n\t            'items': items,\n\t            \"results_number\": items.length\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 view_promotion event\n\t * @param {Array.<Object>} items Products\n\t */\n\tfunction ga4ViewPromotion(items) {\n\t    ga4EventPush({\n\t        'event': 'view_promotion',\n\t        'ecommerce': {\n\t            'items': items\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * GA4 page_view event\n\t * @param {Object} pageData Page data\n\t */\n\tfunction ga4PageView(pageData) {\n\t    ga4EventPush({\n\t        'event': 'page_view_ga4',\n\t        'page_type': pageData.pageType,\n\t        'page_url': pageData.pageURL,\n\t        'page_path': pageData.pagePath,\n\t        'user_id': pageData.userID,\n\t        'login_status': pageData.loginStatus,\n\t        'customer_type': pageData.customerType,\n\t        'country': pageData.country\n\t    });\n\t}\n\n\t/**\n\t * GA4 click_menu_nav event\n\t * @param {Number} menuLevel Menu level\n\t * @param {String} menuSelection Selected menu item name\n\t */\n\tfunction ga4ClickMenuNav(menuLevel, menuSelection) {\n\t    ga4EventPush({\n\t        'event': 'click_menu_nav',\n\t        'menu_level': menuLevel,\n\t        'menu_selection': menuSelection\n\t    });\n\t}\n\n\t/**\n\t * GA4 click_filter event\n\t * @param {String} filterCategory Input type (Checkbox or Slider or ...)\n\t * @param {String} filterName Filter name\n\t * @param {String} filterValue Filter selected value\n\t */\n\tfunction ga4ClickFilter(filterCategory, filterName, filterValue) {\n\t    ga4EventPush({\n\t        'event': 'click_filter',\n\t        'filter_category': filterCategory,\n\t        'filter_name': filterName,\n\t        'filter_value': filterValue\n\t    });\n\t}\n\n\t/**\n\t * GA4 scroll event\n\t * @param {Number} percent Screen scrolled in percent\n\t */\n\tfunction ga4Scroll(percent) {\n\t    ga4EventPush({\n\t        'event': 'scroll',\n\t        'percent': percent\n\t    });\n\t}\n\n\t/**\n\t * GA4 subscribe event\n\t * @param {String} subscription_type  Subscription type (newsletter)\n\t */\n\tfunction ga4Subscribe(subscriptionType) {\n\t    ga4EventPush({\n\t        'event': 'subscribe',\n\t        'subscription_type ': subscriptionType\n\t    });\n\t}\n\n\t/**\n\t * GA4 open_pdp_image event\n\t */\n\tfunction ga4OpenPdpImage() {\n\t    ga4EventPush({ 'event': 'open_pdp_image' });\n\t}\n\n\tfunction ga4SuccessfulSearch(searchData) {\n\t    ga4EventPush({\n\t        'event': 'successful_search',\n\t        'results_number': searchData.resultsNumber,\n\t        'search_method': searchData.searchMethod,\n\t        'search_term': searchData.searchTerm\n\t    });\n\t}\n\n\tfunction ga4UnsuccessfulSearch(searchData) {\n\t    ga4EventPush({\n\t        'event': 'unsuccessful_search',\n\t        'results_number': searchData.resultsNumber,\n\t        'search_method': searchData.searchMethod,\n\t        'search_term': searchData.searchTerm\n\t    });\n\t}\n\n\tfunction ga4ClickBackInStock(clickBackInStockData) {\n\t    ga4EventPush({\n\t        'event': 'click_email',\n\t        'element_id': clickBackInStockData.elementId,\n\t        'element_text': clickBackInStockData.elementText,\n\t        'link_url': clickBackInStockData.linkUrl\n\t    });\n\t}\n\n\tfunction ga4SelectBrandName(brandData) {\n\t    ga4EventPush({\n\t        'event': 'select_brand_name',\n\t        'page_type': 'product',\n\t        'page_url': brandData.pageUrl,\n\t        'button_position': brandData.buttonPosition\n\t    });\n\t}\n\n\tfunction ga4BrandSelectContent(selectContentData) {\n\t    ga4EventPush({\n\t        'event': 'select_content',\n\t        'content_id': selectContentData.contentId,\n\t        'content_type': selectContentData.contentType,\n\t        'content_name': selectContentData.contentName\n\t    });\n\t}\n\t// End of Google Analytics 4\n\n\tfunction ga4BrandSecondCategoryLevel(eventData) {\n\t    ga4EventPush({\n\t        'event': 'click_menu_nav',\n\t        'menu_level': eventData.menuLevel,\n\t        'menu_selection': eventData.menuSelection\n\t    });\n\t}\n\n\t// End of Google Analytics 4\n\n\t/**\n\t * AB testing interaction dataLayer event\n\t * @param {Array} array of AB tests (from abTests)\n\t */\n\tfunction abTestInteraction(list, pageType) {\n\t    if (!list) {\n\t        return;\n\t    }\n\n\t    list.forEach(function (item) {\n\t        window.dataLayer.push({\n\t            event: 'abTestInteraction',\n\t            page_type: pageType && pageType.length > 0 ? pageType : 'other',\n\t            variant_id: item.variant_id,\n\t            variant_name: item.variant_name,\n\t            version_type: item.version_type\n\t        });\n\t    });\n\t}\n\n\tmodule.exports = {\n\t    productClick: productClick,\n\t    search: search,\n\t    pageImpression: pageImpression,\n\t    trackProductImpression: trackProductImpression,\n\t    promoImpression: promoImpression,\n\t    PageDesignerPromoImpression: PageDesignerPromoImpression,\n\t    PageDesignerPromoClick: PageDesignerPromoClick,\n\t    variantSelected: variantSelected,\n\t    addToCart: addToCart,\n\t    removeFromCart: removeFromCart,\n\t    pushCheckoutData: pushCheckoutData,\n\t    purchase: purchase,\n\t    registration: registration,\n\t    login: login,\n\t    trackGAEvent: trackGAEvent,\n\t    ga4AddPaymentInfo: ga4AddPaymentInfo,\n\t    ga4AddShippingInfo: ga4AddShippingInfo,\n\t    ga4AddToCart: ga4AddToCart,\n\t    ga4AddToWishlist: ga4AddToWishlist,\n\t    ga4RemoveFromWishlist: ga4RemoveFromWishlist,\n\t    ga4BeginCheckout: ga4BeginCheckout,\n\t    ga4ClearSearch: ga4ClearSearch,\n\t    ga4CheckoutProgress: ga4CheckoutProgress,\n\t    ga4SaveCreditCard: ga4SaveCreditCard,\n\t    ga4ClickBackInStock: ga4ClickBackInStock,\n\t    ga4Login: ga4Login,\n\t    ga4Purchase: ga4Purchase,\n\t    ga4RemoveFromCart: ga4RemoveFromCart,\n\t    ga4SelectItem: ga4SelectItem,\n\t    ga4SelectColor: ga4SelectColor,\n\t    ga4SelectSize: ga4SelectSize,\n\t    ga4SelectContent: ga4SelectContent,\n\t    ga4SelectPromotion: ga4SelectPromotion,\n\t    ga4SelectWishlist: ga4SelectWishlist,\n\t    ga4SearchProduct: ga4SearchProduct,\n\t    ga4StartSearch: ga4StartSearch,\n\t    ga4SuccessfulSearch: ga4SuccessfulSearch,\n\t    ga4BrandSelectContent: ga4BrandSelectContent,\n\t    ga4UnsuccessfulSearch: ga4UnsuccessfulSearch,\n\t    ga4Share: ga4Share,\n\t    ga4SignUp: ga4SignUp,\n\t    ga4SignUpCheckout: ga4SignUpCheckout,\n\t    ga4ViewNextImagePDP: ga4ViewNextImagePDP,\n\t    ga4ViewCart: ga4ViewCart,\n\t    ga4ViewItem: ga4ViewItem,\n\t    ga4ViewItemList: ga4ViewItemList,\n\t    ga4ViewPromotion: ga4ViewPromotion,\n\t    ga4PageView: ga4PageView,\n\t    ga4ClickMenuNav: ga4ClickMenuNav,\n\t    ga4ClickFilter: ga4ClickFilter,\n\t    ga4Scroll: ga4Scroll,\n\t    ga4Subscribe: ga4Subscribe,\n\t    ga4SelectSizeGuide: ga4SelectSizeGuide,\n\t    ga4SelectBrandName: ga4SelectBrandName,\n\t    ga4BrandSecondCategoryLevel: ga4BrandSecondCategoryLevel,\n\t    ga4OpenPdpImage: ga4OpenPdpImage,\n\t    businessHours: businessHours,\n\t    abTestInteraction: abTestInteraction,\n\t    ga4SelectProceedPurchase: ga4SelectProceedPurchase\n\t};\n\n/***/ }),\n\n/***/ 84:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar PageTypeMap = __webpack_require__(81);\n\tvar events = __webpack_require__(83);\n\tvar pageMetaDataUtils = __webpack_require__(82);\n\n\t//global variable used for orders\n\tvar productOrder;\n\n\tvar scrollPosition = {\n\t    \"25\": false,\n\t    \"50\": false,\n\t    \"75\": false,\n\t    \"100\": false\n\t};\n\n\t/**\n\t * Returns the sales status of a product based on discount data.\n\t * @param {Object} product - jQuery or plain object representing the product.\n\t * @returns {string} - \"on sale\" if discounted, otherwise \"full price\".\n\t */\n\tfunction getSalesStatus(product) {\n\t    var isSalesStatus = product instanceof jQuery ? product.data('discount') : product.discount;\n\t    return isSalesStatus ? \"on sale\" : \"full price\";\n\t}\n\n\t/**\n\t * Extend analytics product with categories related to Google Analytics 4\n\t * @param {Object} product Analytics product\n\t * @param {Object} productData Product data\n\t * @param {Object} attributeName Analytics product's attribute name (postfix number will be added)\n\t * @returns Extended analytics product\n\t */\n\tfunction extendProductDataWithGA4Categories(product, productData, attributeName) {\n\t    if (!product || !productData) {\n\t        return;\n\t    }\n\t    attributeName = attributeName || 'category';\n\t    var index = void 0;\n\t    var key = void 0;\n\t    for (index = 1; index <= 5; index++) {\n\t        if (productData) {\n\t            if (!productData['category' + index]) {\n\t                continue;\n\t            }\n\t        }\n\t        key = attributeName + index;\n\t        // GA4 first category attribute does not contain postfix number\n\t        if (attributeName === 'item_category' && index === 1) {\n\t            key = attributeName;\n\t        }\n\t        if (productData) {\n\t            product[key] = productData['category' + index];\n\t        }\n\t    }\n\t    return product;\n\t}\n\n\t/**\n\t * GA4 Get item_list_id by product data\n\t * @param {Object} product Product object\n\t * @returns {String} GA4 list id\n\t */\n\tfunction ga4GetProductItemListId(product) {\n\t    if (!product) {\n\t        return;\n\t    }\n\t    if (product.listId) {\n\t        return product.listId;\n\t    }\n\t    // check saved list id after click on product tile\n\t    if (window.bata_com_ns.analytics.pageType === \"product\" && document.referrer) {\n\t        try {\n\t            var listId = window.sessionStorage.getItem(\"analyticsListId\");\n\t            if (listId) {\n\t                window.sessionStorage.removeItem(\"analyticsListId\");\n\t                $('.analytics-productPDP.analytics-product').data('listId', listId);\n\t                return listId;\n\t            }\n\t        } catch (error) {\n\t            // sessionStorage not supported\n\t        }\n\t    }\n\n\t    // set current category id and path for PLP\n\t    if (window.bata_com_ns.analytics.pageType === \"category\" || window.bata_com_ns.analytics.pageType === \"brands\") {\n\t        var categoryId = $(\"div.grid-footer > input.category-id\").val() || $('.js-analytics-search-category').data('analytics-category-id');\n\t        if (categoryId) {\n\t            return categoryId;\n\t        } else {\n\t            return \"product search result\";\n\t        }\n\t    }\n\t    if (window.bata_com_ns.analytics.pageType === \"product\") {\n\t        return \"detail\";\n\t    }\n\t    return product.list || window.bata_com_ns.analytics.pageType;\n\t}\n\n\t/**\n\t * GA4 formatted product items\n\t * @param {Array} products Analytics products\n\t * @returns GA4 formatted product items list\n\t */\n\tfunction ga4GetProducts(products) {\n\t    if (!products || !products.length) {\n\t        return [];\n\t    }\n\t    var mappedProducts = [];\n\t    mappedProducts = products.map(function (product) {\n\t        var isSalesStatus = getSalesStatus(product);\n\t        var ga4Product = {\n\t            item_id: product.id,\n\t            item_name: product.name,\n\t            index: product.position || 0,\n\t            item_brand: product.brand,\n\t            price: parseFloat(product.price),\n\t            quantity: product.quantity || 1,\n\t            item_dimension1: product.dimension1 || \"\",\n\t            item_dimension2: product.dimension2 || \"\",\n\t            item_dimension3: product.dimension3 || \"\",\n\t            item_sales_status: isSalesStatus\n\t        };\n\n\t        extendProductDataWithGA4Categories(ga4Product, product, 'item_category');\n\t        if (product.size) {\n\t            ga4Product.item_size = product.size;\n\t        }\n\t        if (product.variant) {\n\t            ga4Product.item_variant = product.variant;\n\t        }\n\t        if (product.coupon) {\n\t            ga4Product.coupon = product.coupon;\n\t        }\n\t        if (product.discount) {\n\t            ga4Product.discount = parseFloat(product.discount);\n\t        }\n\t        if (product.promotionName) {\n\t            ga4Product.promotion_id = product.promotionName;\n\t            ga4Product.promotion_name = product.promotionName;\n\t        }\n\t        ga4Product.item_list_id = ga4GetProductItemListId(product);\n\t        ga4Product.item_list_name = ga4Product.item_list_id;\n\t        if (product.genderName) {\n\t            ga4Product.item_gender = product.genderName;\n\t        }\n\t        if (product.itemSeason) {\n\t            ga4Product.item_season = product.itemSeason;\n\t        }\n\t        if (product.stockStatus) {\n\t            ga4Product.item_stock_status = product.stockStatus;\n\t        }\n\t        return ga4Product;\n\t    });\n\t    return mappedProducts;\n\t}\n\n\t/**\n\t * GA4 Get value of products\n\t * @param {Arrray} products products to be evaluated\n\t * @returns value of all products in array\n\t */\n\tfunction ga4GetProductsValue(products) {\n\t    var value = products.reduce(function (accumulator, product) {\n\t        return accumulator + parseFloat(product.price) * product.quantity;\n\t    }, 0);\n\t    return parseFloat(value);\n\t}\n\n\t/**\n\t * GA4 Get cart page data\n\t */\n\tfunction ga4GetCartData() {\n\t    var $cartInfo = $('#analytics-cartInfo');\n\t    return {\n\t        couponNames: $cartInfo.data('coupons-name'),\n\t        value: $cartInfo.data('value')\n\t    };\n\t}\n\n\t/**\n\t * GA4 formatted promotion items\n\t * @param {Array} products Analytics promotions\n\t * @returns GA4 formatted promotion items list\n\t */\n\tfunction ga4GetPromotions(promotions) {\n\t    if (!promotions || !promotions.length) {\n\t        return [];\n\t    }\n\t    var mappedPromotions = [];\n\t    mappedPromotions = promotions.map(function (promotion) {\n\t        return {\n\t            item_id: promotion.id,\n\t            promotion_id: promotion.id,\n\t            promotion_name: promotion.name,\n\t            creative_name: promotion.creative,\n\t            creative_slot: promotion.position\n\t        };\n\t    });\n\t    return mappedPromotions;\n\t}\n\n\t/**\n\t * @description extract the user email and phone from menuAccount - analytics-user, populated after login\n\t * @return user {obj} an object with the customer email and phone\n\t */\n\tfunction getCustomerEmailAndPhone() {\n\t    var $user = $('#analytics-user');\n\t    var customerEmail = $user.data('email') ? $user.data('email') : '';\n\t    var customerPhone = $user.data('phone') ? $user.data('phone') : '';\n\n\t    return {\n\t        customerEmail: customerEmail,\n\t        customerPhone: customerPhone\n\t    };\n\t}\n\n\t/**\n\t * @description get the product tile information\n\t * @param $product {div} the analytics-product div where the data will be extracted\n\t * @return product {Object} a the product Object contains the analytics informations\n\t */\n\tfunction getProductBaseData($product) {\n\t    var product = {\n\t        'name': $product.data('name'),\n\t        'id': $product.data('id'),\n\t        'price': $product.data('price'),\n\t        'brand': $product.data('brand'),\n\t        'category': $product.data('category'),\n\t        'discount': $product.data('discount'),\n\t        'promotionName': $product.data('promotionName')\n\t    };\n\t    var size = $product.data('size');\n\t    if (size) {\n\t        product.size = size;\n\t    }\n\t    var listId = $product.data('listId');\n\t    if (listId) {\n\t        product.listId = listId;\n\t    }\n\t    var genderName = $product.data('gender-name');\n\t    if (genderName) {\n\t        product.genderName = genderName;\n\t    }\n\t    var itemSeason = $product.data('item-season');\n\t    if (itemSeason) {\n\t        product.itemSeason = itemSeason;\n\t    }\n\t    var stockStatus = $product.data('stock-status');\n\t    if (stockStatus) {\n\t        product.stockStatus = stockStatus;\n\t    }\n\t    return product;\n\t}\n\n\t/**\n\t * @description get the product tile information\n\t * @param $product {div} the analytics-tileproduct div where the data will be extracted\n\t * @return product {Object} a the product Object contains the analytics tiles informations\n\t */\n\tfunction getProductTileData($product) {\n\t    var color = $product.data('color'),\n\t        size = $product.data('size');\n\t    var variant = size ? color + ' | ' + size : color;\n\t    var product = getProductBaseData($product);\n\t    product.variant = variant;\n\n\t    // quantity\n\t    var quantity = $product.data('quantity');\n\t    if (typeof quantity !== 'undefined' && quantity !== null && !isNaN(quantity)) {\n\t        product.quantity = parseInt(quantity);\n\t    }\n\n\t    // custom attributes - dimensions\n\t    var dimension1 = $product.data('dimension1');\n\t    if (dimension1) {\n\t        product.dimension1 = dimension1;\n\t    }\n\t    var dimension2 = $product.data('dimension2');\n\t    if (dimension2) {\n\t        product.dimension2 = dimension2;\n\t    }\n\t    var dimension3 = $product.data('dimension3');\n\t    if (dimension3) {\n\t        product.dimension3 = dimension3;\n\t    }\n\n\t    // ga4 categories\n\t    extendProductDataWithGA4Categories(product, $product.data());\n\n\t    return product;\n\t}\n\n\t/**\n\t * @description get the product tile information with also the three dimensions and the tryon\n\t * @param $product {div} the analytics-tileproduct div where the data will be extracted\n\t * @return product {Object} a the product Object contains the analytics informations\n\t */\n\tfunction getProductTileDataExtended($product) {\n\t    var product = getProductTileData($product);\n\t    product.dimension1 = $product.data('dimension1');\n\t    product.dimension2 = $product.data('dimension2');\n\t    product.dimension3 = $product.data('dimension3');\n\t    //IN-AR TRY ON\n\t    if ($product.data('opened-in-ar-tryon')) {\n\t        product.openedInArTryon = $product.data('opened-in-ar-tryon');\n\t    }\n\n\t    return product;\n\t}\n\n\t/**\n\t * @description extract all the products impressions from the dom\n\t * @param index {number} the index to start the position of the products\n\t * @return products {list} a list of all the products showed in page\n\t */\n\tfunction getProductsData(index) {\n\t    var products = [],\n\t        product,\n\t        $product;\n\t    var position = index || 0;\n\t    //track the plp products\n\t    var $productsPLP = $('.analytics-ProductList .analytics-product.unregistered');\n\t    if ($productsPLP.length > 1) {\n\t        $productsPLP.each(function () {\n\t            $product = $(this);\n\t            product = getProductTileData($product);\n\t            $product.data('position', position);\n\t            product.position = position;\n\t            product.list = window.bata_com_ns.analytics.pageType;\n\t            position++;\n\t            products.push(product);\n\n\t            $product.removeClass('unregistered');\n\t        });\n\t    } else {\n\t        product = getProductTileData($productsPLP);\n\t        if (!product.id) {\n\t            return;\n\t        }\n\t        $productsPLP.data('position', position);\n\t        product.position = position;\n\t        product.list = window.bata_com_ns.analytics.pageType;\n\t        position++;\n\t        products.push(product);\n\n\t        $productsPLP.removeClass('unregistered');\n\t    }\n\t    window.bata_com_ns.analytics.productsDisplayed = position;\n\t    return products;\n\t}\n\n\t/**\n\t * @description extract all the products impressions from the search dom\n\t * @param index {number} the index to start the position of the products\n\t * @return products {list} a list of all the products showed in page\n\t */\n\tfunction getProductsDataSearch(index) {\n\t    var products = [],\n\t        product,\n\t        $product;\n\t    var position = index;\n\t    var list = window.bata_com_ns.analytics.pageType + ' search suggestion';\n\t    //get the search products's data from the DOM\n\t    var $productsSearch = $('.analytics-ProductList .analytics-product-search.unregistered');\n\t    if ($productsSearch.length > 1) {\n\t        $productsSearch.each(function () {\n\t            $product = $(this);\n\t            product = getProductTileData($product);\n\t            $product.data('position', position);\n\t            product.position = position;\n\t            product.list = list;\n\t            product.item_list_id = list;\n\t            position++;\n\t            products.push(product);\n\n\t            $product.removeClass('unregistered');\n\t        });\n\t    } else {\n\t        product = getProductTileData($productsSearch);\n\t        $productsSearch.data('position', position);\n\t        product.position = position;\n\t        product.list = list;\n\t        product.item_list_id = list;\n\t        position++;\n\t        products.push(product);\n\n\t        $productsSearch.removeClass('unregistered');\n\t    }\n\t    return products;\n\t}\n\n\t/**\n\t * @description extract all the products impressions from the cart in dom (cart or minicart)\n\t * @param pageType {String} the location where the event is triggered\n\t * @return products {list} a list of all the products showed in cart\n\t */\n\tfunction getProductsCartData(pageType) {\n\t    var products = [],\n\t        product,\n\t        $product;\n\n\t    var $productsElements = $('.analytics-cart > .analytics-product.unregistered');\n\t    if ($productsElements.length > 1) {\n\t        $productsElements.each(function () {\n\t            $product = $(this);\n\t            product = getProductTileData($product);\n\t            product.position = $product.data('position');\n\t            product.list = pageType;\n\t            product.listId = $product.data('listId');\n\t            products.push(product);\n\t            $product.removeClass('unregistered');\n\t        });\n\t    } else if ($productsElements.length === 1) {\n\t        product = getProductTileData($productsElements);\n\t        product.position = $productsElements.data('position');\n\t        product.list = pageType;\n\t        product.listId = $productsElements.data('listId');\n\t        products.push(product);\n\t        $productsElements.removeClass('unregistered');\n\t    }\n\t    return products;\n\t}\n\n\t/**\n\t * @description extract all the products data from checkout page\n\t * @param step {Int} the checkout's step\n\t * @param isCartOpened {boolean} optional: set on true only for checkout's step where the products's data needs to be picked from cart or minicart\n\t * @return products {list} a list of all the products showed in checkout page\n\t */\n\tfunction getCheckoutProducts(step, isCartOpened) {\n\t    var products = [],\n\t        product,\n\t        $product,\n\t        $checkoutProducts;\n\t    //if the minicart was opened means that some products could have been deleted (available only in the first and second checkout step)\n\t    if (step < 2 && isCartOpened) {\n\t        //if the user is in cart page picks the product's data directly from the main cart (and not from the minicart)\n\t        if (window.bata_com_ns.analytics.pageType === 'cart') {\n\t            $checkoutProducts = $('.js-analytics-MainCart .analytics-cart > .analytics-product');\n\t        } else {\n\t            $checkoutProducts = $('.analytics-cart > .analytics-product');\n\t        }\n\t    } else {\n\t        $checkoutProducts = $('.js-analytics-checkout > .analytics-product');\n\t    }\n\t    var elementsFound = $checkoutProducts.length;\n\t    if (elementsFound === 0) {\n\t        products = productOrder;\n\t    } else if (elementsFound > 1) {\n\t        $checkoutProducts.each(function () {\n\t            $product = $(this);\n\t            product = getProductTileDataExtended($product);\n\t            product.quantity = parseInt($product.data('quantity'));\n\t            products.push(product);\n\t        });\n\t    } else {\n\t        product = getProductTileDataExtended($checkoutProducts);\n\t        product.quantity = parseInt($checkoutProducts.data('quantity'));\n\t        products.push(product);\n\t    }\n\n\t    return products;\n\t}\n\n\t/**\n\t * @description simulate a page impression for checkout updates\n\t * @param order {OrderModel} the relative order model\n\t */\n\tfunction setCheckoutProducts(order) {\n\t    productOrder = [];\n\t    var products = order.items.items;\n\t    var analyticsProduct, variants;\n\t    products.forEach(function (product) {\n\t        if (product.variationAttributes.length > 1) {\n\t            variants = product.variationAttributes[0].displayValue + ' | ' + product.variationAttributes[1].localizedSize || product.variationAttributes[1].displayValue;\n\t        } else {\n\t            variants = product.variationAttributes[0].displayValue;\n\t        }\n\t        analyticsProduct = {\n\t            'name': product.productName,\n\t            'id': product.id,\n\t            'dimension1': product.masterProductID,\n\t            'dimension2': product.articleNo,\n\t            'dimension3': product.variationGroupID,\n\t            'price': product.price.sales.decimalPrice,\n\t            'brand': product.brand,\n\t            'category': product.primaryCategoryID,\n\t            'variant': variants,\n\t            'quantity': product.quantity || 1,\n\t            'discount': product.discount,\n\t            'promotionName': product.promotionName,\n\t            'listId': product.analyticsListId,\n\t            'genderName': product.genderName,\n\t            'itemSeason': product.itemSeason,\n\t            'stockStatus': product.stockStatus\n\t        };\n\t        if (product.size) {\n\t            analyticsProduct.size = product.size;\n\t        }\n\t        extendProductDataWithGA4Categories(analyticsProduct, product);\n\t        productOrder.push(analyticsProduct);\n\t    });\n\t}\n\n\t/**\n\t * @description extract the page type from the dom\n\t * @return pageType {String} the type of the page, mapped on analytics-pagemapping.js\n\t */\n\tfunction getPageType() {\n\t    var pageType = $('.page-meta-data').data('page-type');\n\t    return pageType;\n\t}\n\n\t/**\n\t * @description determine if this is a search page and proceed to extract search's data, the track the event\n\t */\n\tfunction searchHelper() {\n\t    var $search = $('.js-analytics-search-keyword');\n\n\t    var isCategorySearch = false,\n\t        keyword = null,\n\t        categoryId = null,\n\t        numberOfResults = null;\n\n\t    if ($search.length > 0) {\n\t        numberOfResults = $search.data('analytics-results-number');\n\t    } else {\n\t        //it's a category search\n\t        isCategorySearch = true;\n\t        $search = $('.js-analytics-search-category');\n\t        categoryId = $search.data('analytics-category-id');\n\t    }\n\n\t    keyword = $search.data('analytics-keyword');\n\n\t    if (keyword && keyword.length > 0) {\n\t        var searchData = {\n\t            resultsNumber: numberOfResults && numberOfResults > 0 ? numberOfResults : 0,\n\t            searchMethod: \"standard\",\n\t            searchTerm: keyword\n\t        };\n\n\t        if (searchData.resultsNumber > 0) {\n\t            events.ga4SuccessfulSearch(searchData);\n\t        } else {\n\t            events.ga4UnsuccessfulSearch(searchData);\n\t        }\n\t    }\n\n\t    events.search(isCategorySearch, keyword, categoryId, numberOfResults);\n\t}\n\n\t/**\n\t * @description extract the data from the PDP dom and return a product formatted\n\t * @return product {Object} the product formatted\n\t */\n\tfunction getPDPProduct() {\n\t    var $product = $('.analytics-productPDP');\n\t    var color = $product.data('color'),\n\t        size = $product.data('size');\n\t    var variant = size ? color + ' | ' + size : color;\n\t    var isSalesStatus = getSalesStatus($product);\n\n\t    var product = {\n\t        'name': $product.data('name'),\n\t        'id': $product.data('id'),\n\t        'dimension1': $product.data('dimension1'),\n\t        'dimension2': $product.data('dimension2'),\n\t        'dimension3': $product.data('dimension3'),\n\t        'price': $product.data('price'),\n\t        'brand': $product.data('brand'),\n\t        'category': $product.data('category'),\n\t        'description': $product.data('description'),\n\t        'productUrl': $product.data('canonicalUrl'),\n\t        'categoryUrl': $product.data('categoryurl'),\n\t        'imageUrl': $product.data('imageurl'),\n\t        'variant': variant,\n\t        'promotionName': $product.data('promotionName'),\n\t        'discount': $product.data('discount'),\n\t        'listId': $product.data('listId'),\n\t        'genderName': $product.data('gender-name'),\n\t        'itemSeason': $product.data('item-season'),\n\t        'stockStatus': $product.data('stock-status'),\n\t        'itemSalesStatus': isSalesStatus\n\t    };\n\t    if (size) {\n\t        product.size = size;\n\t    }\n\t    extendProductDataWithGA4Categories(product, $product.data());\n\t    return product;\n\t}\n\n\t/**\n\t * @description get all the products's impression from the DOM\n\t * @return products {List} a list of products impression\n\t */\n\tfunction getProductDataPDP() {\n\t    var products = [];\n\t    var product = getPDPProduct();\n\t    products.push(product);\n\t    return products;\n\t}\n\n\t/**\n\t * @description get the product tile information\n\t * @param $product {div} the analytics-tileproduct div where the data will be extracted\n\t * @return product {Object} a the product Object contains the analytics informations\n\t */\n\tfunction getProductClickTileData($product) {\n\t    var color = $product.data('color'),\n\t        size = $product.data('size');\n\t    var variant = size ? color + ' | ' + size : color;\n\t    var isSalesStatus = getSalesStatus($product);\n\n\t    var product = {\n\t        'name': $product.data('name'),\n\t        'id': $product.data('id'),\n\t        'dimension1': $product.data('dimension1'),\n\t        'dimension2': $product.data('dimension2'),\n\t        'dimension3': $product.data('dimension3'),\n\t        'price': $product.data('price'),\n\t        'brand': $product.data('brand'),\n\t        'category': $product.data('category'),\n\t        'position': $product.data('position'),\n\t        'variant': variant,\n\t        'discount': $product.data('discount'),\n\t        'promotionName': $product.data('promotionName'),\n\t        'list': window.bata_com_ns.analytics.pageType,\n\t        'listId': $product.data('listId'),\n\t        'genderName': $product.data('gender-name'),\n\t        'itemSeason': $product.data('item-season'),\n\t        'stockStatus': $product.data('stock-status'),\n\t        'item_sales_status': isSalesStatus\n\t    };\n\t    if (size) {\n\t        product.size = size;\n\t    }\n\t    extendProductDataWithGA4Categories(product, $product.data());\n\t    return product;\n\t}\n\n\t/**\n\t * @description get all the promo informations, then launch the event\n\t */\n\tfunction promoHelper(promotions) {\n\t    if (promotions && promotions.length > 0) {\n\t        var promo,\n\t            analyticsPromotionsData = [];\n\t        //get all promotions data and build the analytics promo object\n\t        for (var i = 0; i < promotions.length; i++) {\n\t            promo = promotions[i];\n\t            analyticsPromotionsData.push({\n\t                'id': promo.id,\n\t                'name': promo.name,\n\t                'creative': '',\n\t                'position': promo.rank || 'center'\n\t            });\n\t        }\n\t        var ga4Promotions = ga4GetPromotions(analyticsPromotionsData);\n\t        events.ga4ViewPromotion(ga4Promotions);\n\t        events.promoImpression(analyticsPromotionsData);\n\t    }\n\t}\n\n\t/**\n\t * @description get all the promo information from the DOM, then process to pass the formatted data\n\t */\n\tfunction promoImpressionHelper() {\n\t    var $promo = $('span.analytics-promotion');\n\t    var promotions = [],\n\t        promo = {\n\t        'id': $promo.data('id'),\n\t        'name': $promo.data('name'),\n\t        'rank': $promo.data('rank')\n\t    };\n\t    promotions.push(promo);\n\t    promoHelper(promotions);\n\t}\n\n\t/**\n\t * @description get all the pagedesigner promo information from the DOM, then process to pass the formatted data\n\t */\n\tfunction PageDesignerPromoImpressionHelper() {\n\t    var analyticsPromotionsData = [];\n\t    var $productsElements = $('.js-analytics-banner');\n\t    if ($productsElements.length > 1) {\n\t        $productsElements.each(function () {\n\t            var $banner = $(this);\n\t            if ($banner.data(\"analytics-title\") && $banner.data(\"analytics-title\") !== \"\" && $banner.data(\"analytics-title\") !== \"No title\") {\n\t                analyticsPromotionsData.push({\n\t                    'id': $banner.data(\"analytics-title\"),\n\t                    'name': $banner.data(\"analytics-title\")\n\t                });\n\t            }\n\t        });\n\t        if (analyticsPromotionsData.length) {\n\t            var ga4Promotions = ga4GetPromotions(analyticsPromotionsData);\n\t            events.ga4ViewPromotion(ga4Promotions);\n\t            events.PageDesignerPromoImpression(analyticsPromotionsData);\n\t        }\n\t    }\n\t}\n\n\t/**\n\t * @description Extract the data from the variation product, then call the event\n\t * @param product {Object} The new variation product selected\n\t */\n\tfunction variationClickHelper(product, variationType) {\n\t    // The master category is always contained in the last breadcrumb, so the variation group ID\n\t    var masterCategory = product.breadcrumbs && product.breadcrumbs.length > 0 ? product.breadcrumbs[product.breadcrumbs.length - 1] : null;\n\n\t    // Extract product details\n\t    var productName = product.productName,\n\t        productID = product.id,\n\t        masterProductID = product.masterProductID,\n\t        articleNo = product.custom.articleNo,\n\t        variationGroupID = masterCategory ? masterCategory.variationGroupID : '',\n\t        price = product.price.sales.decimalPrice,\n\t        brand = product.brand,\n\t        categoryID = masterCategory ? masterCategory.id : '',\n\t        description = product.longDescription,\n\t        productUrl = product.canonicalUrl,\n\t        categoryUrl = masterCategory ? new URL(masterCategory.url, document.baseURI).href : '',\n\t        imageUrl = product.images.large[0].url,\n\t        promotionName = product.promotionName,\n\t        discount = product.discount,\n\t        isSalesStatus = getSalesStatus(product),\n\t        stockStatus = product.stockStatus,\n\t        genderName = product.genderName,\n\t        itemSeason = product.itemSeason,\n\t        color,\n\t        size,\n\t        variation;\n\t    // Detect the color selected\n\t    for (var i = 0; i < product.variationAttributes[0].values.length; i++) {\n\t        variation = product.variationAttributes[0].values[i];\n\t        if (variation.selected) {\n\t            color = variation.displayValue;\n\t        }\n\t    }\n\t    // Detect the size selected, only if the size variation exist\n\t    for (var _i = 0; _i < product.variationAttributes[1].values.length; _i++) {\n\t        variation = product.variationAttributes[1].values[_i];\n\t        if (variation.selected) {\n\t            size = variation.localizedSize || variation.displayValue;\n\t        }\n\t    }\n\t    var variant = size ? color + ' | ' + size : color;\n\t    var $analyticsProduct = $('.analytics-productPDP');\n\n\t    // Prepare the products object for analytics\n\t    var products = [{\n\t        'name': productName,\n\t        'id': productID,\n\t        'dimension1': masterProductID,\n\t        'dimension2': articleNo,\n\t        'dimension3': variationGroupID,\n\t        'price': price,\n\t        'brand': brand,\n\t        'category': categoryID,\n\t        'description': description,\n\t        'productUrl': productUrl,\n\t        'categoryUrl': categoryUrl,\n\t        'imageUrl': imageUrl,\n\t        'variant': variant,\n\t        'promotionName': promotionName,\n\t        'discount': discount,\n\t        'listId': $analyticsProduct.data('listId'),\n\t        'genderName': genderName,\n\t        'itemSeason': itemSeason,\n\t        'stockStatus': stockStatus,\n\t        'item_sales_status': isSalesStatus\n\t    }];\n\t    if (size) {\n\t        products.size = size;\n\t    }\n\t    extendProductDataWithGA4Categories(products[0], product);\n\t    var ga4Products = ga4GetProducts(products);\n\t    // Launch the event depending on variationType, either color or size selection if uknown then use select_item\n\t    if (variationType === 'color') {\n\t        events.ga4SelectColor(productID, color);\n\t    } else if (variationType === 'size') {\n\t        events.ga4SelectSize(productID, size);\n\t    } else {\n\t        events.ga4SelectItem(window.bata_com_ns.analytics.currency, ga4Products);\n\t    }\n\n\t    // Launch the event variantSelected\n\t    events.variantSelected(window.bata_com_ns.analytics.currency, products);\n\t    // Update the analytics producs data in the DOM, so it's ready for addToCart event\n\t    $analyticsProduct.data('name', productName);\n\t    $analyticsProduct.data('id', productID);\n\t    $analyticsProduct.data('dimension1', masterProductID);\n\t    $analyticsProduct.data('dimension2', articleNo);\n\t    $analyticsProduct.data('dimension3', variationGroupID);\n\t    $analyticsProduct.data('price', price);\n\t    $analyticsProduct.data('brand', brand);\n\t    $analyticsProduct.data('category', categoryID);\n\t    $analyticsProduct.data('description', description);\n\t    $analyticsProduct.data('canonicalUrl', productUrl);\n\t    $analyticsProduct.data('categoryurl', categoryUrl);\n\t    $analyticsProduct.data('imageurl', imageUrl);\n\t    $analyticsProduct.data('color', color);\n\t    $analyticsProduct.data('size', size);\n\t    $analyticsProduct.data('category1', product.category1);\n\t    $analyticsProduct.data('category2', product.category2);\n\t    $analyticsProduct.data('category3', product.category3);\n\t    $analyticsProduct.data('category4', product.category4);\n\t    $analyticsProduct.data('category5', product.category5);\n\t    $analyticsProduct.data('discount', product.discount);\n\t    $analyticsProduct.data('promotionName', product.promotionName);\n\t    $analyticsProduct.data('gender-name', genderName);\n\t    $analyticsProduct.data('item-season', itemSeason);\n\t    $analyticsProduct.data('stock-status', stockStatus);\n\t    $analyticsProduct.data('item_sales_status', isSalesStatus);\n\n\t    // Also collect the new possible promotions displayed\n\t    promoHelper(product.promotions);\n\n\t    // Update PDP analytics data for \"share\" event\n\t    if (window.bata_com_ns.analytics.pageType === \"product\") {\n\t        $('ul.social-icons').data('analytics-pid', variationGroupID);\n\t    }\n\t}\n\n\t/**\n\t * @description simulate a page impression for checkout updates\n\t */\n\tfunction checkoutUpdate() {\n\t    var $checkout = $('#checkout-main');\n\t    var step = $checkout.attr('data-checkout-stage');\n\t    step = PageTypeMap.PAGE_MAPPING[step] || step;\n\t    window.bata_com_ns.analytics.pageType = step;\n\n\t    // set page-meta tag so that it's in sync with window.bata_com_ns.analytics.pageType\n\t    pageMetaDataUtils.getOrSetPageMetaDataAttrElement('data-analytics-page-type', step);\n\n\t    // set page-meta tag so that it's in sync with page's pageType\n\t    pageMetaDataUtils.getOrSetPageMetaDataAttrElement('data-page-type', pageMetaDataUtils.PAGE_MAPPING[step] || step);\n\n\t    var customerType = $checkout.data('customer-crm-id') || 'guest';\n\t    var customerEmail = $checkout.data('customer-email') || '';\n\n\t    events.pageImpression(customerType, step, window.location.href, customerEmail);\n\t    var customerCrmId = $checkout.data('customer-crm-id');\n\t    var ga4CrmId = customerCrmId && customerCrmId !== 'guest' ? customerCrmId : null;\n\t    events.ga4PageView({\n\t        pageType: step,\n\t        pageURL: window.location.origin,\n\t        pagePath: window.location.pathname,\n\t        userID: ga4CrmId,\n\t        loginStatus: ga4CrmId ? 'loggedIn' : 'guest',\n\t        customerType: ga4CrmId ? 'loyal-cutomer' : '',\n\t        country: window.bata_com_ns.analytics.country\n\t    });\n\t}\n\n\t/**\n\t * @description simulate a page impression for checkout updates\n\t * @param $analyticsProduct {element} the div(s) that contains all the product's data\n\t * @returns products {List} a list that contains the product'data clicked\n\t */\n\tfunction productClickHelper($analyticsProduct) {\n\t    var products = [],\n\t        product;\n\t    //if the minicart is opened, there can be multiple tile of the same product, so pick the first one available\n\t    $analyticsProduct = $analyticsProduct.length > 1 ? $analyticsProduct.first() : $analyticsProduct;\n\n\t    product = getProductClickTileData($analyticsProduct);\n\t    products.push(product);\n\n\t    return products;\n\t}\n\n\t/**\n\t * @description launch both of the events for addToCart event\n\t * @param $product {element} the div that contains all the product's data\n\t * @param arTryonInfo {arTryonInfo} IN-AR TRY ON object with the tryon flags\n\t */\n\tfunction addToCartHelper($product, arTryonInfo) {\n\t    var product,\n\t        products = [],\n\t        pageType = window.bata_com_ns.analytics.pageType,\n\t        pageView;\n\n\t    if (pageType !== 'product' && $product) {\n\t        product = getProductTileDataExtended($product);\n\t        product.list = pageType;\n\t        pageView = PageTypeMap.CART_MAPPING[pageType];\n\t    } else {\n\t        product = getPDPProduct();\n\t    }\n\t    product.quantity = 1;\n\t    products.push(product);\n\n\t    var currUser = getCustomerEmailAndPhone(),\n\t        ga4Products = ga4GetProducts(products);\n\n\t    events.ga4AddToCart(window.bata_com_ns.analytics.currency, ga4Products, parseFloat(product.price) * product.quantity);\n\t    events.addToCart(window.bata_com_ns.analytics.currency, products, pageView, currUser.customerEmail, currUser.customerPhone, arTryonInfo);\n\t    events.trackGAEvent(pageType, 'add to bag', product.id);\n\t}\n\n\t/**\n\t * @description launch both of the events for removeFromCart event\n\t * @param $product {element} the div that contains all the product's data\n\t * @param pageType {String} the page type where the product is removed\n\t * @param singleItem {String} only single item was removed from a cart\n\t */\n\tfunction removeFromCartHelper($product, pageType, singleItem) {\n\t    var product,\n\t        products = [];\n\n\t    product = getProductTileData($product);\n\t    product.position = $product.data('position');\n\t    product.quantity = singleItem ? 1 : parseInt($product.data('quantity'));\n\t    product.list = pageType;\n\t    product.dimension1 = $product.data('dimension1');\n\t    product.dimension2 = $product.data('dimension2');\n\t    product.dimension3 = $product.data('dimension3');\n\t    products.push(product);\n\n\t    var ga4Products = ga4GetProducts(products);\n\t    events.ga4RemoveFromCart(window.bata_com_ns.analytics.currency, ga4Products, ga4GetProductsValue(ga4Products));\n\t    events.removeFromCart(products);\n\t    events.trackGAEvent(pageType, 'remove', product.id);\n\t}\n\n\t/**\n\t * @description launch the event addToWishlist\n\t * @param pid {String} the product's ID added\n\t */\n\tfunction addToWishlistHelper(pid, $product) {\n\t    var product = getProductClickTileData($product);\n\t    var ga4Products = ga4GetProducts([product]);\n\t    events.ga4AddToWishlist(window.bata_com_ns.analytics.currency, ga4Products, parseFloat(product.price || 0));\n\t    events.trackGAEvent(PageTypeMap.WISHLIST_MAPPING[window.bata_com_ns.analytics.pageType], 'wishlist add', pid);\n\t}\n\n\t/**\n\t * @description launch the event removeFromWishlist\n\t * @param pid {String} the product's ID removed\n\t */\n\tfunction removeFromWishlistHelper(pid, $product) {\n\t    var product = getProductClickTileData($product);\n\t    var ga4Products = ga4GetProducts([product]);\n\t    events.ga4RemoveFromWishlist(window.bata_com_ns.analytics.currency, ga4Products, parseFloat(product.price || 0));\n\t    events.trackGAEvent(PageTypeMap.WISHLIST_MAPPING[window.bata_com_ns.analytics.pageType], 'wishlist remove', pid);\n\t}\n\n\t/**\n\t * @description launch the checkout's events\n\t * @param step {int} the checkout's step\n\t * @param options {Object} various information, step based\n\t * @param isMiniCartOpened {boolean} optional: set on true only for checkout's second step, if the minicart has been opened\n\t */\n\tfunction checkouStepHelper(step, options, isMiniCartOpened) {\n\t    var products = getCheckoutProducts(step, isMiniCartOpened);\n\t    var currUser = getCustomerEmailAndPhone();\n\n\t    // GA4 begin_checkout (cart -> checkout)\n\t    if (step === 1) {\n\t        var ga4Products = ga4GetProducts(products);\n\t        var ga4CartData = ga4GetCartData();\n\t        events.ga4BeginCheckout(window.bata_com_ns.analytics.currency, ga4Products, ga4CartData.couponNames, ga4CartData.value);\n\t    }\n\n\t    if (step === 2) {\n\t        var _ga4Products = ga4GetProducts(products);\n\t        var checkoutData = {\n\t            stepLabel: \"shipping info\",\n\t            stepNumber: 2\n\t        };\n\t        events.ga4CheckoutProgress(checkoutData, _ga4Products);\n\t    }\n\n\t    // GA4 checkout_progress (payment page load)\n\t    if (step === 3) {\n\t        var _ga4Products2 = ga4GetProducts(products);\n\t        var _ga4CartData = ga4GetCartData();\n\t        var _checkoutData = {\n\t            currencyCode: window.bata_com_ns.analytics.currency,\n\t            coupon: _ga4CartData && _ga4CartData.couponNames,\n\t            value: _ga4CartData && _ga4CartData.value,\n\t            stepLabel: \"payment info\",\n\t            stepNumber: 3\n\t        };\n\t        events.ga4CheckoutProgress(_checkoutData, _ga4Products2);\n\t    }\n\n\t    events.pushCheckoutData(step, options, products, currUser.customerEmail, currUser.customerPhone);\n\t}\n\n\t/**\n\t * @description launch the checkout's events\n\t * @param step {int} the checkout's step\n\t * @param options {Object} various information, step based\n\t * @param order {Object} the order in execution\n\t */\n\tfunction updateCheckoutData(step, options, order) {\n\t    var option;\n\t    // in case of multiple payment methods concatenate them (only for CO step 4)\n\t    if (step === 4) {\n\t        for (var i = 0; i < options.length; i++) {\n\t            if (i === 0) {\n\t                option = options[i].paymentMethod;\n\t            } else {\n\t                option += ' | ' + options[i].paymentMethod;\n\t            }\n\t        }\n\t    } else {\n\t        option = options;\n\t    }\n\n\t    setCheckoutProducts(order);\n\t    var products = productOrder;\n\n\t    // GA4 payment\n\t    if (step === 4 && order) {\n\t        var ga4Products = ga4GetProducts(products);\n\t        var checkoutData = {\n\t            currency: window.bata_com_ns.analytics.currency,\n\t            paymentType: order.billing && order.billing.payment && order.billing.payment.selectedPaymentInstruments && order.billing.payment.selectedPaymentInstruments.length && order.billing.payment.selectedPaymentInstruments[0].labelMethod,\n\t            coupon: order.couponsName,\n\t            paymentMethodSaved: order.paymentMethodSaved,\n\t            value: order.totals && order.totals.grandTotalDecimal\n\t        };\n\t        events.ga4AddPaymentInfo(checkoutData, ga4Products);\n\t        events.ga4SelectProceedPurchase(order);\n\t    }\n\t    events.pushCheckoutData(step, option, products);\n\t}\n\n\t/**\n\t * @description launch the event order confirmation\n\t */\n\tfunction orderConfirmHelper() {\n\t    var step = 5;\n\t    var products = getCheckoutProducts(step, false);\n\t    events.pushCheckoutData(step, 'orderconfirmation', products);\n\t    var $checkoutInfo = $('#analytics-checkoutInfo');\n\t    var coupon = {\n\t        'couponCodeName': $checkoutInfo.data('coupons-name'),\n\t        'couponDiscount': $checkoutInfo.data('coupons-discount')\n\t    };\n\t    var currUser = getCustomerEmailAndPhone();\n\t    var couponNames = coupon.couponCodeName;\n\n\t    var ga4Products = ga4GetProducts(products);\n\t    var ga4PurchaseData = {\n\t        currency: window.bata_com_ns.analytics.currency,\n\t        affiliation: 'Bata',\n\t        transactionId: $checkoutInfo.data('id'),\n\t        value: parseFloat($checkoutInfo.data('revenue')),\n\t        shipping: parseFloat($checkoutInfo.data('shipping')),\n\t        shippingTier: $checkoutInfo.data('shipping-tier'),\n\t        paymentType: $checkoutInfo.data('payment-type'),\n\t        tax: $checkoutInfo.data('tax'),\n\t        adjustedMerchandizeTotalNetPrice: $checkoutInfo.data('adjustedMerchandizeTotalNetPrice'),\n\t        adjustedMerchandizeTotalTax: $checkoutInfo.data('adjustedMerchandizeTotalTax'),\n\t        bataStore: $checkoutInfo.data('bataStore'),\n\t        cartId: $checkoutInfo.data('cartId'),\n\t        transactionType: $checkoutInfo.data('transactionType'),\n\t        email: $checkoutInfo.data('email')\n\t    };\n\t    if (couponNames) {\n\t        ga4PurchaseData.coupon = couponNames;\n\t    }\n\t    events.ga4Purchase(ga4PurchaseData, ga4Products);\n\t    events.purchase({\n\t        id: $checkoutInfo.data('id'),\n\t        revenue: $checkoutInfo.data('revenue'),\n\t        tax: $checkoutInfo.data('tax'),\n\t        shipping: $checkoutInfo.data('shipping'),\n\t        coupon: coupon,\n\t        products: products,\n\t        customerEmail: currUser.customerEmail,\n\t        customerPhone: currUser.customerPhone,\n\t        adjustedMerchandizeTotalNetPrice: $checkoutInfo.data('adjustedMerchandizeTotalNetPrice'),\n\t        adjustedMerchandizeTotalTax: $checkoutInfo.data('adjustedMerchandizeTotalTax')\n\t    });\n\t}\n\n\t/**\n\t * @description update the analytics product quantity in Cart page\n\t * @param productID {String} the product's ID\n\t * @param quantity {Int} the quantity of the product\n\t */\n\tfunction updateProductQuantity(productID, quantity) {\n\t    var analyticsSelector = '.js-analytics-MainCart .analytics-product.' + productID;\n\t    $(analyticsSelector).data('quantity', quantity);\n\t}\n\n\t/**\n\t * @description gets business hours (they are defined within Site preferences - businessHours field)\n\t */\n\tfunction getBusinessHours() {\n\t    var $bh = $('.analytics-businessHours');\n\t    var content = $bh && $bh.length ? $bh.data('content') : null;\n\t    return content;\n\t}\n\n\t/**\n\t * @description extract the data from the cart unavailability modal and fire removeFromCart event\n\t */\n\tfunction removeFromCartByUnavailabilityModal() {\n\t    var products = [],\n\t        $product,\n\t        $removedProducts = $('#unavailableProductsModal .cc-cart-item');\n\n\t    var elementsFound = $removedProducts.length;\n\t    if (elementsFound > 0) {\n\t        $removedProducts.each(function () {\n\t            $product = $(this);\n\t            var product = {};\n\t            product.id = $product.data('id');\n\t            product.quantity = parseInt($product.data('quantity'));\n\t            product.price = $product.data('priceTotal');\n\t            products.push(product);\n\t        });\n\t    }\n\n\t    var ga4Products = ga4GetProducts(products);\n\t    events.ga4RemoveFromCart(window.bata_com_ns.analytics.currency, ga4Products, ga4GetProductsValue(ga4Products));\n\t    events.removeFromCart(products);\n\t}\n\n\t/**\n\t * Track recommendations products view\n\t * @param {Object} recommendationContainer recommendation element\n\t */\n\tfunction trackRecommendationsLists(recommendationContainer) {\n\t    var product, $product, $recommendation;\n\t    // loop recommendations carousels\n\t    var $recommendations = $(recommendationContainer) || $('.recommendations');\n\t    if ($recommendations.length > 0) {\n\t        $recommendations.each(function () {\n\t            $recommendation = $(this);\n\t            var position = 0;\n\t            var products = [];\n\t            var recommendationName = $recommendation.find('.carousel-title').first().html().trim() || 'recommendation';\n\t            var $products = $recommendation.find('.analytics-product.unregistered');\n\t            if ($products.length > 0) {\n\t                // loop products in a recommendation carousel\n\t                $products.each(function () {\n\t                    $product = $(this);\n\t                    product = getProductTileData($product);\n\t                    // skip invalid product\n\t                    if (!product.id) {\n\t                        return;\n\t                    }\n\t                    product.position = position;\n\t                    $product.data('position', position);\n\t                    product.listId = recommendationName;\n\t                    $product.data('listId', recommendationName);\n\t                    position++;\n\t                    products.push(product);\n\t                    $product.removeClass('unregistered');\n\t                });\n\t            }\n\t            if (products.length === 0) {\n\t                return;\n\t            }\n\t            // enhance product object with GA4 attributes\n\t            var ga4Products = ga4GetProducts(products);\n\t            // track products view event\n\t            events.ga4ViewItemList(window.bata_com_ns.analytics.currency, ga4Products);\n\t        });\n\t    }\n\t    return;\n\t}\n\n\t/**\n\t * Track scroll position\n\t */\n\tfunction trackScrollPosition() {\n\t    var scrollPercent = ($(window).scrollTop() / ($(document).height() - $(window).height()) * 100).toFixed();\n\t    [25, 50, 75, 100].some(function (position) {\n\t        if (scrollPercent < position) {\n\t            return true;\n\t        }\n\t        if (scrollPercent >= position && !scrollPosition[position.toString()]) {\n\t            scrollPosition[position.toString()] = true;\n\t            events.ga4Scroll(position);\n\t            return true;\n\t        }\n\t    });\n\t}\n\n\t/**\n\t * Parse abTests data off the page's DOM\n\t * Only active and visible ab tests are there (div's data)\n\t */\n\tfunction getABtestsDataFromDOM(abTestId) {\n\t    var list = [];\n\t    $('.abTestsSegmentData').each(function () {\n\t        var id = $(this).data('id');\n\t        var segment = $(this).data('segment');\n\n\t        if (typeof id !== 'undefined' && id !== null && id.length > 0 && typeof segment !== 'undefined' && segment !== null && segment.length > 0 && (!(typeof abTestId !== 'undefined' && abTestId !== null && abTestId.length > 0) || abTestId === id)) {\n\t            var params = {\n\t                variant_id: id,\n\t                variant_name: segment,\n\t                version_type: $(this).data('is-control-segment') ? 'control' : 'variant'\n\t            };\n\t            list.push(params);\n\t        }\n\t    });\n\t    return list;\n\t}\n\n\t/**\n\t * Call ab test interection event that pushes active ab test data to the dataLayer\n\t * @param {Object} params - example: {abTestId: null, pageType: 'other'}\n\t */\n\tfunction callAbTestInteraction(params) {\n\t    var abTestId = null;\n\t    var pageType = 'other';\n\n\t    if (params) {\n\t        abTestId = params.abTestId && params.abTestId.length > 0 ? params.abTestId : abTestId;\n\t        if (params.pageType && params.pageType.length > 0) {\n\t            pageType = params.pageType;\n\t        } else if (window.bata_com_ns && window.bata_com_ns.pageType && window.bata_com_ns.pageType.length > 0) {\n\t            pageType = window.bata_com_ns.pageType;\n\t        }\n\t    }\n\n\t    events.abTestInteraction(getABtestsDataFromDOM(abTestId), pageType);\n\t}\n\n\tmodule.exports = {\n\t    extendProductDataWithGA4Categories: extendProductDataWithGA4Categories,\n\t    ga4GetProductItemListId: ga4GetProductItemListId,\n\t    ga4GetProducts: ga4GetProducts,\n\t    ga4GetPromotions: ga4GetPromotions,\n\t    productClickHelper: productClickHelper,\n\t    getProductTileDataExtended: getProductTileDataExtended,\n\t    variationClickHelper: variationClickHelper,\n\t    checkoutUpdate: checkoutUpdate,\n\t    addToCartHelper: addToCartHelper,\n\t    getProductsCartData: getProductsCartData,\n\t    removeFromCartHelper: removeFromCartHelper,\n\t    addToWishlistHelper: addToWishlistHelper,\n\t    removeFromWishlistHelper: removeFromWishlistHelper,\n\t    getPageType: getPageType,\n\t    searchHelper: searchHelper,\n\t    getProductDataPDP: getProductDataPDP,\n\t    getProductsData: getProductsData,\n\t    getProductsDataSearch: getProductsDataSearch,\n\t    checkouStepHelper: checkouStepHelper,\n\t    getCheckoutProducts: getCheckoutProducts,\n\t    orderConfirmHelper: orderConfirmHelper,\n\t    updateCheckoutData: updateCheckoutData,\n\t    setCheckoutProducts: setCheckoutProducts,\n\t    promoHelper: promoHelper,\n\t    promoImpressionHelper: promoImpressionHelper,\n\t    getProductClickTileData: getProductClickTileData,\n\t    updateProductQuantity: updateProductQuantity,\n\t    removeFromCartByUnavailabilityModal: removeFromCartByUnavailabilityModal,\n\t    PageDesignerPromoImpressionHelper: PageDesignerPromoImpressionHelper,\n\t    getBusinessHours: getBusinessHours,\n\t    ga4GetCartData: ga4GetCartData,\n\t    trackRecommendationsLists: trackRecommendationsLists,\n\t    trackScrollPosition: trackScrollPosition,\n\t    getABtestsDataFromDOM: getABtestsDataFromDOM,\n\t    callAbTestInteraction: callAbTestInteraction\n\t};\n\n/***/ }),\n\n/***/ 85:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\n\tvar utils = __webpack_require__(84);\n\tvar events = __webpack_require__(83);\n\n\t/**\n\t * @description variationClick listener\n\t * @param response {Object} an object that contains the fullproduct as an attribute (response.product)\n\t */\n\t$('body').on('product:afterAttributeSelect', function (e, response) {\n\t    var variationType = 'unknown'; // Default value\n\t    var variationElement;\n\n\t    if (response.container && Array.isArray(response.container.prevObject) && response.container.prevObject.length > 0 && response.container.prevObject[0]) {\n\t        variationElement = response.container.prevObject[0].className || '';\n\n\t        if (variationElement.includes('size')) {\n\t            variationType = 'size';\n\t        } else if (variationElement.includes('color')) {\n\t            variationType = 'color';\n\t        }\n\t    }\n\n\t    utils.variationClickHelper(response.data.product, variationType);\n\t});\n\n\t/**\n\t * @description addToCart listener\n\t * @param data {Object} a data object containing:\n\t *             -productID: the id of the product added to the cart with pageType,\n\t *             -tryOnDesktopClick: true if the user clicked on the tryon button on Desktop,\n\t *             -tryOnMobileRedirect: true if the user used the tryon funcionality and got redirected back on Mobile\n\t */\n\t$('body').on('analytics:addToCart', function (e, data) {\n\t    var $product,\n\t        analyticsTileSelector = '.analytics-ProductList .analytics-product.' + data.productID,\n\t        tile = $(analyticsTileSelector),\n\n\t    //IN-AR TRY ON\n\t    arTryonInfo = {};\n\n\t    //tryOnDesktopClick and tryOnMobileRedirect are not null only if the tryon logic is active\n\t    if (data.tryOnDesktopClick && data.tryOnDesktopClick !== null && data.tryOnMobileRedirect && data.tryOnMobileRedirect !== null) {\n\t        arTryonInfo.tryOnDesktopClick = data.tryOnDesktopClick;\n\t        arTryonInfo.tryOnMobileRedirect = data.tryOnMobileRedirect;\n\t    } else {\n\t        arTryonInfo = null;\n\t    }\n\t    //the tile will be > 0 only if the event is originated outside the PDP\n\t    if (tile.length > 0) {\n\t        $product = tile;\n\t    } else {\n\t        $product = $('.analytics-productPDP');\n\t    }\n\n\t    if (data.pageType === 'cart') {\n\t        analyticsTileSelector = '.analytics-cart > .analytics-product.' + data.productID;\n\t        tile = $(analyticsTileSelector);\n\t        $product = tile;\n\t    }\n\n\t    utils.addToCartHelper($product, arTryonInfo);\n\t});\n\n\t/**\n\t * @description removeFromCart listener\n\t * @param pid {String} the id of the product added to the cart\n\t * @param pageType {String} the page type where the action is committed\n\t */\n\t$('body').on('analytics:removeFromCart', function (e, data) {\n\t    var $product;\n\t    //the cart tiles must be the at first child level of analytics-cart\n\t    var analyticsTileSelector = '.analytics-cart > .analytics-product.' + data.productID;\n\t    var tile = $(analyticsTileSelector);\n\n\t    $product = tile;\n\t    utils.removeFromCartHelper($product, data.pageType, data.singleItem);\n\t});\n\n\t/**\n\t * @description removeFromCartBySystem listener\n\t */\n\t$('body').on('analytics:removeFromCartBySystem', function () {\n\t    utils.removeFromCartByUnavailabilityModal();\n\t});\n\n\t/**\n\t * @description addToWishlist listener\n\t * @param pid {String} the id of the product added\n\t */\n\t$('body').on('analytics:addToWishlist', function (e, pid) {\n\t    var $analyticsProduct;\n\t    if (utils.getPageType() === \"product\") {\n\t        // PDP\n\t        $analyticsProduct = $('.analytics-productPDP');\n\t    } else {\n\t        $analyticsProduct = $('.analytics-product.' + pid);\n\t    }\n\t    utils.addToWishlistHelper(pid, $analyticsProduct);\n\t});\n\n\t/**\n\t * @description removeFromWishlist listener\n\t * @param pid {String} the id of the product removed\n\t */\n\t$('body').on('analytics:removeFromWishlist', function (e, pid) {\n\t    var $analyticsProduct;\n\t    if (utils.getPageType() === \"product\") {\n\t        $analyticsProduct = $('.analytics-productPDP');\n\t    } else {\n\t        $analyticsProduct = $('.analytics-product.' + pid);\n\t    }\n\t    utils.removeFromWishlistHelper(pid, $analyticsProduct);\n\t});\n\n\t/**\n\t * @description launch the checkout update data and impressions\n\t */\n\t$('body').on('analytics:checkoutUpdateState', function () {\n\t    utils.checkoutUpdate();\n\t});\n\n\t/**\n\t * @description collect the new product impressions\n\t */\n\t$('body').on('analytics:productsLoaded', function () {\n\n\t    //get the number of the products already registered, then collect the new products and launch the impression\n\t    var numberProductAlreadyDisplayed = window.bata_com_ns.analytics.productsDisplayed || 0;\n\t    var products = utils.getProductsData(numberProductAlreadyDisplayed);\n\t    var ga4Products = utils.ga4GetProducts(products);\n\t    events.ga4ViewItemList(window.bata_com_ns.analytics.currency, ga4Products);\n\t    events.trackProductImpression(window.bata_com_ns.analytics.currency, products);\n\t});\n\n\t/**\n\t * @description collect the new search suggestion products\n\t */\n\t$('body').on('analytics:searchProductLoaded', function (e, searchTerm) {\n\t    var searchData = {\n\t        resultsNumber: $('.js-analytics-searchProduct [id^=\"product-\"]').length || 0,\n\t        searchMethod: \"autosuggested\",\n\t        searchTerm: searchTerm\n\t    };\n\n\t    if (searchData.resultsNumber > 0) {\n\t        var products = utils.getProductsDataSearch(0);\n\t        var ga4Products = utils.ga4GetProducts(products);\n\n\t        events.ga4SuccessfulSearch(searchData);\n\t        events.ga4ViewItemList(window.bata_com_ns.analytics.currency, ga4Products);\n\t        events.trackProductImpression(window.bata_com_ns.analytics.currency, products);\n\t    } else {\n\t        events.ga4UnsuccessfulSearch(searchData);\n\t    }\n\t});\n\n\t$('body').on('analytics:nextImagePDP', function () {\n\t    var $activeItem = $('.slick-slide.slick-current.slick-active .js-analytics-nextImagePDP-active');\n\n\t    if (!$activeItem.length) {\n\t        return;\n\t    }\n\n\t    var imageData = {\n\t        itemId: $activeItem.data('product-id'),\n\t        colorVariant: $activeItem.data('color-variant')\n\t    };\n\n\t    events.ga4ViewNextImagePDP(imageData);\n\t});\n\n\t/**\n\t * @description standard search\n\t */\n\t$('body').on('analytics:searchProduct', function (e, searchTerm) {\n\t    if (searchTerm && searchTerm.length) {\n\t        var searchData = {\n\t            searchTerm: searchTerm,\n\t            searchType: \"standard\"\n\t        };\n\t        events.ga4SearchProduct(searchData);\n\t    }\n\t});\n\n\t/**\n\t * @description user clicked on an product image on the product description page\n\t */\n\t$(document).on('click', '.cc-pdp-carousel-item[data-target=\"#pdpImgModal\"]', function () {\n\t    events.ga4OpenPdpImage();\n\t});\n\n\t/**\n\t * @description It is triggered when a user clicks the \"X\" button on the search bar, which is\n\t * used to clear the text entered by the user.\n\t */\n\t$(document).on('click', '.js-resetSearch.cc-search__reset', function () {\n\t    events.ga4ClearSearch();\n\t    return true;\n\t});\n\n\t/**\n\t * @description register the product click (PLP. CART, CAROUSELS ETC.)\n\t */\n\t$(document).on('click', 'a.js-analytics-productClick', function (e) {\n\t    e.preventDefault();\n\n\t    var $product = $(this);\n\t    var url = $product.attr('href'),\n\t        productId = $product.data('analytics-product-id'),\n\t        $analyticsProduct;\n\t    if ($product.hasClass(\"js-analytics-suggestionProduct\")) {\n\t        // Product suggestion on product search\n\t        $analyticsProduct = $('.analytics-product-search.' + productId);\n\t    } else {\n\t        $analyticsProduct = $('.analytics-product.' + productId);\n\t    }\n\n\t    var products = utils.productClickHelper($analyticsProduct),\n\t        analyticsInfo = window.bata_com_ns.analytics;\n\n\t    // save GA4 item list id\n\t    try {\n\t        var listId = utils.ga4GetProductItemListId(products && products.length && products[0]);\n\t        window.sessionStorage.setItem(\"analyticsListId\", listId);\n\t    } catch (error) {\n\t        // session storage not supported\n\t    }\n\t    if (products[0] && products[0].variant) {\n\t        var _ref = \"\",\n\t            _ref2 = _slicedToArray(_ref, 2),\n\t            color = _ref2[0],\n\t            size = _ref2[1];\n\n\t        if (products[0].variant.includes('|')) {\n\t            var _products$0$variant$s = products[0].variant.split('|').map(function (str) {\n\t                return str.trim();\n\t            });\n\n\t            var _products$0$variant$s2 = _slicedToArray(_products$0$variant$s, 2);\n\n\t            color = _products$0$variant$s2[0];\n\t            size = _products$0$variant$s2[1];\n\t        } else {\n\t            color = products[0].variant.trim();\n\t            size = \"\";\n\t        }\n\t        events.ga4SelectColor(products[0].id, color);\n\t        events.ga4SelectSize(products[0].id, size);\n\t    }\n\t    // Trigger the productClick event\n\t    events.productClick(analyticsInfo.currency, analyticsInfo.pageType, products);\n\n\t    window.location.href = url;\n\t});\n\n\t/**\n\t * @description register the PDP product size click\n\t */\n\t$(document).on('click', 'li.js-analytics-selectSizePDP', function () {\n\t    var $product = $(this);\n\t    var productId = $product.data('pid'),\n\t        selectedSize = $product.data('display-value');\n\n\t    if (productId && selectedSize) {\n\t        events.ga4SelectSize(productId, selectedSize);\n\t    }\n\t});\n\n\t/**\n\t * @description register the PDP product color click\n\t */\n\t$(document).on('click', '.js-analytics-selectColorPDPImage', function () {\n\t    var $product = $(this).closest('button.js-colorAttribute');\n\t    var productId = $product.data('pid'),\n\t        selectedColor = $product.data('value');\n\n\t    if (productId && selectedColor) {\n\t        events.ga4SelectColor(productId, selectedColor);\n\t    }\n\t});\n\n\t/**\n\t * @description user clicked on a size guide link on a PDP page\n\t */\n\t$(document).on('click', '#size-guide-asset', function () {\n\t    events.ga4SelectSizeGuide();\n\t    return true;\n\t});\n\n\t/**\n\t * @description user clicked on a wishlist link in the account menu\n\t */\n\t$(document).on('click', '.menu-container a[href*=\"wishlist\"]', function () {\n\t    events.ga4SelectWishlist();\n\t    return true;\n\t});\n\n\t/**\n\t * @description user clicked on a wishlist link in the header\n\t */\n\t$(document).on('click', '.wishlistLink', function () {\n\t    events.ga4SelectWishlist();\n\t    return true;\n\t});\n\n\t/**\n\t * @description user clicked on a search bar in the header\n\t */\n\t$(document).on('click', '.js-headerSearchButton', function () {\n\t    events.ga4StartSearch();\n\t});\n\n\t/**\n\t * @description register the click on a suggested product\n\t */\n\t$(document).on('click', '.js-analytics-suggestionProduct', function () {\n\t    events.trackGAEvent('Ecommerce', 'Suggestion Click', $(this).attr('href'));\n\t});\n\n\t/**\n\t * @description register the display of the cookiesbar\n\t */\n\t$('body').on('analytics:showCookieBar', function () {\n\t    events.trackGAEvent('cookie bar', 'shown', '-', 0, true);\n\t});\n\n\t/**\n\t * @description register the closing of cookiesbar\n\t */\n\t$('.js-cookies-bar-close').on('click', function () {\n\t    events.trackGAEvent('cookie bar', 'accepted', '-', 0, true);\n\t});\n\n\t/**\n\t * @description register the click on a promotional banner\n\t */\n\t$(document).on('click', 'a.js-analytics-banner, a.js-analytics-banner-button', function (e) {\n\t    e.preventDefault();\n\t    var analyticsPromotionsData = [];\n\t    var $banner = $(this);\n\t    var url = $banner.attr('href');\n\n\t    if ($banner.data(\"analytics-title\") && $banner.data(\"analytics-title\") !== \"\" && $banner.data(\"analytics-title\") !== \"No title\") {\n\t        analyticsPromotionsData.push({\n\t            'id': $banner.data(\"analytics-title\"),\n\t            'name': $banner.data(\"analytics-title\")\n\t        });\n\t        events.ga4SelectContent({\n\t            contentId: $banner.data(\"analytics-title\"),\n\t            contentType: 'banner',\n\t            contentName: $banner.data(\"analytics-title\")\n\t        });\n\t        events.ga4SelectPromotion({\n\t            promotionId: $banner.data(\"analytics-title\"),\n\t            promotionName: $banner.data(\"analytics-title\")\n\t        });\n\t        events.PageDesignerPromoClick(analyticsPromotionsData);\n\t    }\n\n\t    window.location.href = url;\n\t});\n\n\t$(document).on('click', '.js-analytics-selectContentBrand .cc-component-textbox-cta', function (e) {\n\t    e.preventDefault();\n\t    e.stopPropagation();\n\n\t    var brandElement = $(this).closest('.js-analytics-selectContentBrand');\n\t    var heroBannerElement = $(this).closest('.js-analytics-herobanner');\n\n\t    if (!brandElement.length || !heroBannerElement.length) {\n\t        return;\n\t    }\n\n\t    var contentType = brandElement.attr('data-analytics-select-content-brand');\n\t    var contentName = heroBannerElement.attr('data-analytics-select-content-name');\n\t    var contentId = heroBannerElement.attr('data-analytics-select-content-id');\n\n\t    if (!contentType || !contentName || !contentId) {\n\t        return;\n\t    }\n\n\t    var selectContentData = {\n\t        contentId: contentId,\n\t        contentType: contentType + ' - banner content',\n\t        contentName: contentName\n\t    };\n\n\t    events.ga4BrandSelectContent(selectContentData);\n\t});\n\n\t/**\n\t * @description register the PDP product size click\n\t */\n\t$(document).on('click', 'li.js-analytics-selectSizePDP', function () {\n\t    var $product = $(this);\n\t    var productId = $product.data('pid'),\n\t        selectedSize = $product.data('display-value'),\n\t        isSelected = $product.data('selected');\n\n\t    if (productId && selectedSize && isSelected) {\n\t        events.ga4SelectSize(productId, selectedSize);\n\t    }\n\t});\n\n\t/**\n\t * @description register the PDP product color click\n\t */\n\t$(document).on('click', '.js-analytics-selectColorPDPImage', function () {\n\t    var $product = $(this).closest('button.js-colorAttribute');\n\t    var productId = $product.data('pid'),\n\t        selectedColor = $product.data('value');\n\n\t    if (productId && selectedColor) {\n\t        events.ga4SelectColor(productId, selectedColor);\n\t    }\n\t});\n\n\t/**\n\t * @description the user select a product sorting rule\n\t * @param sorting {Int} the sort id selected\n\t */\n\t$('body').on('analytics:updateProductSorting', function (e, data) {\n\t    events.ga4ClickFilter(\"Radio\", \"Sort by\", data.sorting);\n\t    events.trackGAEvent(window.bata_com_ns.analytics.pageType, 'sorting', data.sorting);\n\t});\n\n\t/**\n\t * @description register the refinement clicks (not the price one)\n\t */\n\t$('.container').on('click', '.js-analytics-refinement', function (e) {\n\t    e.preventDefault();\n\t    var $refinement = $(this);\n\t    events.ga4ClickFilter(\"Checkbox\", $refinement.data('refinement-id'), $refinement.data('refinement-value'));\n\t    events.trackGAEvent(window.bata_com_ns.analytics.pageType, 'filter - ' + $refinement.data('refinement-id'), $refinement.data('refinement-value'));\n\t});\n\n\t/**\n\t * @description register the category clicks\n\t */\n\t$('.container').on('click', '.js-categoryItem', function (e) {\n\t    e.preventDefault();\n\t    var $refinement = $(this);\n\t    events.ga4ClickFilter(\"Category selection\", $refinement.data('category-id'), $refinement.data('category-title'));\n\t    events.trackGAEvent(window.bata_com_ns.analytics.pageType, 'filter - ' + $refinement.data('category-id'), $refinement.data('category-title'));\n\t});\n\n\t/**\n\t * @description register the \"proceed to checkout\" button click from cart page\n\t */\n\t$('#cart-page-checkout-btn').on('click', function (e) {\n\t    e.preventDefault();\n\t    utils.checkouStepHelper(1, 'cart', true);\n\t});\n\n\t/**\n\t * @description register the \"proceed to checkout\" button click from the minicart\n\t */\n\t$('body').on('analytics:cartSubmit', function () {\n\t    utils.checkouStepHelper(1, 'minicart', true);\n\t});\n\n\t/**\n\t * @description register the checkout step\n\t * @param step {Int} the step number\n\t * @param option {Object} various information, step based\n\t */\n\t$('body').on('analytics:checkoutStep', function (e, data) {\n\t    //step 3 and 4 replace the products's informations displayed, so we need to extract them directly from the order object\n\t    if (data.order) {\n\t        var checkbox = $('.adyen-checkout__checkbox__input[name=\"storeDetails\"]');\n\t        if (checkbox.length) {\n\t            data.order.paymentMethodSaved = checkbox.prop('checked');\n\t        } else {\n\t            data.order.paymentMethodSaved = false;\n\t        }\n\t        utils.updateCheckoutData(data.step, data.option, data.order);\n\t    } else {\n\t        utils.checkouStepHelper(data.step, data.option);\n\t    }\n\t});\n\n\t/**\n\t * @description register the second checkout step\n\t */\n\t$('body').on('analytics:loginStep', function (e, data) {\n\t    var options = $('#checkout-main').attr('data-customer-type') === 'registered' ? 'Logged In' : 'Guest';\n\t    utils.checkouStepHelper(data.step, options, false);\n\t});\n\n\t/**\n\t * @description a new user has registered from the registration form\n\t * @param customerId {String} the ID of the customer registered\n\t */\n\t$('body').on('analytics:registration', function (e, data) {\n\t    events.ga4SignUp({\n\t        method: 'email',\n\t        customerCrmId: data.customerCrmId,\n\t        signupType: 'standard'\n\t    });\n\t    events.registration(data.customerId, data.email, data.phone);\n\t});\n\n\t/**\n\t * @description new registration submit in checkout with lightregistration\n\t */\n\t$('body').on('analytics:registrationCheckout', function () {\n\t    events.ga4SignUpCheckout({\n\t        signupType: 'checkout'\n\t    });\n\t});\n\n\t/**\n\t * @description a user has logged in\n\t * @param customerCrmId {String} the CRM ID of the logged in customer\n\t */\n\t$('body').on('analytics:login', function (e, data) {\n\t    events.ga4Login({\n\t        method: 'email',\n\t        customerCrmId: data.customerCrmId,\n\t        loginType: data.isLoginCheckout ? 'checkout' : 'standard'\n\t    });\n\t    events.login(data.customerCrmId, data.email);\n\t});\n\n\t/**\n\t * @description socialShareClick event on PDP\n\t */\n\t$('a.js-analytics-socialIcon').on('click', function () {\n\t    var $social = $(this);\n\n\t    var socialName = $social.data('share'),\n\t        productId = $social.closest('ul.social-icons').data('analytics-pid'),\n\t        elementId = $social.data('id'),\n\t        elementText = $social.attr('title'),\n\t        linkUrl = $social.attr('href'),\n\t        linkDomain = linkUrl ? new URL(linkUrl).hostname : null,\n\t        type = $social.data('content-type');\n\n\t    var contentType = 'product detail page';\n\t    events.ga4Share({\n\t        method: socialName,\n\t        contentType: contentType,\n\t        itemId: productId,\n\t        elementId: elementId,\n\t        elementText: elementText,\n\t        linkUrl: linkUrl,\n\t        linkDomain: linkDomain,\n\t        content_type: linkDomain,\n\t        type: type\n\t    });\n\t    events.trackGAEvent(contentType, 'social media sharing - ' + socialName, productId);\n\t});\n\n\t/**\n\t * @description storeAvailibility event on PDP\n\t */\n\t$('body').on('analytics:storeAvailibility', function () {\n\t    events.trackGAEvent('storeAvailibility', 'click', $('button#findInStoreButton').data('pid'));\n\t});\n\n\t/**\n\t * @description Handles click on the first level category and tracks the event\n\t */\n\t$('.cc-menu__level__link.cc-menu__firstLevel__link').on('click', function () {\n\t    var $category = $(this).closest('.cc-menu__level__link.cc-menu__firstLevel__link');\n\t    var categoryName = $category.attr('aria-label') || $category.text().trim();\n\t    events.ga4ClickMenuNav(1, categoryName);\n\t});\n\n\t/**\n\t * @description Handles click on the second level category of menu\n\t */\n\t$('.cc-menu__secondLevel__link-wrapper .cc-menu__level__link.cc-menu__secondLevel__link').on('click', function () {\n\t    var $category = $(this);\n\t    var categoryName = $category.attr('aria-label') || $category.text().trim();\n\t    var parentCatName = $(this).closest('.cc-menu__level.cc-menu__secondLevel').siblings('.cc-menu__level__link.cc-menu__firstLevel__link').attr('aria-label');\n\t    events.ga4ClickMenuNav(2, parentCatName + \" - \" + categoryName);\n\t    events.trackGAEvent('dropdown', parentCatName, categoryName);\n\t});\n\n\t/**\n\t * @description Handles click on the second level content links of menu\n\t */\n\t$('.cc-menu__secondLevel__content-link__item a').on('click', function () {\n\t    var $link = $(this);\n\t    var categoryName = $link.text().trim();\n\t    events.ga4ClickMenuNav(2, categoryName);\n\t});\n\n\t/**\n\t * @description Handles click on the third level category of menu\n\t */\n\t$('.cc-menu__level__link.cc-menu__thirdLevel__link').on('click', function () {\n\t    var $category = $(this);\n\t    var thirdCatName = $category.attr('aria-label') || $category.text().trim();\n\t    var secondCatName = $category.closest('.cc-menu__thirdLevel').prev('.cc-menu__secondLevel__link-wrapper').find('.cc-menu__secondLevel__link').attr('aria-label') || $category.closest('.cc-menu__thirdLevel').prev('.cc-menu__secondLevel__link-wrapper').find('.cc-menu__secondLevel__title').text().trim();\n\t    var firstCatName = $category.closest('.cc-menu__secondLevel').siblings('.cc-menu__level__link.cc-menu__firstLevel__link').attr('aria-label') || $category.closest('.cc-menu__secondLevel').siblings('.cc-menu__level__link.cc-menu__firstLevel__link').find('.cc-menu__firstLevel__title').text().trim();\n\t    var parentCatName = firstCatName + ' - ' + secondCatName;\n\t    events.ga4ClickMenuNav(3, parentCatName + \" - \" + thirdCatName);\n\t    events.trackGAEvent('dropdown', parentCatName, thirdCatName);\n\t});\n\n\t/**\n\t * @description Handles click on the highlights section buttons of third level menu\n\t */\n\t$('.cc-menu__HighlightsSection__cta').on('click', function () {\n\t    var $button = $(this);\n\t    var buttonText = $button.text().trim();\n\t    var secondCatName = $button.closest('.cc-menu__HighlightsSection').prev('.cc-menu__secondLevelColumn').find('.cc-menu__secondLevel__link').attr('aria-label') || $button.closest('.cc-menu__HighlightsSection').prev('.cc-menu__secondLevelColumn').find('.cc-menu__secondLevel__title').text().trim();\n\t    var firstCatName = $button.closest('.cc-menu__secondLevel').siblings('.cc-menu__level__link.cc-menu__firstLevel__link').attr('aria-label') || $button.closest('.cc-menu__secondLevel').siblings('.cc-menu__level__link.cc-menu__firstLevel__link').find('.cc-menu__firstLevel__title').text().trim();\n\t    var parentCatName = firstCatName + ' - ' + secondCatName;\n\t    events.ga4ClickMenuNav(3, parentCatName + \" - \" + buttonText);\n\t    events.trackGAEvent('highlight section', parentCatName, buttonText);\n\t});\n\n\t/**\n\t * @description Handles click on the multiple block section links\n\t */\n\t$('.cc-menu__blockForMultipleBlocksSection__link').on('click', function () {\n\t    var $link = $(this);\n\t    var blockTitle = $link.find('.cc-menu__blockForMultipleBlocksSection__text').text().trim();\n\t    var secondCatName = $link.closest('.cc-menu__multipleBlockSection').prev('.cc-menu__secondLevelColumn').find('.cc-menu__secondLevel__link').attr('aria-label') || $link.closest('.cc-menu__multipleBlockSection').prev('.cc-menu__secondLevelColumn').find('.cc-menu__secondLevel__title').text().trim();\n\t    var firstCatName = $link.closest('.cc-menu__secondLevel').siblings('.cc-menu__level__link.cc-menu__firstLevel__link').attr('aria-label') || $link.closest('.cc-menu__secondLevel').siblings('.cc-menu__level__link.cc-menu__firstLevel__link').find('.cc-menu__firstLevel__title').text().trim();\n\t    var parentCatName = firstCatName + ' - ' + secondCatName;\n\t    events.ga4ClickMenuNav(3, parentCatName + \" - \" + blockTitle);\n\t    events.trackGAEvent('collection block', parentCatName, blockTitle);\n\t});\n\n\t/**\n\t * @description Handles click on a category in the mobile menu, fetches parent and current category, and tracks the event\n\t */\n\t$(document).on('click', '.js-category-container .cc-menu__secondLevel__link', function () {\n\t    var $category = $(this);\n\t    if (!$category.data('subcategories')) {\n\t        var parent = $category.data('analytics-parent');\n\t        var name = $category.data('name') || $category.attr('aria-label') || $category.text().trim();\n\t        if (parent) {\n\t            events.ga4ClickMenuNav(2, parent + \" - \" + name);\n\t            events.trackGAEvent('dropdown', parent, name);\n\t        } else {\n\t            events.ga4ClickMenuNav(1, name);\n\t            events.trackGAEvent('main menu', name, '', 0, true);\n\t        }\n\t    }\n\t});\n\n\t/**\n\t * @description Handles click on a brand category in PDP\n\t */\n\t$('body').on('click', '.js-analytics-selectBrandName', function () {\n\t    var button = $(this);\n\t    var pageUrl = button.data('page-url');\n\t    var buttonPosition = button.data('button-position');\n\t    if (!button || !pageUrl || !buttonPosition) {\n\t        return;\n\t    }\n\t    events.ga4SelectBrandName({ pageUrl: pageUrl, buttonPosition: buttonPosition });\n\t});\n\n\t/**\n\t * @description register the quantity variation of product\n\t * @param pid {String} the id of the product changed\n\t * @param qty {Int} the new quantity selected\n\t */\n\t$('body').on('analytics:updateProductQuantity', function (e, data) {\n\t    utils.updateProductQuantity(data.pid, data.qty);\n\t});\n\n\t/**\n\t * @description variationSelectedPLP listener\n\t * @param pid {pid} the id of the product added to the cart\n\t */\n\t$('body').on('analytics:variantSelectionPLP', function (e, data) {\n\t    var product = data.productData;\n\t    var products = [{\n\t        'name': product.name,\n\t        'id': product.id,\n\t        'dimension1': product.dimension1,\n\t        'dimension2': product.dimension2,\n\t        'dimension3': product.dimension3,\n\t        'price': product.price,\n\t        'brand': product.brand,\n\t        'category': product.category,\n\t        'description': product.description,\n\t        'productUrl': product.producturl,\n\t        'categoryUrl': product.categoryurl,\n\t        'imageUrl': product.imageurl,\n\t        'variant': product.color + (product.size ? \" | \" + product.size : \"\"),\n\t        'discount': product.discount,\n\t        'promotionName': product.promotionName,\n\t        'position': product.position,\n\t        'genderName': product.genderName,\n\t        'itemSeason': product.itemSeason,\n\t        'stockStatus': product.stockStatus\n\t    }];\n\t    utils.extendProductDataWithGA4Categories(products[0], product);\n\t    var ga4Products = utils.ga4GetProducts(products);\n\t    // Launch the event depending on variationType, either color or size selection if uknown then use select_item\n\t    if (data.variationType === 'color') {\n\t        events.ga4SelectColor(product.id, product.color);\n\t    } else if (data.variationType === 'size') {\n\t        events.ga4SelectSize(product.id, product.size);\n\t    } else {\n\t        events.ga4SelectItem(window.bata_com_ns.analytics.currency, ga4Products);\n\t    }\n\t    //launch the event variantSelected\n\t    events.variantSelected(window.bata_com_ns.analytics.currency, products);\n\t});\n\n\t/**\n\t * @description Checkout progress event\n\t * @param data {String} checkout step name\n\t */\n\t$('body').on('analytics:checkoutProgress', function () {\n\t    var products = utils.getCheckoutProducts(3, false);\n\t    var ga4Products = utils.ga4GetProducts(products);\n\t    var ga4CheckoutData = utils.ga4GetCartData();\n\t    var checkoutData = {\n\t        currencyCode: window.bata_com_ns.analytics.currency,\n\t        coupon: ga4CheckoutData.couponNames,\n\t        value: ga4CheckoutData.value,\n\t        stepLabel: \"customer info\",\n\t        stepNumber: 1\n\t    };\n\t    events.ga4CheckoutProgress(checkoutData, ga4Products);\n\t});\n\n\t/**\n\t * @description collect the cart product views / impressions\n\t */\n\t$('body').on('analytics:viewMiniCart', function () {\n\t    var products = utils.getProductsCartData(window.bata_com_ns.analytics.pageType);\n\t    var ga4Products = utils.ga4GetProducts(products);\n\t    events.ga4ViewItemList(window.bata_com_ns.analytics.currency, ga4Products);\n\t    events.trackProductImpression(window.bata_com_ns.analytics.currency, products);\n\t});\n\n\t/**\n\t * @description collect the recommendations products views\n\t */\n\t$('body').on('analytics:recommendationsLoaded', function (e, recommendationContainer) {\n\t    utils.trackRecommendationsLists(recommendationContainer);\n\t});\n\n\t/**\n\t * @description GA4 track checkout progress\n\t */\n\t$('body').on('analytics:shippingSubmitted', function (e, order) {\n\t    if (!order) {\n\t        return;\n\t    }\n\t    var products = utils.getCheckoutProducts(3, false);\n\t    var ga4Products = utils.ga4GetProducts(products);\n\t    var checkoutData = {\n\t        currency: window.bata_com_ns.analytics.currency,\n\t        shipping: order.totals && order.totals.shippingTotalAfterDiscountValue,\n\t        shippingTier: order.shipping && order.shipping.length && order.shipping[0].selectedShippingMethod && order.shipping[0].selectedShippingMethod.displayName,\n\t        coupon: order.couponsName,\n\t        value: order.totals && order.totals.grandTotalDecimal\n\t    };\n\t    events.ga4AddShippingInfo(checkoutData, ga4Products);\n\t});\n\n\t/**\n\t * @description GA4 newsletter form submitted\n\t */\n\t$('body').on('analytics:newsletterSubscribe', function () {\n\t    events.ga4Subscribe(\"newsletter\");\n\t});\n\n\t/**\n\t * @description GA4 Add to cart submitting -> extend the form with analytics list id\n\t */\n\t$('body').on('analytics:addToCartSubmitting', function (e, form) {\n\t    if (window.bata_com_ns.analytics.pageType === \"category\") {\n\t        form.analyticsListId = $(\"div.grid-footer > input.category-id\").val() || $('.js-analytics-search-category').data('analytics-category-id') || 'product search';\n\t    } else if (window.bata_com_ns.analytics.pageType === \"product\") {\n\t        form.analyticsListId = $('.analytics-productPDP.analytics-product').data('listId') || 'detail';\n\t    } else {\n\t        form.analyticsListId = 'detail';\n\t    }\n\t});\n\n\t$('body').on('analytics:brandSecondCategoryLevel', function (secondLevelData) {\n\t    var eventData = {\n\t        menuLevel: \"2 - second level category brand\",\n\t        menuSelection: secondLevelData || \"\"\n\t    };\n\t    events.ga4CheckoutProgress(eventData);\n\t});\n\n\t$('body').on('analytics:clickBackInStock', function (e, buttonData) {\n\t    if (!buttonData || !$('#product-id').length) {\n\t        return;\n\t    }\n\n\t    var productId = $('#product-id').val();\n\t    var elementId = buttonData.id || '';\n\t    var elementMessage = buttonData.message || '';\n\n\t    var $analyticsProduct = void 0;\n\n\t    if (utils.getPageType() === \"product\") {\n\t        $analyticsProduct = $('.analytics-productPDP');\n\t    } else {\n\t        $analyticsProduct = $('.analytics-product.' + productId);\n\t    }\n\n\t    var clickBackInStockData = {\n\t        'linkUrl': $analyticsProduct.data('producturl') || '',\n\t        'elementId': elementId,\n\t        'elementText': elementMessage\n\t    };\n\t    events.ga4ClickBackInStock(clickBackInStockData);\n\t});\n\n\t/**\n\t * @description GA4 scroll position\n\t */\n\t$(window).bind('scroll', function () {\n\t    utils.trackScrollPosition();\n\t});\n\n\t$('body').on('change', 'input[name=\"storeDetails\"]', function () {\n\t    events.ga4SaveCreditCard();\n\t});\n\n/***/ })\n\n/******/ });"],"names":["modules","installedModules","__webpack_require__","moduleId","module","exports","id","loaded","call","m","c","p","0","PageTypeMap","events","utils","pushPageData","products","ga4Products","cartPageData","$user","$","pageType","getPageType","customerCrmId","data","customerEmail","currency","countryCode","length","window","bata_com_ns","analytics","country","abTests","callAbTestInteraction","businessHours","getBusinessHours","pageImpression","location","href","ga4CrmId","ga4PageView","pageURL","origin","pagePath","pathname","userID","loginStatus","customerType","PageDesignerPromoImpressionHelper","PRODUCT_IMPRESSION_MAPPING","getProductDataPDP","value","ga4GetProducts","price","promoImpressionHelper","ga4ViewItem","parseFloat","getProductsCartData","ga4GetCartData","ga4ViewCart","couponNames","getProductsData","ga4ViewItemList","trackProductImpression","trackRecommendationsLists","searchHelper","orderConfirmHelper","removeFromCartByUnavailabilityModal","dataLayer","push","event","document","ready","81","PAGE_MAPPING","getPageMappingFromMetaDataElement","CART_MAPPING","category","wishlist","product","WISHLIST_MAPPING","account","billing","brands","cart","checkoutlogin","content","home","ordeConfirmation","shipping","storelocator","82","getOrSetPageMetaDataAttrElement","dataAttrName","val","metaData","getElementsByClassName","getAttribute","setAttribute","mapping","JSON","parse","console","log","e","83","ga4EventPush","object","timestamp","Date","now","ecommerce","table","productClick","currencyCode","click","actionField","list","action","search","isCategorySearch","keyWord","categoryID","numberOfResults","categoryName","search_term","searchKeyword","numberResults","searchType","visitorStatus","url","userEmail","email","impressions","promoImpression","promotions","promoView","PageDesignerPromoImpression","PageDesignerPromoClick","promoClick","variantSelected","detail","addToCart","customerPhone","arTryonInfo","eventData","phone","add","tryOnDesktopClick","tryOnMobileRedirect","removeFromCart","remove","pushCheckoutData","step","option","checkout","purchase","purchaseData","affiliation","revenue","adjustedMerchandizeTotalNetPrice","adjustedMerchandizeTotalTax","tax","coupon","couponCodeName","registration","userId","accountType","socialNetwork","customerID","login","trackGAEvent","label","eventValue","notInteraction","eventCategory","eventAction","eventLabel","eventNotInteraction","ga4AddPaymentInfo","checkoutData","items","payment_type","paymentType","payment_method_saved","paymentMethodSaved","ga4AddShippingInfo","shipping_tier","shippingTier","ga4AddToCart","ga4AddToWishlist","ga4RemoveFromWishlist","ga4BeginCheckout","ga4ClearSearch","ga4CheckoutProgress","step_label","stepLabel","step_number","stepNumber","ga4SaveCreditCard","ga4ClickBackInStock","clickBackInStockData","element_id","elementId","element_text","elementText","link_url","linkUrl","ga4Login","loginData","method","login_type","loginType","ga4Purchase","transaction_id","transactionId","bata_store","bataStore","cart_id","cartId","transaction_type","transactionType","ga4RemoveFromCart","ga4SelectItem","ga4SelectColor","variant","item_id","item_variant","toString","ga4SelectSize","ga4SelectContent","contentData","content_id","contentId","content_type","contentType","content_name","contentName","ga4SelectPromotion","promotionData","promotion_id","promotionId","promotion_name","promotionName","item_name","ga4SelectWishlist","ga4SearchProduct","searchData","searchTerm","search_type","ga4StartSearch","ga4SuccessfulSearch","results_number","resultsNumber","search_method","searchMethod","ga4BrandSelectContent","selectContentData","ga4UnsuccessfulSearch","ga4Share","shareData","itemId","link_domain","linkDomain","type","ga4SignUp","registrationData","signup_form_type","signupType","ga4SignUpCheckout","ga4ViewNextImagePDP","imageData","colorVariant","ga4ViewPromotion","pageData","page_type","page_url","page_path","user_id","login_status","customer_type","ga4ClickMenuNav","menuLevel","menuSelection","menu_level","menu_selection","ga4ClickFilter","filterCategory","filterName","filterValue","filter_category","filter_name","filter_value","ga4Scroll","percent","ga4Subscribe","subscriptionType","subscription_type ","ga4SelectSizeGuide","ga4SelectBrandName","brandData","pageUrl","button_position","buttonPosition","ga4BrandSecondCategoryLevel","ga4OpenPdpImage","abTestInteraction","forEach","item","variant_id","variant_name","version_type","ga4SelectProceedPurchase","order","defaultPaymentMethod","selectedShippingMethod","displayName","84","productOrder","pageMetaDataUtils","scrollPosition","25","50","75","100","getSalesStatus","jQuery","discount","extendProductDataWithGA4Categories","productData","attributeName","index","ga4GetProductItemListId","listId","referrer","sessionStorage","getItem","removeItem","error","map","isSalesStatus","ga4Product","name","position","item_brand","brand","quantity","item_dimension1","dimension1","item_dimension2","dimension2","item_dimension3","dimension3","item_sales_status","size","item_size","item_list_id","item_list_name","genderName","item_gender","itemSeason","item_season","stockStatus","item_stock_status","ga4GetProductsValue","reduce","accumulator","$cartInfo","ga4GetPromotions","promotion","creative_name","creative","creative_slot","getCustomerEmailAndPhone","getProductTileData","$product","color","isNaN","parseInt","getProductTileDataExtended","openedInArTryon","getCheckoutProducts","isCartOpened","$checkoutProducts","elementsFound","each","this","setCheckoutProducts","variants","variationAttributes","displayValue","localizedSize","analyticsProduct","productName","masterProductID","articleNo","variationGroupID","sales","decimalPrice","primaryCategoryID","analyticsListId","getPDPProduct","description","productUrl","categoryUrl","imageUrl","itemSalesStatus","getProductClickTileData","promoHelper","promo","analyticsPromotionsData","i","rank","ga4Promotions","getABtestsDataFromDOM","abTestId","segment","params","productClickHelper","$analyticsProduct","first","variationClickHelper","variationType","variation","masterCategory","breadcrumbs","productID","custom","longDescription","canonicalUrl","URL","baseURI","images","large","values","selected","_i","category1","category2","category3","category4","category5","checkoutUpdate","$checkout","attr","addToCartHelper","pageView","currUser","$productsElements","removeClass","removeFromCartHelper","singleItem","addToWishlistHelper","pid","removeFromWishlistHelper","$search","categoryId","keyword","$productsPLP","productsDisplayed","getProductsDataSearch","$productsSearch","checkouStepHelper","options","isMiniCartOpened","_ga4Products2","_checkoutData","ga4CartData","_ga4Products","_ga4CartData","$checkoutInfo","couponDiscount","ga4PurchaseData","updateCheckoutData","paymentMethod","payment","selectedPaymentInstruments","labelMethod","couponsName","totals","grandTotalDecimal","$promo","updateProductQuantity","$removedProducts","$banner","$bh","recommendationContainer","$recommendation","$recommendations","recommendationName","find","html","trim","$products","trackScrollPosition","scrollPercent","scrollTop","height","toFixed","some","85","_slicedToArray","arr","Array","isArray","Symbol","iterator","Object","sliceIterator","_arr","_n","_d","_e","undefined","_s","next","done","err","TypeError","on","response","variationElement","container","prevObject","className","includes","analyticsTileSelector","tile","numberProductAlreadyDisplayed","$activeItem","preventDefault","_products$0$variant$s2","productId","hasClass","analyticsInfo","setItem","_ref2","_products$0$variant$s","split","str","selectedSize","closest","selectedColor","stopPropagation","brandElement","heroBannerElement","isSelected","sorting","$refinement","checkbox","prop","customerId","isLoginCheckout","$social","socialName","hostname","$category","text","parentCatName","siblings","thirdCatName","secondCatName","prev","$button","buttonText","$link","blockTitle","parent","button","qty","producturl","categoryurl","imageurl","ga4CheckoutData","shippingTotalAfterDiscountValue","form","secondLevelData","buttonData","elementMessage","message","bind"],"mappings":"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"}