{"version":3,"sources":["webpack:///./assets/javascripts/modules/components/TrackingComponent.js","webpack:///./node_modules/js-cookie/src/js.cookie.js","webpack:///./assets/javascripts/modules/utils/ChatUtils.js","webpack:///./assets/javascripts/modules/components/ChatComponent.js"],"names":["TrackingComponent","_classCallCheck","this","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","actions","loadMore","products","length","log","productsData","getTrackingPayloadData","window","listViewMore","e","warn","productView","params","el","product","template","id","listProdClick","console","listCarouselClick","searchProdClick","isAlgoliaEnabled","algolia","carouselName","position","$","ajax","url","type","cache","data","positionId","success","error","errorObj","textStatus","errorThrown","wishlistAdd","productCode","utag","wishlist_add","addToCart","cart_add","removeProduct","cart_remove_click","removeQuantity","price","cart_minus_click","addQuantity","cart_plus_click","shortcutCategoryView","shortcutLabel","shortcutNumber","shortcutType","link","newsletter","pos","ga","formisimo","TealiumConversionForm","formId","result","Tealium","trackingData","formResult","sizeSelection","code","size_selection","document","querySelector","dataset","errorMessage","O2OCCSelect","isCartPage","click_collect","O2OCCSearch","o2oCCSearchInput","SELECTORS","O2OCCSearchInput","val","O2OCCLocalize","O2OCCSelectStore","storeName","filterTracking","productList","facetCode","attr","filter","event_name","sortTracking","sortbyName","sortMethod","sortType","sortCode","sorting_method","sorting_type","startChat","deleteChat","addCartGiftCard","event_category","event_action","event_label","newsletterSubscribe","trackingPosition","event_location","whatsappStart","login","loginType","login_type","register","JSON","stringify","eventName","page_name","pageName","page_type","pageType","userType","store_country","storeCountry","event_method","eventMethod","Component","list","find","trackingPayload","closest","dataTracking","each","push","fitersInput","cartPage","location","split","codeList","listString","index","value","substr","lastIndexOf","_this2","ctx","carousels","querySelectorAll","forEach","carousel","jsComponent","classList","contains","jsTrackCarousel","uniqueProducts","Array","from","uniqueProduct","listCarouselImpression","action","targetElement","_this3","$on","_ref","event","currentTarget","trackingAction","trackAction","target","isLogged","_arguments","arguments","_this4","on","slice","splice","$formisimo","$this","_this5","initiateTracking","bindEvents","bindCustomEvents","addEventListener","trackCarousels","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","factory","undefined","exports","__webpack_require__","module","OldCookies","Cookies","api","noConflict","extend","i","attributes","key","init","converter","path","defaults","expires","Date","setMilliseconds","getMilliseconds","toUTCString","test","write","encodeURIComponent","String","replace","decodeURIComponent","escape","stringifiedAttributes","attributeName","cookie","cookies","rdecode","parts","join","json","charAt","name","read","parse","set","get","getJSON","apply","remove","withConverter","utils_ChatUtils","ChatUtils","chatDeleted","options","defaultSelectors","selectors","allSelectors","assign","hasOwnProperty","setValue","cookieKey","hideCookieKey","labelName","noValue","selector","toRet","tagName","toLowerCase","property","ps","gslbBaseURL","embedded_svc","settings","displayHelpButton","language","liveChatLanguage","directToButtonRouting","prechatFormData","fallbackRouting","personalStylistSnapConfig","buttonIdSnapIn","country","website","toUpperCase","prechatFields","Primary_Language__c","Country__c","website_iso_country_code__c","LiveChat_Brand__c","chatBrand","LiveChat_Path1__c","href","readCookie","COOKIE_CONSTANTS","PATH_1","LiveChat_Path2__c","PATH_2","LiveChat_Path3__c","PATH_3","LiveChat_Path4__c","PATH_4","LiveChat_Path5__c","PATH_5","FirstName","customerFirstName","LastName","customerLastName","Email","customerEmail","LiveChat_Subject__c","prepopulatedPrechatFields","defaultAssistiveText","defaultMinimizedText","chatLabelOnline","disabledMinimizedText","chatLabelOffline","enabledFeatures","entryFeature","addEventHandler","isAgentAvailable","evt","createEvent","initEvent","dispatchEvent","personalStylistBanner","initializeChat","urlEnvironmentSF","urlEnvironmentSnapIn","chatOrgId","buttonNameSnapIn","baseLiveAgentContentURL","deploymentId","deploymentIdSnapIn","buttonId","baseLiveAgentURL","eswLiveAgentDevName","isOfflineSupportEnabled","initESW","pathName","pathname","shiftPathCookies","writeCookie","observer","MutationObserver","records","record","addedNodes","_typeof","nodeType","getAttribute","classes","includes","add","btn","innerHTML","startButton","bindPSChat","prechatObserver","exitChatBtn","applyArrowDownStyles","chatEnding","sizeNode","observe","childList","subtree","div","manipulatePrechat","errorPrechat","chatDock","chatButton","fieldList","chatLabelStart","chatLabelStartDiv","createElement","insertBefore","firstChild","overrideLabels","hidePrechatFields","firstName","lastName","setAttribute","createSubjectSelect","createPrivacyCheckbox","createStartButton","applyPreChatStyle","chatLabelName","chatLabelLastname","chatLabelEmail","hidingFields","#LiveChat_Path1__c","#LiveChat_Path2__c","#LiveChat_Path3__c","#LiveChat_Path4__c","#LiveChat_Path5__c","#LiveChat_Brand__c","#website_iso_country_code__c","#Country__c","#Primary_Language__c","#Type","#LiveChat_Subject__c","preselSubject","chatPreselectedSubject","subjectDiv","selectDiv","selectDivLabel","chatLabelSubject","append","subjectSelect","subjectClassesDefault","subjectClasses","classArr","isArray","cls","subjects","Option","targetSelect","checkboxDiv","checkbox","label","chatLabelPrivacy","fakeSubmit","ctaClassesDefault","ctaClasses","chatLabelCTA","buttonWrapper","bindStartChat","click","setIntervalBtn","setInterval","style","width","display","clearInterval","startChatLink","fakeBtn","privacyInput","checked","checkForm","color","previousElementSibling","pass","fields","#FirstName","#LastName","fieldName","input","cleanFieldError","setFieldError","emailInput","subjectInput","inputBox","chatLabelLengthError","errorUl","errorLi","appendChild","errorBox","element","applyElStyle","shadowRoot","element2","styleID","styleSourceDiv","innerText","styleDiv","trim","shadowDomEl","constructor","endChatContainer","endChatMessage","endChatText","endChatContent","cloneNode","downloadBtn","saveBtn","closeBtn","liveAgentAPI","endChat","setupPersonalStylistDelayedPopup","personalStylistPopUpTriggerTime","personalStylistCloseBtn","triggerIn","personalStylistStartChat","stopPropagation","customerLoggedIn","chatLabelSubjectOptionPS","setTimeout","personalStylistStartWhatsApp","obj","temp","prop","chatLabelSubjectOptionOD","chatLabelSubjectOptionPay","chatLabelSubjectOptionFi","chatLabelSubjectOptionCS","chatLabelSubjectOptionPAv","chatLabelSubjectOptionSt","chatLabelSubjectOptionRR","chatLabelSubjectOptionTA","chatLabelSubjectOptionFidelity","liveChatShowFidelity","SIZE","PATH","cookieName","start","indexOf","end","unescape","substring","cookieValue","ChatComponent","ChatComponent_classCallCheck","liveChatButton","removeEventListener","script","getValue","moduleLoader","loadExternalScript","then","addToObject","setEnvironment","updatePath","runsNewChat"],"mappings":"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","file":"component-ChatComponent.chunks.js","sourcesContent":["import Component from \"../abstracts/Component\";\nimport { Matchmq } from \"../utils/ResolutionHandler\";\n\nexport default class TrackingComponent extends Component {\n\n  get SELECTORS() {\n    return {\n      dataTracking: '[data-tracking-action]',\n      fitersInput: '.js-filters-checkbox',\n      trackingPayload: '[data-tracking-payload]',\n      cartPage: '.t-cart',\n      O2OCCSearchInput: '#sl__search__input',\n    }\n  }\n\n  // retrieve object/sub-object identified by [data-tracking-payload] attribute and parse them with .data() method\n  // to retriieve product JSON\n  getTrackingPayloadData(el, list) {\n    let elements;\n\n    if (list == true) {\n      elements = $(el).find(this.SELECTORS.trackingPayload);\n    } else {\n      elements = $(el).closest(this.SELECTORS.dataTracking).find(this.SELECTORS.trackingPayload);\n    }\n\n    let products = [];\n    elements.each(function () {\n      products.push($(this).data());\n    });\n    return products\n  }\n\n  constructor() {\n    super();\n    this.actions = {\n      // action triggered on clicking on \"view more\" button in listing\n      // template ajax/t-category.jsp should add html tag with product-related + SELECTORS.trackingPayload data attributes\n      loadMore: (products) => {\n        if(products && products.length != 0) {\n          try {\n            this.log(\"tracking loadMore event with \" + products.length + \" more products\");\n            let productsData = this.getTrackingPayloadData(products, true);\n            window.listViewMore(productsData);\n          } catch(e) {\n            this.log(\"listViewMore tracking function not available\");\n          }\n        } else {\n         this.warn(\"no products loaded\");\n         return;\n        }\n      },\n\n      // from category listing or search listin on clicking product box\n      productView: (params, el) => {\n        if (el) {\n          let products = this.getTrackingPayloadData(el, false);\n          if (products.length == 0) {\n            this.warn(\"no products loaded\");\n            return;\n          }\n          // looking for first children of [data-tracking-action] el, with [data-tracking-payload] data attribute\n          let product = products[0];\n          // TODO: add other templates..\n          if (typeof product.template !== 'undefined') {\n            if (\"category-page\" == product.template || \"na:t-editorial-listing\" == product.template || \"na:t-editorial\" == product.template) {\n              try {\n                this.log(\"tracking listProdClick event for product: \" + product.id);\n                window.listProdClick(product);\n              } catch(e) {\n                this.warn(\"listProdClick tracking function not available\");\n              }\n            } else if (product.template == \"na:c-recommendation-engine\") {\n              console.log(\"na:c-recommendation-engine\");\n              try {\n                this.log(\"tracking listCarouselClick event for product: \" + product.id);\n                window.listCarouselClick('recommendation-engine', product);\n              } catch(e) {\n                this.warn(\"listCarouselClick tracking function not available\");\n              }\n            } else if (\"search-page\" == product.template) {\n              try {\n                this.log(\"tracking searchProdClick event for product: \" + product.id);\n                window.searchProdClick(product);\n              } catch(e) {\n                this.warn(\"searchProdClick tracking function not available\");\n              }\n            } else {\n              try {\n                this.log(\"tracking listProdClick event for product: \" + product.id);\n                window.listProdClick(product);\n              } catch(e) {\n                this.warn(\"listProdClick tracking function not available\");\n              }\n            }\n          }\n          if (product.isAlgoliaEnabled) {\n            this.actions.algolia(params, el);\n          }\n        }\n      },\n      listCarouselClick: (params, el) => {\n        console.log(params);\n        if (el) {\n          let products = this.getTrackingPayloadData(el, false);\n          if (products.length == 0) {\n            this.warn(\"no products loaded\");\n            return;\n          }\n          let product = products[0];\n          try {\n            this.log(\"tracking listCarouselClick event for product: \" + product.id);\n            window.listCarouselClick(params.carouselName, product);\n          } catch(e) {\n            this.warn(\"listCarouselClick tracking function not available\");\n          }\n        }\n      },\n      algolia: (params, el) => {\n        if (el) {\n          let products = this.getTrackingPayloadData(el, false);\n          if (products.length == 0) {\n            this.warn(\"no products loaded\");\n            return;\n          }\n          let product = products[0];\n          this.log('algolia ' + product);\n          product.position = product.position + 1; //Algolia è 1-based e non 0-based\n          this.log(\"Algolia \" + product.position + ' ' + product.id);\n          $.ajax({\n            url: '/action/ajax/algolia-notification',\n            type: 'post',\n            cache: 'false',\n            data: {\n              positionId: product.position,\n            },\n            success: function (data) {\n              console.log('algolia success')\n            },\n            error: function (errorObj, textStatus, errorThrown) {\n              console.warn('algolia error')\n            }\n          });\n        }\n      },\n      wishlistAdd: (params) => {\n        let productCode = params.productCode;\n        if (typeof productCode === 'undefined') {\n          this.warn('no productCode found');\n          return;\n        }\n        try {\n          this.log('tracking add to wishlist event with code: ' + productCode);\n          utag.wishlist_add(productCode);\n        } catch(e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      //called from AddToCartComponent.js\n      addToCart: (params) => {\n        let productCode = params.productCode || params;\n        if (typeof productCode === 'undefined') {\n          this.warn('no productCode found');\n          return;\n        }\n        try {\n          this.log('tracking add to cart event with code: ' + productCode);\n          utag.cart_add(';' + productCode);\n        } catch(e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      removeProduct: (params) => {\n        let productCode = params.productCode;\n        if (typeof productCode === 'undefined') {\n          this.warn('no productCode found');\n          return;\n        }\n        try {\n          this.log('tracking removeProduct event with productCode: ' + params.productCode);\n          utag.cart_remove_click(productCode);\n        } catch(e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      removeQuantity: (params) => {\n        let productCode = params.productCode\n        let price = params.price\n        if (typeof productCode === 'undefined') {\n          this.warn('no productCode found');\n          return;\n        }\n        if (typeof price === 'undefined') {\n          this.warn('no price found');\n          return;\n        }\n        try {\n          this.log('tracking removeQuantity event with productCode: ' + params.productCode);\n          utag.cart_minus_click(productCode, 1, price);\n        } catch(e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      addQuantity: (params) => {\n        let productCode = params.productCode\n        let price = params.price\n        if (typeof productCode === 'undefined') {\n          this.warn('no productCode found');\n          return;\n        }\n        if (typeof price === 'undefined') {\n          this.warn('no price found');\n          return;\n        }\n        try {\n          this.log('tracking addQuantity event with productCode: ' + params.productCode);\n          utag.cart_plus_click(productCode, 1, price);\n        } catch(e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      shortcutCategoryView: (params) => {\n        try {\n          this.log('Tracking shortcut category click: ' + params.shortcutLabel);\n          var data = new Object();\n          data['event_name'] = 'select_content';\n          data['event_location'] = params.shortcutNumber// es. shortcut-micro_1, shortcut-macro_4 …\n          data['event_detail'] = params.shortcutLabel// es. our selection, clothing, pantaloni, abiti, …\n          data['content_type'] = params.shortcutType// es. shortcut-micro, shortcut-macro…\n          utag.link(data)\n        } catch(e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      newsletter: (params) => {\n        const pos = params.pos;\n        const type = params.type ? \"-\" + params.type : '';\n        this.log('[Tracking] NL-Subscription, type: ' + type + ' pos: ' + pos);\n        ga('send', 'event', 'NL', 'NL-Subscription' + type, pos);\n      },\n      formisimo: (params) => {\n        this.log(\"formisimo: \", params);\n        if (typeof window.TealiumConversionForm == \"function\") {\n          this.log(\"TealiumConversionForm: \", params);\n          window.TealiumConversionForm(params.formId, params.result);\n        } else {\n          //keep data in a global var\n          window.Tealium.trackingData = {\n            formId: params.formId,\n            formResult: params.result\n          }\n        }\n      },\n      sizeSelection: (params) => {\n        let code = params.code;\n        if (typeof code === 'undefined') {\n          this.warn('no code found');\n          return;\n        }\n        try {\n          this.log('tracking sizeSelection event with code: ' + code);\n          utag.size_selection();\n          let mainSizeRow = document.querySelector('.c-sizes-row');\n          mainSizeRow.dataset.errorMessage = '';\n        } catch (e) {\n          this.warn('Utag tracking is not available');\n        }\n      },\n      O2OCCSelect: (params) => {\n        if (!this.isCartPage()) {\n          return;\n        }\n        try {\n          this.log('tracking 020 CC selected event');\n          utag.click_collect('click');\n        } catch(e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      O2OCCSearch: (params) => {\n        if (!this.isCartPage()) {\n          return;\n        }\n\n        let o2oCCSearchInput = $(this.SELECTORS.O2OCCSearchInput).val();\n        try {\n          this.log('tracking 020 CC store search event: ' + o2oCCSearchInput);\n          utag.click_collect(o2oCCSearchInput);\n        } catch(e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      O2OCCLocalize: (params) => {\n        if (!this.isCartPage()) {\n          return;\n        }\n\n        try {\n          this.log('tracking 020 CC localize event');\n          utag.click_collect('localizza');\n        } catch(e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      O2OCCSelectStore: (params) => {\n        if (!this.isCartPage()) {\n          return;\n        }\n\n        let storeName = params.storeName;\n        if (typeof storeName === 'undefined') {\n          this.warn('no storeName found');\n          return;\n        }\n        try {\n          this.log('tracking 020 CC store select event: ' + storeName);\n          utag.click_collect(\"store:\" + storeName);\n        } catch (e) {\n          this.warn(\"Utag tracking not available\");\n        }\n      },\n      //called from FiltersComponent.js\n      filterTracking: (params, productList) => {\n        let facetCode = $(params).attr(\"data-facet-code\");\n        let code = $(params).attr(\"data-code\");\n        let productsData = this.getTrackingPayloadData(productList, true);\n        if(facetCode && code && productsData) {\n          this.log(\"Triggering filter \" + facetCode + \": \" + code);\n          try {\n            this.log('tracking link event: ' + code);\n            utag.link({\n              filter: facetCode + \":\" + code,\n              event_name: \"filter_usage\",\n              productList: productsData\n            });\n          } catch(e) {\n            this.warn(\"Utag tracking not available\");\n          }\n        }\n      },\n      sortTracking: (sortbyName, sortMethod, sortType, productList) => {\n        let sortCode = \"orderBy\";\n        let productsData = this.getTrackingPayloadData(productList, true);\n        if(sortbyName && productList) {\n          this.log(\"triggering filter \" + sortCode + \": \" + sortbyName);\n\n          try {\n            console.log(\"tracking link event: \" + sortbyName);\n            utag.link({\n              filter: sortCode + \":\" + sortbyName,\n              sorting_method: sortMethod,\n              sorting_type: sortType,\n              event_name: \"filter_usage\",\n              productList: productsData\n            });\n          } catch(e) {\n            console.warn(\"utag tracking not available\");\n          }\n        }\n      },\n      startChat: () => {\n        utag.link({\n          event_name: \"chat_start\"\n        });\n      },\n      deleteChat: () => {\n        utag.link({\n          event_name: \"chat_delete\"\n        });\n      },\n      addCartGiftCard: (params) => {\n        utag.link({\n          event_category: \"gift card\",\n          event_action: \"add to cart\",\n          event_label: \"giftcart \" + params,\n          event_name: \"giftcart_add_to_cart\"\n        });\n      },\n      newsletterSubscribe: (params) => {\n        let position = params.trackingPosition;\n        utag.link({\n          event_name: \"newsletter_subscribe\",\n          event_location: position\n        });\n      },\n      whatsappStart: () => {\n        utag.link({\n          event_name: \"whatsapp_start\"\n        });\n      },\n      login: (params) => {\n        try {\n          this.log('Tracking login event: loginType - ' + params.loginType);\n          utag.link({\n            event_name: \"login\",\n            login_type: params.loginType\n          });\n        } catch(e) {\n        this.warn(\"Utag tracking not available\");\n        }\n      },\n      register: (params) => {\n        if(params && params[0]) {\n          var data = params[0];\n          this.log(\"Triggering register tracking\");\n          try {\n            this.log('tracking register event: ' + JSON.stringify(data));\n            utag.link({\n              event_name: data.eventName,\n              page_name: data.pageName,\n              page_type: data.pageType,\n              login_type: data.userType,\n              store_country: data.storeCountry,\n              event_method: data.eventMethod\n            });\n          } catch(e) {\n            this.warn(\"Utag tracking not available\");\n          }\n        }\n      },\n    }\n  }\n\n  isCartPage() {\n    let element = $(this.SELECTORS.cartPage);\n    if (element.length > 0) {\n      return true;\n    }\n    return false;\n  }\n\n  isLogged() {\n    const locationPath = window.location + \"\";\n    return locationPath.split(\"/\")[3].split(\"?\")[1] === \"login=success\";\n  }\n\n  getListString(codeList) {\n    let listString = \";\";\n\n    $.each(codeList, function (index, value) {\n      listString += value + \",;\";\n    });\n\n    listString = listString.substr(0, listString.lastIndexOf(\",\"));\n    return listString;\n  }\n\n  trackCarousels() {\n    let ctx = this;\n    let carousels = document.querySelectorAll(\"[data-js-track-carousel]\");\n    if (carousels && carousels.length > 0) {\n      carousels.forEach((carousel) => {\n        //find the carousel component\n        let carouselComponent = carousel.dataset.jsComponent;\n        //check if it's actually a carousel\n        if(carouselComponent && carousel.querySelector(\"[data-carousel='true']\") && carousel.querySelector(\"[data-carousel='true']\").classList.contains(\"slick-initialized\")) {\n          let carouselName = carousel.dataset.jsTrackCarousel;\n          let uniqueProducts = carousel.querySelectorAll(\".slick-slide:not(.slick-cloned)\");\n          let productList = [];\n          Array.from(uniqueProducts).forEach( (uniqueProduct) => {\n            productList.push(uniqueProduct.querySelector(\"[data-card]\"));\n          });\n          try {\n            let productsData = ctx.getTrackingPayloadData(productList, true);\n            this.log(\"tracking '\" + carouselName + \"' carousel with \" + productsData.length + \" products\");\n            window.listCarouselImpression(carouselName, productsData);\n          } catch(e) {\n            this.warn(\"listCarouselImpression tracking not available\");\n          }\n        }\n      });\n    }\n  }\n\n  trackAction(action, data, targetElement) {\n    if (this.actions[action]) {\n      if (typeof data['bs.tab'] != 'undefined') {\n        delete data['bs.tab'];\n      }\n      this.log('[Tracking] tracking action caught: ' + action + ' - with params: ' + JSON.stringify(data));\n      this.actions[action](data, targetElement);\n    } else {\n      this.warn('[Tracking] no tracking manager found for action ' + action);\n    }\n  }\n\n  bindEvents() {\n    this.$on('click', ({event}) => {\n      if (!$(event.currentTarget).data('disabled') && $(event.currentTarget).data('trackingAction')) {\n        let data = $(event.currentTarget).data();\n        let action = data.trackingAction;\n        this.trackAction(action, data, event.target);\n      }\n    }, 'body', this.SELECTORS.dataTracking);\n\n    if (this.isLogged()) {\n      this.trackAction('login');\n    }\n  }\n\n  bindCustomEvents() {\n    // ??? custom \"track\" events\n    $('body').on('track', (e, action, params) => {\n      const data = [].slice.call(arguments).splice(2);\n      this.trackAction(action, data);\n    });\n  }\n\n  initiateTracking() {\n    const ctx = this;\n    const $formisimo = $('formisimo');\n    window.Tealium = {};\n\n    if ($formisimo.length > 0) {\n      $formisimo.each(function () {\n        const $this = $(this);\n        const data = [{'formId': $this.data('formId'), 'result': $this.data('formResult')}];\n        ctx.trackAction('formisimo', data);\n      });\n    }\n  }\n\n  render() {\n    this.initiateTracking();\n    this.bindEvents();\n    this.bindCustomEvents();\n    window.addEventListener('load', (event) => {\n      this.trackCarousels();\n    });\n  }\n}\n","/*!\n * JavaScript Cookie v2.2.0\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\tvar stringifiedAttributes = '';\n\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName];\n\t\t\t\t}\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!this.json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/**\n * This utility class helps to manage the live chat\n */\nimport Cookies from 'js-cookie';\nimport TrackingComponent from '../components/TrackingComponent';\n\nclass ChatUtils {\n\n  constructor() {\n    this.TrackingComponent = new TrackingComponent();\n    this.chatDeleted = false;\n  }\n\n  // common selectors, overridable\n  get SELECTORS() {\n    return {\n      // configs\n      liveChatLanguage: '#liveChatLanguage', // live chat language\n      urlEnvironmentSF: '#urlEnvironmentSF', // main url\n      urlEnvironmentSnapIn: '#urlEnvironmentSnapIn', // snap in url\n      chatOrgId: '#chatOrgId', // salesforce id of MM\n      buttonNameSnapIn: '#buttonNameSnapIn', // button name\n      buttonIdSnapIn: '#buttonIdSnapIn', // button name\n      baseLiveAgentContentURL: '#baseLiveAgentContentURL', // live agent url\n      deploymentIdSnapIn: '#deploymentIdSnapIn', // deployment id\n      baseLiveAgentURL: '#baseLiveAgentURL', // base live agent url\n      eswLiveAgentDevName: '#eswLiveAgentDevName', // base live agent url\n      chatBrand: '#chatBrand', // brand\n      // labels\n      chatLabelOnline: '#chatLabelOnline', // chat label when online\n      chatLabelOffline: '#chatLabelOffline', // chat label when offline\n      chatLabelStart: '#chatLabelStart', // chat label start\n      chatLabelName: '#chatLabelName', // chat label name\n      chatLabelLastname: '#chatLabelLastname', // chat label name\n      chatLabelEmail: '#chatLabelEmail', // chat label name\n      chatLabelSubject: '#chatLabelSubject', // chat label subject\n      chatLabelPrivacy: '#chatLabelPrivacy', // chat label subject\n      chatLabelSubjectOptionPS: '#chatLabelSubjectOptionPS', // chat label subject\n      chatLabelSubjectOptionOD: '#chatLabelSubjectOptionOD', // chat label subject\n      chatLabelSubjectOptionPay: '#chatLabelSubjectOptionPay', // chat label subject\n      chatLabelSubjectOptionFi: '#chatLabelSubjectOptionFi', // chat label subject\n      chatLabelSubjectOptionCS: '#chatLabelSubjectOptionCS', // chat label subject\n      chatLabelSubjectOptionPAv: '#chatLabelSubjectOptionPAv', // chat label subject\n      chatLabelSubjectOptionSt: '#chatLabelSubjectOptionSt', // chat label subject\n      chatLabelSubjectOptionRR: '#chatLabelSubjectOptionRR', // chat label subject\n      chatLabelSubjectOptionTA: '#chatLabelSubjectOptionTA', // chat label subject\n      chatLabelSubjectOptionFidelity: '#chatLabelSubjectOptionFidelity', // chat label subject\n      chatPreselectedSubject: '#chatPreselectedSubject', // chat preselected subject\n      chatLabelCTA: '#chatLabelCTA', // chat label subject\n      chatLabelLengthError: '#chatLabelLengthError', // chat label subject\n      // elements\n      chatDock: '.modalContainer.embeddedServiceSidebar.layout-docked.sidebarMaximized .dockableContainer',\n      chatButton: '.livechat-button .uiButton',\n      endChatMessage: '.embeddedServiceLiveAgentStateChat .messageArea',\n      endChatContainer: '.embeddedServiceLiveAgentStateChat .endChatContainer',\n      endChatContent: '#thank-you-feedback',\n      liveChatShowFidelity: '#liveChatShowFidelity',\n      // PS ?\n      personalStylistSnapConfig: '#buttonSnapConfig_personal_stylist',\n      personalStylistPopUpTriggerTime: '#personalStylistPopUpTriggerTime',\n      personalStylistBanner: '.live-chat-personal-stylist-cta__wrapper',\n      personalStylistStartChat: '.live-chat-personal-stylist-cta__wrapper .start-chat',\n      personalStylistStartWhatsApp: '.live-chat-personal-stylist-cta__wrapper .start-whatsapp',\n      personalStylistCloseBtn: '.live-chat-personal-stylist-cta__wrapper .vex-close',\n      customerLoggedIn: '#customerLoggedIn',\n      customerFirstName: '#customerFirstName',\n      customerLastName: '#customerLastName',\n      customerEmail: '#customerEmail',\n      // extra link chat\n      startChatLink: '[data-name=live-chat] a.DEFAULT',\n    }\n  }\n\n  setEnvironment(options = false) {\n    // all default selectors\n    var defaultSelectors = this.SELECTORS;\n    // merge def selectors with override\n    if (typeof options.selectors !== 'undefined') {\n      // var allSelectors = Object.assign(options.selectors,defaultSelectors);\n      var allSelectors = Object.assign(defaultSelectors,options.selectors);\n    } else {\n      // or default assign\n      var allSelectors = defaultSelectors;\n    }\n    // loop the selectors to make them available\n    for (const key in allSelectors) {\n      if (allSelectors.hasOwnProperty(key)) {\n        // console.log(`${key}: ${allSelectors[key]}`);\n        // set value\n        this[key] = this.setValue(key,allSelectors);\n      }\n    }\n    // set the options available\n    if (typeof options !== 'undefined') {\n      this.options = options;\n    }\n    // cookie key\n    if (typeof options.cookieKey === 'undefined') {\n      this.hideCookieKey = 'ps_button_hide';\n      this.options.cookieKey = 'ps_button_hide';\n    } else {\n      this.hideCookieKey = this.options.cookieKey;\n    }\n  }\n\n  /////////////////////////\n  /*  GENERAL FUNCTIONS  */\n  /////////////////////////\n\n  // set value from selectors key\n  setValue(labelName,allSelectors,noValue = null) {\n    var selector = allSelectors[labelName];\n    if (document.querySelector(selector) != null) {\n      var toRet = document.querySelector(selector).value;\n      // but if is not an input i want to return the selector\n      if (typeof toRet == 'undefined' && document.querySelector(selector).tagName.toLowerCase() != 'input') {\n        toRet = document.querySelector(selector);\n      }\n    } else {\n      toRet = noValue;\n    }\n    //\n    return toRet;\n  }\n\n  // return a value of selectors\n  getValue(property) {\n    return this.setValue(property,this.SELECTORS);\n  }\n\n  /////////////////////////\n  /*       CHAT PART     */\n  /////////////////////////\n\n  // initiate the chat\n  initializeChat(ps = false) {\n    // this\n    var ctx = this;\n    // big config chunk for salesforce\n    var initESW = function(gslbBaseURL) {\n      // help btn\n      embedded_svc.settings.displayHelpButton = true;\n      // language conf fallback to en\n      var language = (ctx.liveChatLanguage != '') ? ctx.liveChatLanguage : 'en';\n      embedded_svc.settings.language = language;\n      // directbutton routing on select subject\n      embedded_svc.settings.directToButtonRouting = function(prechatFormData) {\n        // subject is the fourth field on prechat list form\n        if (prechatFormData[3].value == \"Personal Stylist\") {\n          embedded_svc.settings.fallbackRouting = [ctx.personalStylistSnapConfig,ctx.buttonIdSnapIn];\n          return ctx.personalStylistSnapConfig;\n        } else {\n          return ctx.buttonIdSnapIn;\n        }\n      }\n      // country\n      var country = document.querySelector('body').dataset.website != null ? document.querySelector('body').dataset.website.toUpperCase() : \"\";\n      // prechat fields\n      var prechatFields = {\n        Primary_Language__c: language.toUpperCase(),\n        Country__c: country,\n        website_iso_country_code__c: country,\n        LiveChat_Brand__c: ctx.chatBrand,\n        LiveChat_Path1__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_1),\n        LiveChat_Path2__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_2),\n        LiveChat_Path3__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_3),\n        LiveChat_Path4__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_4),\n        LiveChat_Path5__c: window.location.href.slice(0, -1)+ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_5),\n      };\n      //\n      // if is personal stylist i should update the routing\n      if(ps) {\n        // this made the PS working\n        embedded_svc.settings.fallbackRouting = [ctx.personalStylistSnapConfig,ctx.buttonIdSnapIn];\n        // adding prechat fields\n        prechatFields.FirstName = ctx.customerFirstName;\n        prechatFields.LastName = ctx.customerLastName;\n        prechatFields.Email = ctx.customerEmail;\n        prechatFields.LiveChat_Subject__c = 'Personal Stylist';\n      } else {\n        // remove if there is\n        delete embedded_svc.settings.fallbackRouting;\n      }\n      // fill prechat fields\n      embedded_svc.settings.prepopulatedPrechatFields = prechatFields;\n      // labels\n      embedded_svc.settings.defaultAssistiveText = '';\n      embedded_svc.settings.defaultMinimizedText = ctx.chatLabelOnline; // (Defaults to Chat with an Expert)\n      embedded_svc.settings.disabledMinimizedText = ctx.chatLabelOffline; // (Defaults to Agent Offline)\n      //\n      embedded_svc.settings.enabledFeatures = ['LiveAgent'];\n      embedded_svc.settings.entryFeature = 'LiveAgent';\n      // on off button\n      embedded_svc.addEventHandler('onAvailability', function(data) {\n        var eventName = (data.isAgentAvailable) ? 'chatButtonEnabled' : 'chatButtonDisabled';\n        var evt = document.createEvent(\"Events\");\n        evt.initEvent(eventName, true, true);\n        document.dispatchEvent(evt);\n      });\n      embedded_svc.addEventHandler(\"onSettingsCallCompleted\", function(data) {\n        var eventName = data.isAgentAvailable ? 'chatButtonEnabled' : 'chatButtonDisabled';\n        var evt = document.createEvent(\"Events\");\n        evt.initEvent(eventName, true, true);\n        document.dispatchEvent(evt);\n      });\n      // on chat ended by user\n      ctx.chatDeleted = false;\n      embedded_svc.addEventHandler(\"onChatEndedByChasitor\", function() {\n        if (!ctx.chatDeleted) {\n          ctx.chatDeleted = true;\n          ctx.TrackingComponent.actions.deleteChat();\n        }\n      });\n      // after chat is closedddd\n      embedded_svc.addEventHandler('afterDestroy', function() {\n        // if I used the PS chat\n        if (ctx.personalStylistBanner != null && ctx.personalStylistBanner.classList.contains('disappeared')) {\n          // reinit after destroy\n          ctx.initializeChat();\n         }\n      });\n      // afterMinimize\n      embedded_svc.addEventHandler('afterMinimize', function() {\n        // afterMinimize\n        var eventName = 'afterMinimize';\n        var evt = document.createEvent(\"Events\");\n        evt.initEvent(eventName, true, true);\n        document.dispatchEvent(evt);\n      });\n      //\n      // console.log(embedded_svc.settings);\n      //\n      embedded_svc.init(\n        ctx.urlEnvironmentSF,\n        ctx.urlEnvironmentSnapIn,\n        gslbBaseURL,\n        ctx.chatOrgId,\n        ctx.buttonNameSnapIn,\n        {\n          baseLiveAgentContentURL: ctx.baseLiveAgentContentURL,\n          deploymentId: ctx.deploymentIdSnapIn,\n          buttonId: ctx.buttonIdSnapIn,\n          baseLiveAgentURL: ctx.baseLiveAgentURL,\n          eswLiveAgentDevName: ctx.eswLiveAgentDevName,\n          isOfflineSupportEnabled: false\n        }\n      );\n    };\n    // launch chat\n    initESW('https://service.force.com');\n  }\n\n  /////////////////////////\n  /*     COOKIES PART    */ /* legacy part */\n  /////////////////////////\n  // static\n  static get COOKIE_CONSTANTS(){\n    return {\n      SIZE: 5,\n      PATH: 'Path',\n      PATH_1: 'Path1',\n      PATH_2: 'Path2',\n      PATH_3: 'Path3',\n      PATH_4: 'Path4',\n      PATH_5: 'Path5',\n    }\n  }\n  static shiftPathCookies() {\n    for(var i = 0; i < ChatUtils.COOKIE_CONSTANTS.SIZE - 1; i++) {\n      ChatUtils.writeCookie(ChatUtils.COOKIE_CONSTANTS.PATH + (ChatUtils.COOKIE_CONSTANTS.SIZE - i), ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH + (ChatUtils.COOKIE_CONSTANTS.SIZE - i - 1 )));\n    }\n  }\n  static readCookie(cookieName) {\n    if (document.cookie.length > 0) {\n      var start = document.cookie.indexOf(cookieName + \"=\");\n      if (start != -1) {\n        start = start + cookieName.length + 1;\n        var end = document.cookie.indexOf(\";\", start);\n        if (end == -1) end = document.cookie.length;\n        return unescape(document.cookie.substring(start, end));\n      }\n      else {\n        return \"\";\n      }\n    }\n    return \"\";\n  }\n  static writeCookie(cookieName, cookieValue) {\n    document.cookie = cookieName + '=' + escape(cookieValue) + '; path=/; secure;';\n  }\n  // non static\n  updatePath(){\n    var pathName = window.location.pathname;\n    if(pathName !== ChatUtils.readCookie(ChatUtils.COOKIE_CONSTANTS.PATH_1)) {\n      ChatUtils.shiftPathCookies();\n      ChatUtils.writeCookie(ChatUtils.COOKIE_CONSTANTS.PATH_1, pathName);\n    }\n  }\n\n  /////////////////////////\n  /*  CHAT MANIPULATION  */\n  /////////////////////////\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // OBSERVATION PART\n  // main button observer\n  runsNewChat(){\n    var ctx = this;\n    // Dynamic init of components to be loaded\n    var $this = this;\n    // observer listener\n    function listener(records) {\n      var nodes = [];\n      records.forEach(function (record) {\n        var list = record.addedNodes;\n        var i = list.length - 1;\n        for ( ; i > -1; i-- ) {\n          // if I find a new component\n          if ( typeof list[i] == 'object' && list[i].nodeType == '1') {\n            // console.log(list[i])\n            // console.log(list[i].getAttribute('class'))\n            // if I find the chat button\n            if (list[i].getAttribute('class') !== null  ) {\n              var classes = list[i].getAttribute('class').split(' ');\n              if (list[i].getAttribute('class') === 'embeddedServiceHelpButton'  || classes.includes('embeddedServiceHelpButton') ) {\n                // chat button appears + add class\n                list[i].classList.add('livechat-button');\n                // insert chat icon\n                var btn = list[i].querySelector('.embeddedServiceIcon');\n                if (btn != null) {\n                  btn.innerHTML = '<span class=\"icon-chat\"><!--_--></span>';\n                }\n                // bind button start prechat\n                ctx.startButton();\n                // Personal Stylist button\n                ctx.bindPSChat();\n              }\n              // if the prechat opens i launch another observer\n              if (classes.includes('modalContainer') && classes.includes('embeddedServiceSidebar') ) {\n                // when chat window is opened\n                ctx.prechatObserver(list[i]);\n              }\n              if (classes.includes('embeddedServiceSidebarFeature')) {\n                const exitChatBtn = list[i].querySelector('.embeddedServiceSidebarButton.dialog-button-0')\n                if (exitChatBtn) {\n                  exitChatBtn.addEventListener('click', () => {\n                    if (!ctx.chatDeleted) {\n                      ctx.TrackingComponent.actions.deleteChat();\n                      ctx.chatDeleted = true;\n                    }\n                  });\n                }\n              }\n              if (classes.includes('unseenMessageNotificationWrapper') || classes.includes('featureBody')) {\n                // shadow dom arrow check\n                ctx.applyArrowDownStyles();\n              }\n            }\n            if (list[i].getAttribute('class') == 'endChatContainer' ) {\n              // chat ending\n              ctx.chatEnding();\n            }\n          }\n        }\n      });\n    }\n    // define observer\n    var observer = new MutationObserver(listener);\n    // nodes to observe\n    var sizeNode = document.querySelector('body');\n    if ( typeof sizeNode != 'undefined' && sizeNode != null ) {\n      // loop to observe each node\n      observer.observe(sizeNode, { childList: true, subtree: true });\n    }\n  }\n\n  // prechat observer\n  prechatObserver(div) {\n    // Dynamic init of components to be loaded\n    var ctx = this;\n    ctx.chatDeleted = false;\n    // observer listener\n    function listener(records) {\n      var nodes = [];\n      records.forEach(function (record) {\n        var list = record.addedNodes;\n        var i = list.length - 1;\n        for ( ; i > -1; i-- ) {\n          // if i find a new component\n          if ( typeof list[i] == 'object' && list[i].nodeType == '1') {\n            // let's get the div\n            if (list[i].getAttribute('class') !== null  ) {\n              // if there is a certain class\n              var classes = list[i].getAttribute('class').split(' ');\n              if (classes.includes('prechatUI')) {\n                ctx.manipulatePrechat(div);\n              }\n              // error on sending chat\n              if (classes.includes('has-error')) {\n                ctx.errorPrechat(div,list[i]);\n                // add class on dockablecontainer\n                var container = document.querySelector(ctx.SELECTORS.chatDock);\n                container.classList.add('prechat');\n              }\n              // remove the class at the loader\n              if (classes.includes('loadingBallContainer')) {\n                // remove class on dockablecontainer\n                var container = document.querySelector(ctx.SELECTORS.chatDock);\n                container.classList.remove('prechat');\n              }\n            }\n          }\n        }\n      });\n    }\n    // define observer\n    var observer = new MutationObserver(listener);\n    // nodes to observe\n    var sizeNode = document.querySelector('.embeddedServiceSidebar');\n    if ( typeof sizeNode != 'undefined' && sizeNode != null ) {\n      // loop to observe each node\n      observer.observe(sizeNode, { childList: true, subtree: true });\n    }\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  //  MANIPULATION PART\n\n  // maniupulate the prechat html\n  manipulatePrechat(div) {\n    // remove loading class on button\n    var btn = document.querySelector(this.SELECTORS.chatButton);\n    btn.classList.remove('loading');\n\n    // add class on dockablecontainer\n    var container = document.querySelector(this.SELECTORS.chatDock);\n    container.classList.add('prechat');\n\n    // fieldlist inside prechat\n    var fieldList = div.querySelector('.fieldList');\n\n    // chat label pre-fields\n    if (this.chatLabelStart != '') {\n      var chatLabelStartDiv = document.createElement('div');\n      chatLabelStartDiv.classList.add('fieldsTitle');\n      chatLabelStartDiv.innerHTML = this.chatLabelStart;\n      // insert as first child\n      fieldList.insertBefore(chatLabelStartDiv, fieldList.firstChild);\n    }\n\n    // label override\n    this.overrideLabels(div);\n\n    // hide fields\n    this.hidePrechatFields(div);\n\n    // min-lenght fields\n    var firstName = div.querySelector('#FirstName');\n    var lastName = div.querySelector('#LastName');\n    firstName.setAttribute('minlength',3);\n    lastName.setAttribute('minlength',3);\n\n    // subject select\n    this.createSubjectSelect(div);\n\n    // privacy checbox\n    this.createPrivacyCheckbox(div);\n\n    // start button\n    this.createStartButton(div);\n\n    // callbacks called with events\n    var evt = document.createEvent(\"Events\");\n    evt.initEvent(\"prechatOpened\", true, true);\n    document.dispatchEvent(evt);\n\n    // label bind!!! //TODO insert in options\n    // this.labelBindHiding(div);\n\n    // apply style\n    this.applyPreChatStyle();\n\n  }\n\n  overrideLabels(div) {\n    // label override!!!\n    // chatLabelName\n    if (this.chatLabelName != '') {\n      if (div.querySelector('#FirstName') != null) {\n        div.querySelector('#FirstName').closest('div.uiInput').querySelector('label').innerHTML  = this.chatLabelName;\n      }\n    }\n    // chatLabelLastname\n    if (this.chatLabelLastname != '') {\n      if (div.querySelector('#LastName') != null) {\n        div.querySelector('#LastName').closest('div.uiInput').querySelector('label').innerHTML  = this.chatLabelLastname;\n      }\n    }\n    // chatLabelEmail\n    if (this.chatLabelEmail != '') {\n      if (div.querySelector('#Email') != null) {\n        div.querySelector('#Email').closest('div.uiInput').querySelector('label').innerHTML  = this.chatLabelEmail;\n      }\n    }\n  }\n\n  // hide fields in prechat\n  hidePrechatFields(div) {\n    // hiding fields = main selector : closest selector\n    var hidingFields =  {\n     '#LiveChat_Path1__c': 'div.inputText',\n     '#LiveChat_Path2__c': 'div.inputText',\n     '#LiveChat_Path3__c': 'div.inputText',\n     '#LiveChat_Path4__c': 'div.inputText',\n     '#LiveChat_Path5__c': 'div.inputText',\n     '#LiveChat_Brand__c': 'div.inputSelect',\n     '#website_iso_country_code__c': 'div.inputText',\n     '#Country__c': 'div.inputSelect',\n     '#Primary_Language__c': 'div.inputSelect',\n     '#Type': 'div.inputSelect',\n     '#LiveChat_Subject__c': 'div.inputText',\n    }\n    // loop the fields\n    for(var key in hidingFields) {\n      // check and hide\n      if (div.querySelector(key) != null) {\n        div.querySelector(key).closest(hidingFields[key]).classList.add('hidden');\n      }\n    }\n  }\n\n  // create subject select\n  createSubjectSelect(div) {\n    // check preselected subject\n    var preselSubject = document.querySelector(this.SELECTORS.chatPreselectedSubject).value;\n    if (preselSubject != '') {\n      div.querySelector('#LiveChat_Subject__c').value = preselSubject;\n      var evt = document.createEvent(\"Events\");\n      evt.initEvent(\"change\", true, true);\n      div.querySelector('#LiveChat_Subject__c').dispatchEvent(evt);\n      return;\n    }\n    // fields\n    var fieldList = div.querySelector('.fieldList');\n    // subject select\n    var subjectDiv = document.createElement('div');\n    subjectDiv.classList.add('inputSelect','embeddedServiceSidebarFormField','subjectSelect','form-group');\n    // div select\n    var selectDiv = document.createElement('div');\n    selectDiv.classList.add('uiInput','uiInput--default','uiInputSelect','uiInput--select');\n    // label\n    var selectDivLabel = document.createElement('label');\n    selectDivLabel.classList.add('uiLabel','uiLabel-left','form-element__label');\n    selectDivLabel.innerHTML = this.chatLabelSubject;\n    // append to select div\n    selectDiv.append(selectDivLabel);\n    // create select and options\n    var subjectSelect = document.createElement('select');\n    subjectSelect.setAttribute('name','subjectSelect') ;\n    subjectSelect.setAttribute('id','subjectSelect') ;\n    subjectSelect.setAttribute('placeholder',this.chatLabelSubject) ;\n    // stock classes\n    if (typeof this.options.subjectClassesDefault === 'undefined' || this.options.subjectClassesDefault !== 'false') {\n      subjectSelect.classList.add('slds-style-select','select','js-subject','mc-custom');\n    }\n    // options classes\n    if (typeof this.options.subjectClasses !== 'undefined') {\n      // check if is array and add classes\n      var classArr = this.options.subjectClasses;\n      if (Array.isArray(classArr)) {\n        // loop the classes to add them\n        classArr.forEach((cls, i) => {\n          subjectSelect.classList.add(cls);\n        });\n      }\n    }\n    // check list on options\n    if (typeof this.options.subjects !== 'undefined') {\n      for (const key in this.options.subjects) {\n        if (this.options.subjects.hasOwnProperty(key)) {\n          // set value\n          subjectSelect.options[subjectSelect.options.length] = new Option(this[key], this.options.subjects[key]);\n        }\n      }\n    }\n    // append to select div\n    selectDiv.append(subjectSelect);\n    // append to subject div\n    subjectDiv.append(selectDiv);\n    // append to fields\n    fieldList.append(subjectDiv);\n    // type or subject\n    var targetSelect = null;\n    if (div.querySelector('#LiveChat_Subject__c') != null) {\n      targetSelect = div.querySelector('#LiveChat_Subject__c');\n    } else {\n      if (div.querySelector('#Type') != null) {\n        targetSelect = div.querySelector('#Type');\n      }\n    }\n    // first val setting\n    if (subjectSelect.value !== '' && targetSelect != null) {\n      targetSelect.value = subjectSelect.value;\n      var evt = document.createEvent(\"Events\");\n      evt.initEvent(\"change\", true, true);\n      targetSelect.dispatchEvent(evt);\n    }\n    // event!\n    subjectSelect.addEventListener('change',e => {\n      // this works\n      if (targetSelect != null) {\n        targetSelect.value = subjectSelect.value;\n        var evt = document.createEvent(\"Events\");\n        evt.initEvent(\"change\", true, true);\n        targetSelect.dispatchEvent(evt);\n      }\n    });\n  }\n\n  createPrivacyCheckbox(div) {\n    // fields\n    var fieldList = div.querySelector('.fieldList');\n    // checkbox\n    var checkboxDiv = document.createElement('div');\n    checkboxDiv.classList.add('inputText','embeddedServiceSidebarFormField','privacyInput','custom-checkbox');\n    var checkbox = document.createElement('input');\n    checkbox.setAttribute('type','checkbox') ;\n    checkbox.setAttribute('id','privacyInput') ;\n    var label = document.createElement('label');\n    label.innerHTML = this.chatLabelPrivacy;\n    // append to checkbox div\n    checkboxDiv.append(checkbox);\n    checkboxDiv.append(label);\n    // append to fields\n    fieldList.append(checkboxDiv);\n  }\n\n  //\n  createStartButton(div) {\n    // fake button\n    var fakeSubmit = document.createElement('a');\n    fakeSubmit.setAttribute('href','javascript:void(0)');\n    fakeSubmit.classList.add('fakeSubmit','disabled');\n    // stock class\n    if (typeof this.options.ctaClassesDefault === 'undefined' || this.options.ctaClassesDefault !== 'false') {\n      fakeSubmit.classList.add('embeddedServiceSidebarButton','uiButton--default','uiButton');\n    }\n    // options class\n    if (typeof this.options.ctaClasses !== 'undefined') {\n      // check if is array and add classes\n      var classArr = this.options.ctaClasses;\n      if (Array.isArray(classArr)) {\n        // loop the classes to add them\n        classArr.forEach((cls, i) => {\n          fakeSubmit.classList.add(cls);\n        });\n      }\n    }\n    // button inner html\n    fakeSubmit.innerHTML = this.chatLabelCTA;\n    // append button\n    var buttonWrapper = div.querySelector('.buttonWrapper');\n    buttonWrapper.querySelector('button').classList.add('hidden');\n    buttonWrapper.append(fakeSubmit);\n    // bind action\n    this.bindStartChat(div);\n    // go PS chat if banner is not null, if is disappeared but is not launched or not launch by click\n    if (this.personalStylistBanner != null &&\n        this.personalStylistBanner.classList.contains('disappeared') &&\n        !this.personalStylistBanner.classList.contains('launched') &&\n        !this.personalStylistBanner.classList.contains('launch_on_click')\n      ) {\n      // control class\n      this.personalStylistBanner.classList.add('launched');\n      // launch chat\n      document.querySelector('.startButton').click();\n    }\n  }\n\n  // hide label on click - OPTIONAL\n//  labelBindHiding(div) {\n//    // fields\n//    var fieldList = div.querySelector('.fieldList');\n//    // label bind!!!\n//    var inputs = fieldList.querySelectorAll('input');\n//    if(inputs != null) {\n//      inputs.forEach(input => {\n//        var label = input.closest('.embeddedServiceSidebarFormField').querySelector('label');\n//        input.addEventListener('keyup',e => {\n//          if (e.target.value !== '') {\n//            label.classList.add('hidden');\n//          } else {\n//            label.classList.remove('hidden');\n//          }\n//        });\n//      });\n//    }\n//  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // FUNCTIONALITY PART\n\n  // start chat button\n  startButton() {\n    var btn = document.querySelector(this.SELECTORS.chatButton);\n    btn.addEventListener('click',e => {\n      btn.classList.add('loading');\n      // reset width small trick\n      var setIntervalBtn = setInterval(function(){\n        if (btn.closest('.helpButton').style.width != '') {\n          btn.closest('.helpButton').style.width = 'auto';\n          btn.querySelector('.embeddedServiceIcon').style.display = 'block';\n          clearInterval(setIntervalBtn);\n        }\n      }, 10);\n    });\n    // extra chat link on menus\n    if (this.startChatLink != null) {\n      this.startChatLink.addEventListener('click', e => {\n        btn.click();\n      });\n    }\n    // callbacks called with events\n    var evt = document.createEvent(\"Events\");\n    evt.initEvent(\"startChatButton\", true, true);\n    document.dispatchEvent(evt);\n    // listening to redo button\n    document.addEventListener('chatButtonEnabled', () => {\n      btn.classList.remove('loading');\n      btn.querySelector('.embeddedServiceIcon').style.display = 'block';\n    });\n  }\n  // bind the fake button to the start chat button\n  bindStartChat(div) {\n    // bind click btn\n    var fakeBtn = div.querySelector('.fakeSubmit');\n    var btn = div.querySelector('.buttonWrapper button');\n    var privacyInput = div.querySelector('#privacyInput');\n    fakeBtn.addEventListener('click', e => {\n      // check\n      if (privacyInput.checked && this.checkForm(div)) {\n        btn.click();\n        this.TrackingComponent.actions.startChat();\n      } else {\n        // fallback\n        if (!privacyInput.checked) {\n          privacyInput.closest('.privacyInput').style.color = 'red';\n        }\n      }\n    });\n    // bind enable btn\n    privacyInput.addEventListener('change', e => {\n      if (e.target.checked) {\n        fakeBtn.classList.remove('disabled');\n      } else {\n        fakeBtn.classList.add('disabled');\n      }\n    });\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // CHECKS PART\n  // error prechat\n  errorPrechat(div,el){\n    // i only care about fake fields\n    // SUBJECT\n    var subjectSelect = el.previousElementSibling.querySelector('input#LiveChat_Subject__c');\n    if (subjectSelect == null) {\n      subjectSelect = el.previousElementSibling.querySelector('#Type');\n    }\n    if (subjectSelect != null) {\n      var subjectDiv = div.querySelector('.subjectSelect');\n      if (subjectDiv != null) {\n        subjectDiv.append(el);\n        subjectDiv.querySelector('.uiInputSelect').classList.add('has-error');\n      }\n    }\n  }\n\n  // checks form\n  checkForm(div){\n    // init\n    var pass = [];\n    // fields\n    var fields = {\n      '#FirstName': {\n        'type' : 'length',\n        'value' : 3\n      },\n      '#LastName': {\n        'type' : 'length',\n        'value' : 3\n      }\n    }\n    for (const fieldName in fields){\n      if(fields.hasOwnProperty(fieldName)){\n        // get input\n        var input = div.querySelector(fieldName);\n        // types\n        // length\n        if (fields[fieldName].type == 'length') {\n          if (input.value.length == 0 || input.value.length >= fields[fieldName].value ) {\n            // pass\n            pass.push('true');\n            // clean error if not empty\n            if (input.value.length != 0) {\n              this.cleanFieldError(input);\n            }\n          } else {\n            // no pass\n            pass.push('false');\n            // set\n            this.setFieldError(input,'length');\n          }\n        }\n      }\n    }\n    // salesforce standard fields\n    var emailInput = div.querySelector('input#Email');\n    var subjectInput = ( div.querySelector('#LiveChat_Subject__c') != null ) ? div.querySelector('#LiveChat_Subject__c') : div.querySelector('#Type');\n    // reset errorrr if subject is not empty !!!! (because the subject field is fake)\n    if (subjectInput.value != '' && div.querySelector('.subjectSelect .uiInputSelect') != null ) {\n      div.querySelector('.subjectSelect .uiInputSelect').classList.remove('has-error');\n    }\n    // if one of the 2 field is empty i want to trigger the salesforce validation\n    if (emailInput.value == '' || subjectInput.value == '') {\n      return true;\n    }\n    // return true if i dont find fals in pass array\n    return !pass.includes('false');\n  }\n\n  // set the error field\n  setFieldError(div,type) {\n    if (div != null) {\n      // set error classes\n      div.classList.add('has-error');\n      div.closest('.uiInput').classList.add('has-error');\n      var label = '';\n      // adding error ul\n      var inputBox = div.closest('.embeddedServiceSidebarFormField');\n      // check\n      if (inputBox.querySelector('ul.uiInputDefaultError')) return;\n      // label\n      if (type == 'length') {\n        label = this.chatLabelLengthError;\n      }\n      // create ul\n      var errorUl = document.createElement('ul');\n      errorUl.classList.add('uiInput','uiInputDefaultError','has-error','uiInput--default','uiInput--input');\n      var errorLi = document.createElement('li');\n      errorLi.setAttribute('class','form-element__help');\n      errorLi.innerHTML = label;\n      errorUl.appendChild(errorLi);\n      // append error\n      inputBox.append(errorUl);\n    }\n  }\n\n  // clean the error from field\n  cleanFieldError(div) {\n    // remove class\n    div.classList.remove('has-error');\n    // box\n    var inputBox = div.closest('.embeddedServiceSidebarFormField');\n    // find error box\n    var errorBox = inputBox.querySelector('ul.uiInputDefaultError');\n    if (errorBox != null) {\n      errorBox.remove();\n    }\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // SHADOW DOM HACKS\n\n  applyArrowDownStyles() {\n    //\n    let element = document.querySelector('.modalContainer.embeddedServiceSidebar .embeddedServiceLiveAgentStateChatInputFooter.chasitorInputWrapper embeddedservice-chat-unseen-message-notification')\n    // check 1\n    if (element === null) return false;\n    this.applyElStyle('#arrowDownStyle',element);\n    // other shadow dom elems\n    if (element.shadowRoot !== null) {\n      let element2 = element.shadowRoot.querySelector(' lightning-button-icon');\n      if (element2 !== null) this.applyElStyle('#arrowDownStyle2',element2);\n    }\n  }\n\n  applyPreChatStyle() {\n    // console.log('applyPreChatStyle');\n    // headerChatStyle\n    let element = document.querySelector('.modalContainer.embeddedServiceSidebar.layout-docked.sidebarMaximized .dockableContainer embeddedservice-chat-header')\n    if (element !== null) this.applyElStyle('#headerChatStyle',element);\n  }\n\n  applyElStyle(styleID,element) {\n    let styleSourceDiv = document.querySelector(styleID);\n    if (styleSourceDiv === null) return false;\n    let style = styleSourceDiv.innerText;\n    let styleDiv = document.createElement( 'style' );\n    // console.log('chatstyle',styleID,style.trim());\n    styleDiv.innerHTML = style.trim();\n    let shadowDomEl = element.shadowRoot;\n    // console.log('shadowDomEl' , shadowDomEl);\n    // console.log('shadowDomEl' , shadowDomEl.constructor);\n    if (shadowDomEl !== null && shadowDomEl.constructor.name === 'ShadowRoot') {\n      // console.log('shadowDomEl.constructor.name',shadowDomEl.constructor.name);\n      shadowDomEl.appendChild( styleDiv )\n    } else {\n      console.log(' no shadow dom ')\n    }\n  }\n\n  //////////////////////////////////////////////////////////////////////////////////////////////////////\n  // ENDING PART\n  // chat ending\n  chatEnding() {\n    // vars\n    var endChatContainer = document.querySelector(this.SELECTORS.endChatContainer);\n    var endChatMessage = document.querySelector(this.SELECTORS.endChatMessage);\n    // if i find the wrapper i append the endchat\n    if (endChatContainer != null) {\n      var endChatContent = document.querySelector(this.SELECTORS.endChatContent);\n      var endChatText = endChatContent.cloneNode(true);\n      endChatText.classList.remove('d-none');\n      // insert as first child\n      endChatContainer.insertBefore(endChatText, endChatContainer.firstChild);\n      // add class\n      endChatMessage.classList.add('chatEnded');\n    }\n    // save transcription\n    var downloadBtn = document.querySelector(this.SELECTORS.endChatContainer+' .container-feedback .btn-download a');\n    if (downloadBtn != null) {\n      downloadBtn.addEventListener('click', () => {\n        var saveBtn = document.querySelector(this.SELECTORS.endChatContainer+' .saveTranscriptButton');\n        if (saveBtn != null) {\n          saveBtn.click();\n        }\n      });\n    }\n    //close chat\n    var closeBtn = document.querySelector(this.SELECTORS.endChatContainer+' .container-feedback .btn-close');\n    if (closeBtn != null) {\n      closeBtn.addEventListener('click', () => {\n        embedded_svc.liveAgentAPI.endChat();\n      });\n    }\n  }\n\n  /////////////////////////\n  /*  PERSONAL STYLIST   */\n  /////////////////////////\n  // bind PS chat\n  bindPSChat() {\n    // PS part\n    var ctx = this;\n    if (this.personalStylistSnapConfig != null) {\n      // PS Chat binded\n      // check cookie and launch PS\n      if(Cookies.get(this.hideCookieKey) == 'undefined' || !Cookies.get(this.hideCookieKey)){\n        // launch ps chat bind\n        this.setupPersonalStylistDelayedPopup(this.personalStylistPopUpTriggerTime);\n      }\n      // set cookie  on close to avoid show button\n      var closeBtn = this.personalStylistCloseBtn;\n      if ( closeBtn != null ) {\n        closeBtn.addEventListener('click', () => {\n          Cookies.set(ctx.hideCookieKey, 'true', {\n            path: '/'\n          });\n          // hide button\n          ctx.personalStylistBanner.classList.add('disappeared','hidden');\n        });\n      }\n    }\n  }\n\n  // display PS button\n  setupPersonalStylistDelayedPopup(triggerIn){\n    var ctx = this;\n    // click start chat button\n    var chatButton = document.querySelector(this.SELECTORS.chatButton);\n    // if there is the start chat button , i bind the start chat\n    if (this.personalStylistStartChat != null) {\n      this.personalStylistStartChat.addEventListener('click',e => {\n        e.stopPropagation();\n        // init chat\n        // if is logged in\n        if (this.customerLoggedIn === 'true') {\n           ctx.initializeChat(true);\n        } else {\n          // if not i set the preselected subject\n          document.querySelector(this.SELECTORS.chatPreselectedSubject).value = this.options.subjects.chatLabelSubjectOptionPS;\n          // hide button\n          ctx.personalStylistBanner.classList.add('launch_on_click');\n        }\n        // click start chat button\n        chatButton.click();\n        // remove PS banner\n        // hide button\n        ctx.personalStylistBanner.classList.add('disappeared','hidden');\n        // put cookie\n        Cookies.set(ctx.hideCookieKey, 'true', {\n          path: '/'\n        });\n      });\n    }\n    // if there is the banner i want to show it\n    if (this.personalStylistBanner != null) {\n      // button appears if there are buttons to start chat or whatsapp\n      setTimeout(()=> {\n        if((ctx.personalStylistStartWhatsApp != null || ctx.personalStylistStartChat != null ) && chatButton.classList.contains('helpButtonEnabled') ) {\n          ctx.personalStylistBanner.classList.remove('d-none');\n        }\n      }, triggerIn);\n      // hide push on disable button\n      document.addEventListener('chatButtonDisabled', () => {\n        ctx.personalStylistBanner.classList.add('d-none');\n      });\n      // show push on enable button\n      document.addEventListener('chatButtonEnabled', () => {\n        setTimeout(()=> {\n          if((ctx.personalStylistStartWhatsApp != null || ctx.personalStylistStartChat != null ) && chatButton.classList.contains('helpButtonEnabled') ) {\n            ctx.personalStylistBanner.classList.remove('d-none');\n          }\n        }, triggerIn);\n      });\n      // prechatOpened\n      document.addEventListener('prechatOpened', () => {\n        // if the preselected subject is filled, i reset it so the next time is not preselected\n        if (document.querySelector(ctx.SELECTORS.chatPreselectedSubject).value != '') {\n          document.querySelector(ctx.SELECTORS.chatPreselectedSubject).value = '';\n        }\n      });\n    }\n  }\n\n  addToObject(obj, key, value, index) {\n    // Create a temp object and index variable\n    var temp = {};\n    var i = 0;\n    // Loop through the original object\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        // If the indexes match, add the new item\n        if (i === index && key && value) {\n          temp[key] = value;\n        }\n        // Add the current item in the loop to the temp obj\n        temp[prop] = obj[prop];\n        // Increase the count\n        i++;\n      }\n    }\n    // If no index, add to the end\n    if (!index && key && value) {\n      temp[key] = value;\n    }\n    return temp;\n  }\n\n}\n\nexport default new ChatUtils();\n","import Component from '../abstracts/Component';\nimport ChatUtils from '../utils/ChatUtils';\n\n/**\n Chat component\n */\nexport default class ChatComponent extends Component {\n\n  constructor() {\n    super();\n  }\n\n  bindEvents() {\n    // contact us button\n    let liveChatButton = document.querySelector('a[data-name=live-chat]');\n\n    // button online\n    this.$on('chatButtonEnabled', (e) => {\n      if (liveChatButton != null) {\n        liveChatButton.classList.remove('not-available');\n        liveChatButton.classList.add('available');\n      }\n    });\n    // button offline\n    this.$on('chatButtonDisabled', (e) => {\n      if (liveChatButton != null) {\n        liveChatButton.classList.add('not-available');\n        liveChatButton.classList.remove('available');\n        liveChatButton.removeEventListener('click',function(){});\n      }\n    });\n  }\n\n  /////\n  render() {\n    this.log('rendering...');\n    // some events\n    this.bindEvents();\n    // check if new chat is enabled\n    let chatEnabled = (document.querySelector('#chatEnabled') != null) ? document.querySelector('#chatEnabled').value : false;\n    // if is enabled let's launch it\n    if (chatEnabled == 'true') {\n      // script call\n      let script = ChatUtils.getValue('urlEnvironmentSF')+'/embeddedservice/5.0/esw.min.js';\n      // get script and initialize chat\n      this.moduleLoader.loadExternalScript(script).then(() => {\n        this.log('loading...');\n        let options = {\n           selectors: {\n            startChatLink: 'a[data-name=live-chat]',\n            chatLabelOnline: '#chatLabelOnlineNew',\n          },\n          subjects: {\n            chatLabelSubject: '',\n            chatLabelSubjectOptionOD: 'Orders and deliveries',\n            chatLabelSubjectOptionRR: 'Refunds and Returns',\n            chatLabelSubjectOptionPay: 'Payment, promotions and Gift Cards',\n            chatLabelSubjectOptionFi: 'Collaboration',\n            chatLabelSubjectOptionCS: 'Comments and Suggestions',\n            chatLabelSubjectOptionPAv:'Product information and availability',\n            chatLabelSubjectOptionSt: 'Stores',\n            chatLabelSubjectOptionTA: 'Technical assistance'\n          },\n          ctaClasses: ['cta','cta-primary','cta-full-width'],\n          // ctaTemplate: '<span class=\"bg-top\"></span><span data-cta-text=\":label:\" class=\"text\">:label:</span><span class=\"bg-bottom\"></span>'\n        }\n        if (ChatUtils.getValue('liveChatShowFidelity') == 'true') {\n           options.subjects = ChatUtils.addToObject(options.subjects,'chatLabelSubjectOptionFidelity','Fidelity Card',3);\n        }\n        if (ChatUtils.getValue('personalStylistSnapConfig')) {\n          options.subjects = ChatUtils.addToObject(options.subjects,'chatLabelSubjectOptionPS','Personal Stylist',1);\n        }\n\n        // setup env\n        ChatUtils.setEnvironment(options);\n        // update cookie path\n        ChatUtils.updatePath();\n        // init the chat\n        ChatUtils.initializeChat();\n        // new chat modifier\n        ChatUtils.runsNewChat();\n      });\n    }\n  }\n}\n"],"sourceRoot":""}