{"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}\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.} 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 add_shipping_info event\n\t * @param {Object} checkoutData Checkout data\n\t * @param {Array.} 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.} 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.} 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.} 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.} 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.} 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.} 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.} 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.} 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.} 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.} 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.} 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.} 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};\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 }\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\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","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","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","order","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","selectedShippingMethod","displayName","form","secondLevelData","buttonData","elementMessage","message","bind"],"mappings":"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"}