{"version":3,"file":"7327.chunk.96fdd0d564133cca42a7.js","mappings":"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","sources":["webpack://apexchatwidgets/./widgets/core/BaseWidget.js","webpack://apexchatwidgets/./widgets/core/ChatUtilityFunctions.js","webpack://apexchatwidgets/./widgets/core/WidgetBase.js","webpack://apexchatwidgets/./widgets/core/enums/BrandingWidget.js","webpack://apexchatwidgets/./widgets/core/extend.js","webpack://apexchatwidgets/./widgets/core/hooks/ADACompliant.js","webpack://apexchatwidgets/./widgets/core/hooks/ADACompliantActionButton.js","webpack://apexchatwidgets/./widgets/core/hooks/AgentImageHandler.js","webpack://apexchatwidgets/./widgets/core/hooks/AnalyticsTracking.js","webpack://apexchatwidgets/./widgets/core/hooks/BehaviorTypes.js","webpack://apexchatwidgets/./widgets/core/hooks/Branding.js","webpack://apexchatwidgets/./widgets/core/hooks/ManageFocusOnKeyEvents.js","webpack://apexchatwidgets/./widgets/core/hooks/SetADACompliantAttributes.js","webpack://apexchatwidgets/./widgets/core/hooks/TempStorageCache.js","webpack://apexchatwidgets/./widgets/core/hooks/TimeTracker.js","webpack://apexchatwidgets/./widgets/core/hooks/addStyleTextInIframe.js","webpack://apexchatwidgets/./widgets/core/hooks/crossDomainTracking.js","webpack://apexchatwidgets/./widgets/core/hooks/elementIsNotNULL.js","webpack://apexchatwidgets/./widgets/core/hooks/getElementsByClassName.js","webpack://apexchatwidgets/./widgets/core/hooks/getFixedTop.js","webpack://apexchatwidgets/./widgets/core/hooks/getQueryStringValue.js","webpack://apexchatwidgets/./widgets/core/hooks/getScript.js","webpack://apexchatwidgets/./widgets/core/hooks/getStyleForIframe.js","webpack://apexchatwidgets/./widgets/core/hooks/getViewport.js","webpack://apexchatwidgets/./widgets/core/hooks/googleAnalytics4.js","webpack://apexchatwidgets/./widgets/core/hooks/googleAnalyticsObjectInit.js","webpack://apexchatwidgets/./widgets/core/hooks/hideElement.js","webpack://apexchatwidgets/./widgets/core/hooks/isAcceptKey.js","webpack://apexchatwidgets/./widgets/core/hooks/isEscapeKey.js","webpack://apexchatwidgets/./widgets/core/hooks/isTabKey.js","webpack://apexchatwidgets/./widgets/core/hooks/logClickEventOnGA.js","webpack://apexchatwidgets/./widgets/core/hooks/observe.js","webpack://apexchatwidgets/./widgets/core/hooks/parseTemplate.js","webpack://apexchatwidgets/./widgets/core/hooks/sendChatAndLeadAnalytics.js","webpack://apexchatwidgets/./widgets/core/hooks/sendGAClientId.js","webpack://apexchatwidgets/./widgets/core/hooks/showElement.js","webpack://apexchatwidgets/./widgets/core/hooks/throttleByFunctionName.js","webpack://apexchatwidgets/./widgets/core/hooks/underscore.js","webpack://apexchatwidgets/./widgets/core/utilities/Clone.js","webpack://apexchatwidgets/./widgets/trackingcookies.js"],"sourcesContent":["// import v3IframeStyles from '../styles/v3/v3-iframes.css';\r\n\r\nimport BaseClass from './BaseClass';\r\n//import LiveChatRoom from './LiveChatRoom'; // TODO: remove LiveChatRoom dependency as it's used in dropdown invitation case\r\nimport WidgetTypes from './enums/WidgetTypes';\r\nimport { getInitiatedBy } from './ChatUtilityFunctions';\r\nimport TempCache from './enums/TempCache';\r\nimport clone from './utilities/Clone';\r\nimport BrandingWidget from './enums/BrandingWidget'\r\nimport GlobalVariables from './GlobalVariables';\r\nimport getElementsByClassName from './hooks/getElementsByClassName';\r\nimport ChatMode from './hooks/ChatMode';\r\nimport ManageFocusOnKeyEvents from './hooks/ManageFocusOnKeyEvents';\r\nimport TimeTracker from './hooks/TimeTracker';\r\nimport addStyleTextInIframe from './hooks/addStyleTextInIframe';\r\nimport ADACompliant from './hooks/ADACompliant';\r\nimport logClickEventOnGA from './hooks/logClickEventOnGA';\r\nimport log from './hooks/log';\r\nimport ProfileTextType from './hooks/ProfileTextType';\r\nimport { ChatSize, ChatType, InvitationAction, InvitationDisplayMode, InvitationTabDirection, InviteSize, LogLevel, MobileDisplayMode, Position, SkinInviteType, SkinRegionType } from './enums/Enum';\r\nimport parseTemplate from './hooks/parseTemplate';\r\nimport Branding from './hooks/Branding';\r\nimport getViewport from './hooks/getViewport';\r\nimport getFixedTop from './hooks/getFixedTop';\r\nimport sendChatAndLeadAnalytics from './hooks/sendChatAndLeadAnalytics';\r\nimport TempStorageCache from './hooks/TempStorageCache';\r\nimport Browser from './hooks/Browser';\r\nimport ServerLog from './hooks/ServerLog';\r\nimport getScript from './hooks/getScript';\r\nimport throttleByFunctionName from './hooks/throttleByFunctionName';\r\nimport SetADACompliantAttributes from './hooks/SetADACompliantAttributes';\r\nimport googleAnalyticsObjectInit from './hooks/googleAnalyticsObjectInit';\r\nimport getGaClientId from './hooks/getGaClientId';\r\nimport { writeTrafficSourcesLogic } from '../trackingcookies';\r\nimport Behaviors from './WidgetBase';\r\nimport getQueryStringValue from './hooks/getQueryStringValue';\r\nimport BehaviorTypes from './hooks/BehaviorTypes';\r\nimport getStyleForIframe from './hooks/getStyleForIframe';\r\nimport observe from './hooks/observe';\r\nimport Cookies from './hooks/Cookies';\r\nimport WidgetStates from './hooks/WidgetStates';\r\nimport getCookieValue from './hooks/getCookieValue';\r\nimport getStorageAPIValue from './hooks/getStorageAPIValue';\r\nimport storageAPIExists from './hooks/storageAPIExists';\r\nimport isEscapeKey from './hooks/isEscapeKey';\r\nimport isTabKey from './hooks/isTabKey';\r\nimport isAcceptKey from './hooks/isAcceptKey';\r\nimport showElement from './hooks/showElement';\r\nimport logIt from '../../logIt';\r\n\r\nexport class BaseWidget extends BaseClass {\r\n /** BASIC INIT LIFECYCLE METHODS * */\r\n constructor(options) {\r\n super(options); // Zee: this will set global variable in BaseClass\r\n const me = this;\r\n // important: adjust DOM object based on options.iframeId\r\n if (options.iframeId) {\r\n const iFrame = document.getElementById(options.iframeId);\r\n this.DOM = (iFrame.contentWindow || iFrame.contentDocument).document;\r\n this.iFrameWindow = iFrame.contentWindow || iFrame.contentDocument;\r\n }\r\n this.container = this.getContainer();\r\n this.options = Object.assign(\r\n {\r\n targetElementId: null,\r\n chatSize: ChatSize.Small,\r\n overrideHandlerId: 0,\r\n invitationDisplayMode: InvitationDisplayMode.Drop,\r\n containerId: 'apexchat_invitation_container_wrapper',\r\n maskId: 'apexchat_invitation_mask',\r\n inProgressContainerId: 'apexchat_invitation_container_inprogress_wrapper',\r\n minimizedContainerId: 'apexchat_invitation_container_minimized_wrapper',\r\n exitPopupRegionEditorContainerId:\r\n 'apexchat_invitation_container_exit_popup_region_editor_wrapper',\r\n callToActionId: 'apexchat_invitation_calltoaction',\r\n mobileDOM_MinimizeInvitation: 'apexchat_chevronstyle_dom_invitation_minimize',\r\n mobileDOM_Chevron: 'apexchat_chevronstyle_arrow_direction',\r\n mobileDOM_ChevronInMinimizedContainer: 'apexchat_chevronstyle_min_arrow_direction',\r\n chevronStyle_MinimizeInvitation: 'apexchat_chevronstyle_dom_min_minimize',\r\n chevronStyle_AgentImage: 'apexchat_chevronstyle_dom_agent_img',\r\n minimizedCallToActionId: 'apexchat_minimized_invitation_calltoaction',\r\n closeButtonId: 'apexchat_invitation_close',\r\n altCloseButtonId: 'apexchat_invitation_close_alt',\r\n tabHeaderId: 'livechat_invitation_tab',\r\n exitPopupContainerId: 'apexchat_exit_popup_chat_wrapper',\r\n exitPopupMinimizedContainerId:\r\n 'apexchat_invitation_container_exit_popup_minimized_wrapper',\r\n initialLoadTimeout: 500,\r\n subsequentLoadTimeout: 0,\r\n animationTime: 0,\r\n handlerImageUrl: '/contents/images/agents/amanda.jpg',\r\n agentName: 'Amanda',\r\n agentAliasId: 0,\r\n operatorId: 0,\r\n defaultOperatorId: -1,\r\n visitorId: 0,\r\n profileId: 0,\r\n highlightColor: '#fff118',\r\n // if true, when the close icon is clicked, the entire thing will hide, and no mimized version will be shown\r\n hideOnClose: false,\r\n alwaysShowMinimizedInviteInSecondaryLocation: false,\r\n // if true, when the close icon is clicked and \"hideOnClose\" is true, the invitation will not show again until the session runs out\r\n maintainHiddenState: false,\r\n // if true, when the close icon is clicked, the minimized version will be shown from then on\r\n maintainMinimizedState: false,\r\n skinInviteType: SkinInviteType.Standard,\r\n invitationTabTextTemplate: 'Live Chat',\r\n invitationMinimizedTabTextTemplate: 'Live Chat',\r\n invitationInProgressTabTextTemplate: 'Live Chat',\r\n invitationTextTemplate: \"Hi! My name's <#=agentName#>. Can I help you?\",\r\n invitationMinimizedTextTemplate: 'Chat with <#=agentName#>',\r\n invitationInProgressTextTemplate: 'Chatting with <#=agentName#>',\r\n invitationActionTextTemplate: 'Start Chat',\r\n invitationActionVideoTextTemplate: 'Video Chat',\r\n invitationVideoActionText: parseTemplate(\r\n this.invitationVideoActionTextTemplate,\r\n me.options\r\n ),\r\n invitationMinimizedActionTextTemplate: 'Start Chat',\r\n invitationInProgressActionTextTemplate: 'Resume Chat',\r\n invitationCloseTextTemplate: '',\r\n invitationWidgetStyle: '',\r\n invitationWidgetStyleQuirks: '',\r\n invitationWidgetStyleIE6: '',\r\n invitationWidgetStyleCustom: '',\r\n invitationWidgetTemplate: '',\r\n invitationWidgetTemplateMinimized: '',\r\n invitationWidgetTemplateInProgress: '',\r\n poweredBy:\r\n 'Powered by ApexChat',\r\n chatMode: ChatMode.Windowed,\r\n position: Position.Right,\r\n secondaryPosition: Position.Right,\r\n invitationHideShowTabEnabled: false,\r\n invitationTabDirection: InvitationTabDirection.Down,\r\n invitationShowTabDuration: 1000,\r\n wiggleEnabled: false,\r\n wiggleInterval: 10000,\r\n rememberShownState: true,\r\n preloadEnabled: false,\r\n fixFlash: false,\r\n isMobile: false,\r\n mobileDisplayMode: MobileDisplayMode.Default,\r\n frameBuster: false,\r\n frameBusterMessage: '',\r\n invitationMask: false,\r\n language: getQueryStringValue('language') || 'eng',\r\n enableChatWindowCloseWarning: false,\r\n chatbar: null,\r\n reShowIntervalMinutes: 0,\r\n smsEnabled: false,\r\n smsSubject: 'I need...',\r\n smsNumber: '9999999999',\r\n applyMobileViewport: false\r\n },\r\n options || {}\r\n );\r\n this.widget = options.widget;\r\n this.draggables = options.draggables; // a new property to keep custom dragable areas/elements in the form of css selectors\r\n this.initiatedBy = getInitiatedBy(this.widget);\r\n // this.query = this.getQueryString(false, true, this.language, this.interceptorResults);\r\n\r\n this.behaviors = [];\r\n this.state.changeState({ toState: WidgetStates.Initialized });\r\n }\r\n ready() {\r\n const me = this;\r\n this.state.changeState({ toState: WidgetStates.Ready });\r\n TempStorageCache.add('WriteTrafficSourcesLogicApplied', false, true);\r\n }\r\n create() {\r\n const me = this;\r\n if (me.options.styleName) {\r\n console.log(`domain ${GlobalVariables.CdnBaseUrl} Loading ${me.options.styleName}.css`);\r\n getStyleForIframe(\r\n `${GlobalVariables.CdnBaseUrl}contents/scripts/dist/${me.options.styleName}.css?ver=${env.BUILD_HASH}`,\r\n 'apexchat_Iframe_css',\r\n undefined, me.DOM\r\n );\r\n }\r\n\r\n me.state.changeState({ toState: WidgetStates.Created });\r\n const isWriteTrafficSourcesLogicApplied = TempStorageCache.get(\r\n 'WriteTrafficSourcesLogicApplied'\r\n );\r\n if (me.isInvitationType() && isWriteTrafficSourcesLogicApplied == 'false') {\r\n // ref. Chat-4318\r\n // while browsing within the domain, no need to change the cookie\r\n if (document.referrer.split('/')[2] != document.domain) {\r\n const previousSessionCookie = getCookieValue(\r\n TempCache.VISITOR_TRACKING_COOKIE\r\n );\r\n // over write the cookie only if paid search info was missing from before\r\n // JIRA 4044 - In case of version #1 we dont load trackingcookies.js in which writeTrafficSourceLogic Function is written.\r\n // checking function before calling.\r\n if (\r\n writeTrafficSourcesLogic &&\r\n (typeof previousSessionCookie === 'undefined' ||\r\n (previousSessionCookie &&\r\n previousSessionCookie.indexOf('overwritetrafficsource=true') > -1))\r\n ) {\r\n writeTrafficSourcesLogic(TempCache.VISITOR_TRACKING_COOKIE);\r\n TempStorageCache.add('WriteTrafficSourcesLogicApplied', true, true);\r\n }\r\n }\r\n }\r\n // Ref. CHAT-4659, CHAT-4959, we need to initialize ans listen for incoming messages for Main/RD inv\r\n if (me.options.widget == WidgetTypes.DropDown) {\r\n if (me.isActiveChatMinimizedOnPageReload()) {\r\n logIt(\r\n 'websync connected in case of an active chat refreshed in min state...'\r\n );\r\n if (me.room) {\r\n // already connected? exit to avoid double init\r\n return;\r\n }\r\n import(/* webpackChunkName: \"liveChatRoom\" */ './LiveChatRoom').then((module) => {\r\n const LiveChatRoom = module.default;\r\n me.room = new LiveChatRoom(\r\n Object.assign(me.options, {\r\n isFromInvitation: true\r\n })\r\n );\r\n me.room.initChatRoom();\r\n me.room.setChatId(\r\n getCookieValue(TempCache.CHAT_ID_COOKIE),\r\n getCookieValue(TempCache.CHAT_TOKEN_COOKIE)\r\n );\r\n });\r\n }\r\n }\r\n // addStyleTextInIframe(\r\n // me.options.v3IframeStyles,\r\n // 'apexchat_Iframe_css',\r\n // undefined,\r\n // me.DOM\r\n // );\r\n\r\n if (!TempCache.isStaticButtonRegistered) {\r\n me.registerStaticButton();\r\n me.subscribe(WidgetTypes.Static + WidgetStates.Clicked, (data) => {\r\n me.onInvitationClick(me, me.options.language, data.chatInitiatedBy);\r\n });\r\n TempCache.isStaticButtonRegistered = true;\r\n }\r\n }\r\n registerStaticButton() {\r\n const me = this;\r\n const staticButton = document.getElementsByClassName('apexchat-new-static-button')[0];\r\n if (staticButton) {\r\n const chatInitiatedBy = getInitiatedBy(WidgetTypes.Static);\r\n observe(staticButton, 'click', () => {\r\n me.postMessage({\r\n event: WidgetTypes.Static + WidgetStates.Clicked,\r\n data: { chatInitiatedBy }\r\n });\r\n });\r\n }\r\n }\r\n show() {\r\n const me = this;\r\n // This changeState is generic and doesnt need any condition.\r\n this.state.changeState({ toState: WidgetStates.ShownNormal });\r\n // ADA Compliance\r\n // summary: CSS Class 'apexchat_ada_compliance' has no CSS Styling behind it means it won't effect on UI.\r\n // Its only for detecting the ADA Complianced HTML elements on which we do need to have the TAB Focus.\r\n // This is the Utility function which takes all HTML elements having the class 'apexchat_ada_compliance' as ARRAY, and apply the TabIndex on all of them.\r\n ADACompliant.push(me.DOM.getElementsByClassName('.apexchat_ada_compliance')).apply();\r\n // ADA compliance add attribute in start chat button\r\n SetADACompliantAttributes(\r\n me.DOM,\r\n this.options.chatMode,\r\n 'apexchat_ada_compliance_start_chat'\r\n );\r\n }\r\n /* CHAT related */\r\n preloadChatOptions(cb) {\r\n const me = this;\r\n let query = this.getQueryString(false, false);\r\n if (me.options.visitorInfoId) {\r\n query += `& visitorInfoId=${me.options.visitorInfoId}`;\r\n }\r\n let url;\r\n switch (this.options.invitationVersion) {\r\n case 2: // V3\r\n url = `${env.API_URL}/api/invitations/chats/preload?${query}`;\r\n break;\r\n case 1:\r\n url = `${evn.API_URL}/api/invitations/chats/preload?${query}`;\r\n break;\r\n case 0:\r\n default:\r\n url = `${evn.API_URL}api/invitations/chats/preload?${query}`;\r\n break;\r\n }\r\n getScript(url, () => {\r\n me.preLoadedOptions = ApexChat.getPreloadedChatOptions();\r\n ApexChat.preLoadedOptions = me.preLoadedOptions;\r\n if (me.preLoadedOptions) {\r\n // check preloaded options exist then store in local storage. CHAT-7522\r\n ApexChat.localStorageAPI.Store(\r\n 'livechat_preloaded_options',\r\n JSON.stringify(me.preLoadedOptions)\r\n );\r\n }\r\n me.state.changeState({\r\n toState: WidgetStates.PreloadedChatOptions\r\n });\r\n if (cb) {\r\n cb();\r\n }\r\n });\r\n }\r\n execChatStartHandler(callback, queryString) {\r\n const me = this;\r\n var query = ''\r\n\r\n if (queryString) {\r\n query = queryString;\r\n } else {\r\n query = this.getQueryString(false, true, me.options.language);\r\n }\r\n\r\n // const domain = ApexChat.Utils.removeHttpProtocols(me.options.domain);\r\n let url = `${GlobalVariables.LiveChatServiceUrl}Handlers/ChatStartHandler.ashx?initiatedBy=${me.initiatedBy}&${query}`;\r\n if (me.options.visitorInfoId) {\r\n url += `& visitorInfoId=${me.options.visitorInfoId}`;\r\n }\r\n if (me.options.videoGreetEnabled) {\r\n url += '&videoGreetWatchTime=' + ApexChat.options.videoGreetWatchTime;\r\n }\r\n getScript(url, () => {\r\n me.chatStartOptions = ApexChatStartData;\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n execChatStartHandlerWithThrottle(cb) {\r\n return throttleByFunctionName(\r\n this.execChatStartHandler.bind(this), 5\r\n );\r\n }\r\n preloadFormOptions(cb) {\r\n let query = this.getQueryString(false, false);\r\n if (this.options.chatMode == ChatMode.Windowed) {\r\n query = ApexChatQuery;\r\n }\r\n getScript(`${GlobalVariables.ApexChatBaseUrl}Handlers/v2/FormPreload.ashx?${query}`, () => {\r\n cb();\r\n });\r\n }\r\n preloadVisitorFormOptions(cb) {\r\n const query = this.getQueryString(false, false);\r\n const url = `${GlobalVariables.ApexChatBaseUrl}Handlers/v2/VisitorFormPreload.ashx?${query}`;\r\n getScript(url, () => {\r\n cb();\r\n });\r\n }\r\n reInitChat() {\r\n const me = this;\r\n const query = me.getQueryString(false, true, me.options.language);\r\n me.preloadChatOptions(() => {\r\n me.$.get(`${GlobalVariables.LiveChatServiceUrl}/Handlers/ChatStartHandler.ashx?${query}`, (data) => {\r\n me.chatStartOptions = ApexChatStartData;\r\n me.uicontroller.room = null;\r\n me.uicontroller.loadChatRoom();\r\n });\r\n });\r\n }\r\n /** METHODS FOR STATE MANAGEMENT * */\r\n getCurrentState() {\r\n // ZEE: this must be tested against each widget type!\r\n const state = this.state.getCurrentState();\r\n return state;\r\n }\r\n minimize() {\r\n this.state.changeState({\r\n toState: WidgetStates.ShownMinimized\r\n });\r\n showElement(this.options.parentDivId);\r\n showElement(\r\n this.DOM.getElementById(this.widget + WidgetStates.ShownMinimized)\r\n );\r\n }\r\n maximize() {\r\n this.state.changeState({\r\n toState: WidgetStates.ShownMaximized\r\n });\r\n showElement(this.options.parentDivId);\r\n showElement(\r\n this.DOM.getElementById(this.widget + WidgetStates.ShownMaximized)\r\n );\r\n }\r\n hide() {\r\n this.state.changeState({ toState: WidgetStates.Hidden });\r\n }\r\n popout() {\r\n this.state.changeState({ toState: WidgetStates.PoppedOut });\r\n }\r\n async close() {\r\n this.state.changeState({ toState: WidgetStates.Closed });\r\n const module = await import(/* webpackChunkName: \"questionTypeRendererFactory\" */ '../questiontypes/QuestionTypeRendererFactory')\r\n const QuestionTypeRendererFactory = module.default;\r\n new QuestionTypeRendererFactory().destroy();\r\n }\r\n /** EVENT HANDLERS * */\r\n onInvitationClick(e, language, chatInitiatedBy, extra) {\r\n const me = this;\r\n logClickEventOnGA();\r\n const isDomChatPoppedOut =\r\n ApexChat.WindowedChatStarted ||\r\n getStorageAPIValue('livechat_has_windowed_chat_started') == 'true';\r\n const tracker = new TimeTracker()\r\n tracker.start();\r\n var usingSmsService = false;\r\n // me.invokeChatInterceptor(); It is now being invoked in getQueryString function\r\n if (chatInitiatedBy == 'FacebookMessenger') {\r\n me.startFacebookChat();\r\n } else if (chatInitiatedBy == 'TabSMS') {\r\n chatInitiatedBy = 'Tab';\r\n me.getSmsService(chatInitiatedBy);\r\n usingSmsService = true;\r\n } else if (chatInitiatedBy == 'BarSmsContainer') {\r\n me.getSmsService(chatInitiatedBy);\r\n usingSmsService = true;\r\n } else if (this.options.chatMode == ChatMode.Windowed) {\r\n if (this.options.requestVisitorInfo) {\r\n this.postMessage({\r\n event: me.state.widget + WidgetStates.VisitorFormClicked,\r\n data: {\r\n chatInitiatedBy,\r\n interceptorResults: me.interceptorResults\r\n }\r\n });\r\n } else {\r\n me.options.language = language;\r\n me.options.chatInitiatedBy = chatInitiatedBy;\r\n me.postMessage({\r\n event: me.state.widget + WidgetStates.Clicked,\r\n data: { chatInitiatedBy }\r\n }); // Must known to widget that chat has been clicked and windowed chat started.\r\n me.startWindowedChat(Object.assign(me.options, extra)); // extend option object with extra paramters\r\n }\r\n } else if (this.options.chatMode == ChatMode.DOM && !isDomChatPoppedOut) {\r\n /* Preventing DOM chat to open again if DOM chat popped out */ if (\r\n this.options.requestVisitorInfo\r\n ) {\r\n this.postMessage({\r\n event: me.state.widget + WidgetStates.VisitorFormClicked,\r\n data: {\r\n chatInitiatedBy,\r\n interceptorResults: me.interceptorResults\r\n }\r\n });\r\n } else {\r\n this.postMessage({\r\n event: me.state.widget + WidgetStates.Clicked,\r\n data: {\r\n chatInitiatedBy,\r\n interceptorResults: me.interceptorResults,\r\n selectedLanguage: language\r\n }\r\n });\r\n }\r\n ApexChat.options._domStartTime = new Date().getTime();\r\n }\r\n if (usingSmsService) {\r\n var visitorsGoogleClientId = Cookies.get('ga_client_id');\r\n sendChatAndLeadAnalytics(ApexChat.options.companyTrackingSettings, true, visitorsGoogleClientId);\r\n }\r\n if (isDomChatPoppedOut) {\r\n /* To refocus windowed chat when user click again on invitation icon */\r\n me.startWindowedChat(me.options);\r\n }\r\n if (this.widget == WidgetTypes.DropDown) {\r\n // this.state.changeState({ toState: WidgetStates.Clicked });\r\n }\r\n // e.stopPropagation();\r\n // e.preventDefault();\r\n }\r\n invokeChatInterceptor() {\r\n const me = this;\r\n try {\r\n if (window.ChatInterceptor) {\r\n me.interceptorResults = window.ChatInterceptor();\r\n // allow end-user interception\r\n if (me.interceptorResults === false) {\r\n }\r\n }\r\n } catch (exInner) {\r\n // don't care\r\n }\r\n }\r\n startFacebookChat() {\r\n const me = this;\r\n if (this.options.isMobile) {\r\n // If user on Mobile Opening Facebook Messenger App\r\n me.DOM.getElementById('apex-hidden-anchorTag').setAttribute(\r\n 'href',\r\n `https://m.me/${this.options.companyFacebookPageName}/`\r\n );\r\n } else {\r\n // If user on Desktop, Starting Facebook Chat with Company's facebook page.\r\n me.DOM.getElementById('apex-hidden-anchorTag').setAttribute(\r\n 'href',\r\n `https://www.facebook.com/messages/t/${this.options.companyFacebookPageName}`\r\n );\r\n }\r\n me.DOM.getElementById('apex-hidden-anchorTag').click();\r\n }\r\n onVideoChatClick(e, language, chatInitiatedBy) {\r\n this.state.changeState({\r\n toState: WidgetStates.DynamicVisitorFormClicked\r\n });\r\n }\r\n setClickCallToAction(element, chatInitiatedBy, extra) {\r\n const me = this;\r\n const clickCallToAction = me.DOM.getElementById(element);\r\n let language =\r\n chatInitiatedBy == 'Tab'\r\n ? me.options.chatTab.language\r\n : chatInitiatedBy == 'Bar'\r\n ? me.options.chatbar.language\r\n : me.options.language;\r\n if (!language) {\r\n language = me.options.language;\r\n }\r\n if (clickCallToAction) {\r\n clickCallToAction.style.cursor = 'pointer';\r\n clickCallToAction.addEventListener('click',\r\n me.onInvitationClick.bind2(me, language, chatInitiatedBy, extra)\r\n ); // extra is a additional parameter we want to send on invitation click\r\n me.handleADA(\r\n clickCallToAction,\r\n me.onInvitationClick.bind2(me, language, chatInitiatedBy, extra)\r\n );\r\n }\r\n }\r\n openWindowed(e, v3WidgetType) {\r\n const me = this;\r\n me.postMessage({\r\n event: v3WidgetType + WidgetStates.Clicked,\r\n data: {}\r\n });\r\n me.options.chatInitiatedBy = getInitiatedBy(v3WidgetType);\r\n me.startWindowedChat(me.options);\r\n }\r\n bindWindowedHandler(selector, v3WidgetType) {\r\n const me = this;\r\n const element = me.DOM.querySelector(selector);\r\n if (!element) {\r\n return;\r\n }\r\n element.addEventListener('click', (e) => {\r\n me.openWindowed(e, v3WidgetType);\r\n })\r\n me.handleADA(element, me.openWindowed.bind2(me, v3WidgetType));\r\n }\r\n formChat(e, language, chatInitiatedBy) {\r\n this.state.changeState({\r\n toState: WidgetStates.VisitorFormClicked\r\n });\r\n }\r\n permutator(inputArr) {\r\n const results = [];\r\n function permute(arr, memo) {\r\n let cur;\r\n memo = memo || [];\r\n for (let i = 0; i < arr.length; i++) {\r\n cur = arr.splice(i, 1);\r\n if (arr.length === 0) {\r\n results.push(memo.concat(cur));\r\n }\r\n permute(arr.slice(), memo.concat(cur));\r\n arr.splice(i, 0, cur[0]);\r\n }\r\n return results;\r\n }\r\n return permute(inputArr);\r\n }\r\n getSmsMessage(chatInitiatedBy) {\r\n const me = this;\r\n switch (chatInitiatedBy) {\r\n case 'Tab':\r\n case 'TabSmsContainer':\r\n return me.options.chatTab.chatTabSmsMessage;\r\n case 'Bar':\r\n case 'BarSmsContainer':\r\n return me.options.chatbar.chatBarSmsMessage;\r\n case 'SmsContainer':\r\n return me.options.smsSubject;\r\n default:\r\n return '';\r\n }\r\n }\r\n getSmsService(chatInitiatedBy) {\r\n const me = this;\r\n me.invokeChatInterceptor();\r\n const ChArray = me.permutator(TempCache.UNICODE_CH);\r\n // me.options.isMobile = true;\r\n // only proceed further if request coming from mobile\r\n if (!me.options.isMobile) {\r\n me.postMessage({\r\n event: 'apexchat_sms_form_show',\r\n data: { chatInitiatedBy }\r\n });\r\n return false;\r\n }\r\n // choose the data based on chatInitiatedBy\r\n const smsOptions = chatInitiatedBy == 'Tab' ? me.options.chatTab : me.options.chatbar;\r\n // only for static, chat tab sms and chat bar sms\r\n if (\r\n chatInitiatedBy == 'BarSmsContainer' ||\r\n chatInitiatedBy == 'SmsContainer' ||\r\n (chatInitiatedBy == 'Tab' && smsOptions.chatTabType == ChatType.sms) ||\r\n (chatInitiatedBy == 'Bar' && smsOptions.chatBarType == ChatType.sms)\r\n ) {\r\n if (!me.options.smsNumber) {\r\n console.warn('You have SMS enabled, but no SMS number specified!');\r\n }\r\n const separator = Browser.isiOS() ? '&' : '?';\r\n let url = `sms:${me.options.smsNumber}`;\r\n const EncodeArray = me.permutator(TempCache.UNICODE_EN);\r\n TempCache.UNICODE_INDEX = Math.floor(Math.random() * 120) + 1 - 1;\r\n const smsMessage = me.getSmsMessage(chatInitiatedBy);\r\n if (smsMessage) {\r\n // url += separator + 'body=' + encodeURIComponent(smsMessage) + UNICODE_EN[UNICODE_INDEX].join(''); //\\u00AD \\u0020 \\u2063 '\\u00A0' '\\u200B'\r\n url += `${separator}body=${EncodeArray[TempCache.UNICODE_INDEX].join(\r\n ''\r\n )}${encodeURIComponent(smsMessage)}`;\r\n } else {\r\n url += `${separator}body=${EncodeArray[TempCache.UNICODE_INDEX].join('')}`;\r\n }\r\n if (!window.ga) {\r\n // ref. Chat-3904\r\n googleAnalyticsObjectInit('ga');\r\n }\r\n const gaClientId = getGaClientId(me.options.googleAnalyticsAccount, ga);\r\n const trafficCookie = getCookieValue('livechat_invitation_traffic_sources');\r\n window.location.href = url;\r\n const data = {\r\n smsCh: `\\\\${ChArray[TempCache.UNICODE_INDEX].join('\\\\')}`,\r\n visitationLogID:\r\n me.options.visitorId || getCookieValue(TempCache.VISITOR_ID_COOKIE),\r\n companyId: me.options.companyId,\r\n initiatedBy: chatInitiatedBy,\r\n language: me.options.language,\r\n chatInterceptorValue: me.interceptorResults,\r\n gaClientId,\r\n trafficCookie: trafficCookie || ''\r\n };\r\n // ajax call to sms log call\r\n me.$.getJSON(`${GlobalVariables.ApexChatBaseUrl}/Handlers/SmsLogHandler.ashx`, data, (result) => {\r\n console.log('sms handler requested....');\r\n });\r\n }\r\n }\r\n /** METHODS RELATED TO REGION RELATED * */\r\n getRegionData(region) {\r\n const data = clone(region);\r\n let borderStyle = '';\r\n let backgroundStyle = '';\r\n data.fontCSS = region.textFont;\r\n data.width = region.width;\r\n data.height = region.height;\r\n data.zIndex = region.zIndex;\r\n if (region.borderWidth && region.borderWidth != '0px') {\r\n borderStyle = `border: solid ${region.borderWidth} ${region.borderColor ? region.borderColor : '#000000'\r\n }; `;\r\n if (region.borderRadius && region.borderRadius != '0px') {\r\n borderStyle += `border-radius: ${region.borderRadius}; `;\r\n }\r\n // width = width - 2 * parseInt(region.borderWidth, 10);\r\n // height = height - 2 * parseInt(region.borderWidth, 10);\r\n }\r\n if (region.backgroundColor) {\r\n backgroundStyle += `background-color: ${region.backgroundColor ? region.backgroundColor : 'inherit'\r\n }; `;\r\n }\r\n if (region.backgroundImage) {\r\n backgroundStyle += `background-image:url(${region.backgroundImage ? region.backgroundImage : 'none'\r\n });`;\r\n } else {\r\n // force IE to have a background image so it's clickable\r\n backgroundStyle +=\r\n 'background-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); ';\r\n }\r\n data.extraCss = '';\r\n switch (region.type) {\r\n case SkinRegionType.videoChat:\r\n case SkinRegionType.VideoChat:\r\n case SkinRegionType.action:\r\n case SkinRegionType.Action:\r\n data.extraCss += 'cursor: pointer; ';\r\n break;\r\n }\r\n data.extraCss += borderStyle + backgroundStyle;\r\n return data;\r\n }\r\n // getRegionContent(region) {\r\n // const content = '';\r\n // let profile = this.options.profileTextsHash[region.threeLetterISOLanguageName];\r\n // if (!profile) {\r\n // profile = this.options;\r\n // }\r\n // switch (region.type) {\r\n // case SkinRegionType.ProfileText:\r\n // case SkinRegionType.profileText:\r\n // switch (region.profileTextType) {\r\n // case ProfileTextType.poweredBy:\r\n // return profile.poweredBy;\r\n // case ProfileTextType.PoweredBy:\r\n // return profile.poweredBy;\r\n // // case ProfileTextType.disclaimer: return profile.disclaimer;\r\n // case ProfileTextType.action:\r\n // return profile.invitationActionText;\r\n // case ProfileTextType.Action:\r\n // return profile.invitationActionText;\r\n // case ProfileTextType.close:\r\n // return profile.invitationCloseText;\r\n // case ProfileTextType.Close:\r\n // return profile.invitationCloseText;\r\n // case ProfileTextType.header:\r\n // return profile.invitationHeader;\r\n // case ProfileTextType.Header:\r\n // return profile.invitationHeader;\r\n // case ProfileTextType.invitation:\r\n // return profile.invitationText;\r\n // case ProfileTextType.Invitation:\r\n // return profile.invitationText;\r\n // case ProfileTextType.tab:\r\n // return profile.invitationTabText;\r\n // case ProfileTextType.Tab:\r\n // return profile.invitationTabText;\r\n // case ProfileTextType.actionMinimized:\r\n // return profile.invitationMinimizedActionText;\r\n // case ProfileTextType.ActionMinimized:\r\n // return profile.invitationMinimizedActionText;\r\n // case ProfileTextType.invitationMinimized:\r\n // return profile.invitationMinimizedText;\r\n // case ProfileTextType.InvitationMinimized:\r\n // return profile.invitationMinimizedText;\r\n // case ProfileTextType.tabMinimized:\r\n // return profile.invitationMinimizedTabText;\r\n // case ProfileTextType.TabMinimized:\r\n // return profile.invitationMinimizedTabText;\r\n // case ProfileTextType.actionInProgress:\r\n // return profile.invitationInProgressActionText;\r\n // case ProfileTextType.ActionInProgress:\r\n // return profile.invitationInProgressActionText;\r\n // case ProfileTextType.invitationInProgress:\r\n // return profile.invitationInProgressText;\r\n // case ProfileTextType.InvitationInProgress:\r\n // return profile.invitationInProgressText;\r\n // case ProfileTextType.tabInProgress:\r\n // return profile.invitationInProgressTabText;\r\n // case ProfileTextType.TabInProgress:\r\n // return profile.invitationInProgressTabText;\r\n // case ProfileTextType.chatTitle:\r\n // return profile.chatTitle;\r\n // case ProfileTextType.ChatTitle:\r\n // return profile.chatTitle;\r\n // }\r\n // break;\r\n // case SkinRegionType.FixedText:\r\n // case SkinRegionType.fixedText:\r\n // return region.fixedText;\r\n // case SkinRegionType.VideoChat:\r\n // case SkinRegionType.videoChat:\r\n // return region.videoChat;\r\n // case SkinRegionType.Action:\r\n // case SkinRegionType.action:\r\n // if (!region.showActionText) {\r\n // return '';\r\n // }\r\n // switch (region.action) {\r\n // case InvitationAction.startChat:\r\n // case InvitationAction.StartChat:\r\n // if (region.inviteSize == InviteSize.Minimized) {\r\n // return profile.invitationMinimizedActionText;\r\n // }\r\n // return profile.invitationActionText;\r\n // case InvitationAction.close:\r\n // return profile.invitationCloseText;\r\n // case InvitationAction.Close:\r\n // return profile.invitationCloseText;\r\n // }\r\n // break;\r\n // case SkinRegionType.Image:\r\n // case SkinRegionType.image:\r\n // return `\"Live`;\r\n // case SkinRegionType.AgentImage:\r\n // case SkinRegionType.agentImage:\r\n // return `\"${this.options.agentName}\"`;\r\n // case SkinRegionType.OnlineIndicator: // ref. 3676\r\n // case SkinRegionType.onlineIndicator:\r\n // return '
';\r\n // }\r\n // return content;\r\n // }\r\n /** UTIL METHODS: Deals mainly based on 'containerId' * */\r\n // createImage(containerId, inviteSize) {\r\n // const me = this;\r\n // let image;\r\n // let container;\r\n // let inviteTemplate = this.options.invitationImageTemplate;\r\n // switch (inviteSize) {\r\n // case InviteSize.full:\r\n // case InviteSize.Full:\r\n // image = this.options.skinFullInviteImage;\r\n // this.options.shadowDepth = this.options.skinFullShadowDepth;\r\n // this.options.canvasPadding = this.options.invitationCanvasPadding;\r\n // this.options.width = this.options.invitationWidth\r\n // ? this.options.invitationWidth\r\n // : '400px';\r\n // this.options.height = this.options.invitationHeight\r\n // ? this.options.invitationHeight\r\n // : '400px';\r\n // break;\r\n // case InviteSize.minimized:\r\n // case InviteSize.Minimized:\r\n // image = this.options.skinMinimizedInviteImage;\r\n // this.options.shadowDepth = this.options.skinMinimizedShadowDepth;\r\n // this.options.canvasPadding = this.options.invitationMinimizedCanvasPadding;\r\n // this.options.width = this.options.invitationMinimizedWidth\r\n // ? this.options.invitationMinimizedWidth\r\n // : '400px';\r\n // this.options.height = this.options.invitationMinimizedHeight\r\n // ? this.options.invitationMinimizedHeight\r\n // : '400px';\r\n // break;\r\n // case InviteSize.inProgress:\r\n // case InviteSize.InProgress:\r\n // image = this.options.skinInProgressInviteImage;\r\n // this.options.shadowDepth = this.options.skinInProgressShadowDepth;\r\n // this.options.canvasPadding = this.options.invitationInProgressCanvasPadding;\r\n // this.options.width = this.options.invitationInProgressWidth\r\n // ? this.options.invitationInProgressWidth\r\n // : '400px';\r\n // this.options.height = this.options.invitationInProgressHeight\r\n // ? this.options.invitationInProgressHeight\r\n // : '400px';\r\n // break;\r\n // case InviteSize.exitPopupEditor:\r\n // case InviteSize.ExitPopup:\r\n // image = this.options.skinExitPopupRegionEditorImage;\r\n // this.options.shadowDepth = this.options.invitationExitPopupRegionEditorShadowDepth;\r\n // this.options.canvasPadding = `${this.options.invitationExitPopupRegionEditorCanvasPadding} !important`;\r\n // // Set template for Exit popup region editor\r\n // inviteTemplate = this.options.exitPopupInvitationImageTemplate;\r\n // this.options.width = this.options.invitationExitPopupMinimizedWidth\r\n // ? this.options.invitationExitPopupMinimizedWidth\r\n // : '400px';\r\n // this.options.height = this.options.invitationExitPopupMinimizedHeight\r\n // ? this.options.invitationExitPopupMinimizedHeight\r\n // : '400px';\r\n // break;\r\n // }\r\n // if (!image) {\r\n // log(\r\n // `No image specified for invite size ${inviteSize}`,\r\n // LogLevel.Warn\r\n // );\r\n // return;\r\n // }\r\n // this.options.backgroundImageUrl = image.imageUrl;\r\n // container = this.addElement(containerId, inviteTemplate);\r\n // if (Browser.isIE() && Browser.isQuirksMode()) {\r\n // // fix for IE in quirks not making the image links clickable\r\n // container.style.zoom = 1;\r\n // container.children[0].style.zoom = 1;\r\n // container.style.width = this.options.width;\r\n // }\r\n // // good 'ol IE\r\n // // this.monitorIE(container);\r\n // container = container.children[0]?.children[1];\r\n // // for advanced CSS\r\n // if (this.options.invitationWidgetStyleCustom) {\r\n // addStyleTextInIframe(\r\n // this.options.invitationWidgetStyle + this.options.invitationWidgetStyleCustom,\r\n // 'apexchat_advance_css',\r\n // undefined,\r\n // me.DOM\r\n // );\r\n // }\r\n // const root = this.DOM.getElementById(containerId);\r\n // let oldDisplay;\r\n // if (inviteSize === InviteSize.full || inviteSize === InviteSize.Full) {\r\n // oldDisplay = root.style.display;\r\n // root.style.display = 'block';\r\n // let pos = this.options.position;\r\n // if (this.options.isRefreshed) {\r\n // pos = this.options.secondaryPosition;\r\n // }\r\n // // determine the position of the widget\r\n // if (!this.options.startStyle) {\r\n // const dims = getViewport();\r\n // this.options.startStyle = this.getStartStyle(pos, root);\r\n // }\r\n // root.style.display = oldDisplay;\r\n // // apply the initial styling\r\n // for (const pro in this.options.startStyle) {\r\n // if (this.options.startStyle.hasOwnProperty(pro)) {\r\n // root.style[pro] = this.options.startStyle[pro];\r\n // }\r\n // }\r\n // } else {\r\n // let prop;\r\n // let style = {};\r\n // oldDisplay = root.style.display;\r\n // root.style.display = 'block';\r\n // style = this.getStartStyle(this.options.secondaryPosition, root);\r\n // root.style.display = oldDisplay;\r\n // const position = this.options.secondaryPosition;\r\n // if (\r\n // !Browser.isIE() &&\r\n // !(\r\n // position == Position.TopLeft ||\r\n // position == Position.TopMiddle ||\r\n // position == Position.TopRight\r\n // )\r\n // ) {\r\n // style.bottom = '0px';\r\n // }\r\n // for (prop in style) {\r\n // if (style.hasOwnProperty(prop)) {\r\n // root.style[prop] = style[prop];\r\n // }\r\n // }\r\n // }\r\n // let action = function () {\r\n // console.log('ALERT! No handler found for click!');\r\n // };\r\n // for (let i = 0; i < this.options.skinRegions.length; i++) {\r\n // if (this.options.skinRegions[i].inviteSize != inviteSize) {\r\n // continue;\r\n // }\r\n // if (\r\n // this.options.skinRegions[i].type === SkinRegionType.VideoChat &&\r\n // this.options.isOpenForBusiness === false\r\n // ) {\r\n // continue;\r\n // }\r\n // const node = this.DOM.createElement('div');\r\n // const region = this.options.skinRegions[i];\r\n // const data = this.getRegionData(region);\r\n // var subTpl;\r\n // container.appendChild(node);\r\n // data.content = this.getRegionContent(region);\r\n // node.innerHTML = parseTemplate(\r\n // this.options.invitationImageRegionTemplate,\r\n // data\r\n // );\r\n // node.childNodes[1].tabIndex = 0;\r\n // // this.applyRegionActions(node, region);\r\n // if (region.type == SkinRegionType.Action) {\r\n // if (region.action == InvitationAction.StartChat) {\r\n // const startChatNode = node.childNodes[1];\r\n // let chatTitle = '';\r\n // if (node.childNodes && node.childNodes.length > 1) {\r\n // // check language\r\n // if (region.threeLetterISOLanguageName == 'spa') {\r\n // chatTitle =\r\n // this.options.chatMode == ChatMode.DOM\r\n // ? GlobalVariables.DOM_CHAT_TITLE_SPA\r\n // : GlobalVariables.WINDOWED_CHAT_TITLE_SPA;\r\n // } else {\r\n // chatTitle =\r\n // this.options.chatMode == ChatMode.DOM\r\n // ? GlobalVariables.DOM_CHAT_TITLE\r\n // : GlobalVariables.WINDOWED_CHAT_TITLE;\r\n // }\r\n // // Added title in image based invitation\r\n // startChatNode.title = chatTitle;\r\n // startChatNode.setAttribute('aria-label', chatTitle);\r\n // startChatNode.setAttribute('name', 'startChat');\r\n // startChatNode.setAttribute('role', 'button');\r\n // }\r\n // action = this.options.requestVisitorInfo\r\n // ? this.formChat\r\n // : this.onInvitationClick;\r\n // me.handleADA(\r\n // me.$(node, me.DOM)[0],\r\n // action.bind2(me, region.threeLetterISOLanguageName, 'Standard')\r\n // );\r\n // } else if (region.action == InvitationAction.Close) {\r\n // const closeChatNode = node.childNodes[1];\r\n // if (node.childNodes && node.childNodes.length > 1) {\r\n // // Added title in image based invitation\r\n // closeChatNode.title = 'Close Chat';\r\n // closeChatNode.setAttribute('aria-label', 'Close Chat');\r\n // closeChatNode.setAttribute('name', 'closeChat');\r\n // closeChatNode.setAttribute('role', 'button');\r\n // }\r\n // action = region.inviteSize == InviteSize.Full ? this.close : this.hide;\r\n // }\r\n // } else if (region.type == SkinRegionType.VideoChat) {\r\n // action = this.onVideoChatClick;\r\n // }\r\n // me.handleADA(\r\n // me.$(node, me.DOM)[0],\r\n // action.bind2(this, region.threeLetterISOLanguageName, 'Standard')\r\n // );\r\n // }\r\n // }\r\n addElement(id, template) {\r\n const target = this.options.targetElementId\r\n ? this.DOM.getElementById(this.options.targetElementId)\r\n : this.DOM;\r\n const container = this.DOM.createElement('div');\r\n // add the element to the page so the following methods work\r\n target.body.appendChild(container);\r\n // hide the element and make sure it's content stays within bounds, but put it on top of everything else\r\n container.style.overflow = 'hidden';\r\n container.style.display = 'none';\r\n container.style.zIndex = TempCache.CONTAINER_Z_INDEX;\r\n // set up the container element, keeping it hidden initially\r\n container.id = id;\r\n // fixed positioning for most, absolute for IE\r\n container.style.position = 'fixed';\r\n if (Browser.isIE()) {\r\n container.style.position = 'absolute';\r\n }\r\n // set the content after it's been positioned\r\n container.innerHTML = parseTemplate(template, this.options);\r\n // ADA compliance add attribute in start chat button\r\n SetADACompliantAttributes(\r\n container,\r\n this.options.chatMode,\r\n 'apexchat_ada_compliance_start_chat'\r\n );\r\n const ieClasses =\r\n (Browser.isIE7() ? ' ie7' : '') +\r\n (Browser.isIE8() ? ' ie8' : '') +\r\n (Browser.isIE9() ? ' ie9' : '');\r\n if (ieClasses) {\r\n const targets = [\r\n getElementsByClassName(container, 'livechat_inner')[0],\r\n getElementsByClassName(container, 'livechat_start_inner')[0],\r\n getElementsByClassName(container, 'livechat_close_alt_inner')[0]\r\n ];\r\n if (targets[0]) {\r\n targets[0].className += ieClasses;\r\n }\r\n if (targets[1]) {\r\n targets[1].className += ieClasses;\r\n }\r\n if (targets[2]) {\r\n targets[2].className += ieClasses;\r\n }\r\n if (Browser.isQuirksMode()) {\r\n if (targets[0]) {\r\n targets[0].className += ' quirksForBody';\r\n }\r\n if (targets[1]) {\r\n targets[1].className += ' quirksForButton';\r\n }\r\n if (targets[2]) {\r\n targets[2].className += ' quirksForAltButton';\r\n }\r\n }\r\n }\r\n return container;\r\n }\r\n getStartStyle(position, container) {\r\n // v3 not required to set position of inner, we position only iframe\r\n return { right: '0px' };\r\n }\r\n monitorIE(container) {\r\n if (Browser.isIE()) {\r\n const me = this;\r\n // surprise! IE doesn't work properly with position:fixed\r\n window.setInterval(() => {\r\n if (me.wiggling) {\r\n return;\r\n }\r\n container.style.top = getFixedTop(me.options.position, container);\r\n }, 50);\r\n }\r\n }\r\n getContainer() {\r\n if (!this.DOM) {\r\n return;\r\n }\r\n return this.DOM.getElementById(this.options.containerId);\r\n }\r\n getChatWindowDimensions() {\r\n const minH = 520;\r\n let h = 520;\r\n const minW = 330;\r\n let w = 330;\r\n if (this.options.chatHeight && this.options.chatWidth) {\r\n const viewportDimensions = getViewport();\r\n const screenDimensions = [\r\n window.outerWidth || screen.width,\r\n window.outerHeight || screen.height\r\n ];\r\n const diff = [\r\n screenDimensions[0] - viewportDimensions[0],\r\n screenDimensions[1] - viewportDimensions[1]\r\n ];\r\n // calculate, and throw on a little extra for various browser oddities\r\n // arbitrary \"30\" here is so if we end up with a *huge* difference in the newly calculated with vs. the actual width when the invitation\r\n // was designed, assume something went wrong and just fall back to a reasonable guess.\r\n if (diff[0] < 30 && diff[0] > 0) {\r\n w = this.options.chatWidth + diff[0] + 10;\r\n } else {\r\n w = this.options.chatWidth + 10;\r\n }\r\n if (diff[1] < 30 && diff[1] > 0) {\r\n h = this.options.chatHeight + diff[1] + 10;\r\n } else {\r\n h = this.options.chatHeight + 10;\r\n }\r\n }\r\n // set some minimiums\r\n const dims = { width: w, height: h };\r\n if (dims.width < minW) {\r\n dims.width = minW;\r\n }\r\n if (dims.height < minH) {\r\n dims.height = minH;\r\n }\r\n return dims;\r\n }\r\n startWindowedChat(options) {\r\n TempCache.WINDOWED_CHAT_STARTED = true;\r\n clearTimeout(TempCache.EP_SetTimeOut); // we need to remove EP timer so EP would not be appear.\r\n const me = this;\r\n if (!me.windowedChatStarted) {\r\n me.windowedChatStarted = true;\r\n } else {\r\n return false;\r\n }\r\n setTimeout(() => {\r\n me.windowedChatStarted = false;\r\n }, 1500);\r\n me.invokeChatInterceptor();\r\n // launch the chat in a new window; do some quick calcs to attempt to account for browser chrome\r\n const dims = this.getChatWindowDimensions();\r\n const t = 15;\r\n const l = 15;\r\n const w = 400;\r\n const h = 600;\r\n let query = this.getQueryString(\r\n ChatMode.Windowed,\r\n true,\r\n options.language,\r\n me.interceptorResults\r\n );\r\n if (options.chatId && query.indexOf('&chatId=') === -1) {\r\n // check if chatId not already there.\r\n query += `&chatId=${options.chatId}`;\r\n }\r\n const isDOM = this.options.chatMode == ChatMode.DOM;\r\n const target =\r\n this.options.requestVisitorName && !isDOM\r\n ? 'ChatVisitorName.aspx'\r\n : this.options.requestVisitorInfo && !isDOM\r\n ? 'ChatVisitorInfo.aspx'\r\n : 'chat';\r\n const isPageRefreshed = me.isPageRefreshed(); // pass is page refresh value as a parameter so it should know value on windowed as well.\r\n const isEPConnected = this.state.getStateValue(\r\n WidgetTypes.ExitPopup + WidgetStates.Created\r\n );\r\n // [ExitPopup]: FogBugs [2361] : Exit Pop up code causing console errors in chats in production (DOMException: Blocked a frame with origin..{...}..)\r\n // We were using window.opener and we noticed that due to Cross Origin issue some browser were blocking window.opener So, Now we are using Querystring Method\r\n // shouldContinueMapping and FullTextVisitorResponse send via query parameter as we need this on Windowed mode.\r\n const URL = `${env.API_URL + '/' + target}?initiatedBy=${options.chatInitiatedBy\r\n }&shouldContinueMapping=${options.shouldContinueMapping}&FullTextVisitorResponse=${options.FullTextVisitorResponse\r\n }&isChatActive=${me.isChatActive()}&${query}`;\r\n const win = window.open(\r\n URL,\r\n 'ApexChatWindow',\r\n `height=${dims.height},width=${dims.width},top=${t},left=${l},toolbar=no` +\r\n `,menubar=no` +\r\n `,status=no` +\r\n `,location=no` +\r\n `,scrollbars=yes` +\r\n `,resizable=yes`\r\n );\r\n ApexChat.storageAPI.StoreTemp('livechat_has_windowed_chat_started', true);\r\n // safari browser in iOS does not return window.open value when popup blocker is in place.\r\n // We would simply return from here\r\n if (!win && Browser.isiOS && Browser.isSafari) {\r\n return;\r\n }\r\n if (!win) {\r\n alert(\r\n 'You appear to have a pop-up blocker that is preventing the chat from launching. Please allow pop-ups using the notification bar at the top of the window and try again.'\r\n );\r\n }\r\n if (this.options.isMobile) {\r\n return win;\r\n }\r\n return win;\r\n }\r\n isChatInProgress() {\r\n return (getCookieValue(TempCache.CHAT_ID_COOKIE) || 0) > 0;\r\n }\r\n isActiveChatMinimizedOnPageReload() {\r\n const domState = this.state.getStateValue(WidgetTypes.DOM);\r\n const result =\r\n this.isPageRefreshed() && // is it refreshed scenario?\r\n domState == WidgetStates.ShownMinimized && // was dom minimized?\r\n this.isChatInProgress(); // was DOM/Chat started?\r\n return result;\r\n }\r\n isInvitationType() {\r\n return (\r\n this.options.widget == WidgetTypes.PreChat ||\r\n this.options.widget == WidgetTypes.DropDown ||\r\n this.options.widget == WidgetTypes.Bar ||\r\n this.options.widget == WidgetTypes.Tab\r\n );\r\n }\r\n // log that it was clicked\r\n serverLog(logInfo) {\r\n if (logInfo && logInfo.trackClick) {\r\n ServerLog.trackClick({\r\n companyId: logInfo.data.companyId,\r\n visitorId: logInfo.data.visitorId,\r\n clickSource: logInfo.clickSource\r\n });\r\n } else {\r\n ServerLog.log(logInfo.data);\r\n }\r\n }\r\n addBehavior(type) {\r\n const me = this;\r\n me.behaviors.push(type);\r\n me.include(Behaviors[type]);\r\n }\r\n showDOMFastOnClick() {\r\n return this.behaviors.indexOf(BehaviorTypes.FAST_DOM_UI_RENDERING) > -1;\r\n }\r\n canWidgetShowNotifications() {\r\n return this.behaviors.indexOf(BehaviorTypes.NOTIFICATIONS) > -1;\r\n }\r\n hasCustomClickHandlersDefined() {\r\n return this.behaviors.indexOf(BehaviorTypes.INVITATION_CLICKABLES) > -1;\r\n }\r\n // summay: HandleADA takes element and bind event of keyup which we need for ADA users like AcceptKey, SpaceBar, ESC key, etc.\r\n // What decisions we do need to call on element's keyup event.\r\n handleADA(element, openCallback, closeCallback) {\r\n const me = this;\r\n element?.addEventListener('keyup',\r\n function (e) {\r\n const elTrace = this.innerText || this.id || this.title;\r\n const targetElem = (e.target || e.srcElement).tagName;\r\n logIt(`handleADA:onKeyUp called on:${elTrace}`);\r\n // if key is Space or Enter then start chat\r\n if (isAcceptKey(e)) {\r\n if (openCallback && typeof openCallback === 'function') {\r\n logIt(`Invoke on Tab over:${targetElem}, ${elTrace}`);\r\n openCallback(e);\r\n }\r\n } else if (isEscapeKey(e)) {\r\n logIt('Keydown to close emotjis');\r\n if (closeCallback && typeof closeCallback === 'function') {\r\n closeCallback(e);\r\n }\r\n } else if (isTabKey(e)) {\r\n logIt(`Tab over:${targetElem}, ${elTrace}`);\r\n ManageFocusOnKeyEvents(me.context.querySelector(element));\r\n }\r\n e.stopPropagation();\r\n });\r\n }\r\n maintainPageRefreshState() {\r\n // to check page refresh subsequently\r\n if (storageAPIExists(TempCache.IS_PAGE_REFRESHED)) {\r\n ApexChat.storageAPI.Store(TempCache.IS_PAGE_REFRESHED, true);\r\n } else {\r\n ApexChat.storageAPI.Store(TempCache.IS_PAGE_REFRESHED, false);\r\n ApexChat.storageAPI.Store('livechat_has_windowed_chat_started', true);\r\n }\r\n }\r\n /**\r\n * Parse and return theme css template file\r\n * @param themeSettings\r\n * @param themeCss\r\n * @returns {string|string|ApexChat.Portal.ThemePanel.getSkinData.chatStyle}\r\n */\r\n\r\n}\r\n","import WidgetTypes from './enums/WidgetTypes';\r\nimport TempCache from './enums/TempCache';\r\n\r\nexport function getInitiatedBy(widgetType) {\r\n switch (widgetType) {\r\n case WidgetTypes.ExitPopup:\r\n return 'ExitPopup';\r\n case WidgetTypes.DOM:\r\n return 'Dom';\r\n case WidgetTypes.PreChat:\r\n return 'PreChat';\r\n case WidgetTypes.Bar:\r\n return 'Bar';\r\n case WidgetTypes.Tab:\r\n return 'Tab';\r\n case WidgetTypes.DropDown:\r\n return 'Standard';\r\n case WidgetTypes.Static:\r\n return 'Static';\r\n case WidgetTypes.VideoGreetInvitation:\r\n return 'VideoGreet';\r\n default:\r\n return 'Dom';\r\n }\r\n}\r\n// search the array for an item by its property\r\nexport function arrayObjectIndexOf(myArray, searchTerm, property) {\r\n let foundLast = -1;\r\n for (let i = 0, len = myArray.length; i < len; i++) {\r\n if (myArray[i][property].replace(TempCache.REMOVE_NON_ALPHANUMERIC, '') === searchTerm) {\r\n foundLast = i;\r\n }\r\n }\r\n return foundLast;\r\n}\r\n","/**\r\n * The idea of Behaviors is to keep the static implementation of a UI widget functionality separate so that we can plug it anytime with any widget\r\n */\r\nimport WidgetStates from './hooks/WidgetStates';\r\nimport getStorageAPIValue from './hooks/getStorageAPIValue';\r\nimport hideElement from './hooks/hideElement';\r\nimport observe from './hooks/observe';\r\nimport showElement from './hooks/showElement';\r\nimport storageAPIExists from './hooks/storageAPIExists';\r\nimport WidgetTypes from './enums/WidgetTypes';\r\n\r\nconst Behaviors = {\r\n NOTIFICATIONS: {\r\n setup: false, // a flag to keep track of setupNotification to run only once\r\n setupNotification() {\r\n const me = this;\r\n if (me.setup) {\r\n return;\r\n }\r\n me.setup = true;\r\n me.bubbleContainer = me.DOM.getElementById('apexchat_rd_invitation_bubble');\r\n me.notificationContainer = me.DOM.getElementById('apexchat_rd_invitation_typing');\r\n me.typingIndicatorAnimatedDots = me.DOM.getElementsByClassName('apexchat_rd_glider');\r\n me.typingIndicatorAnimatedDotsContainer = me.DOM.getElementsByClassName(\r\n 'apexchat_rd_invitation_animation'\r\n );\r\n me.typingIndicator = me.DOM.getElementsByClassName(\r\n 'apexchat_rd_invitation_typing_dots'\r\n );\r\n me.messageCountContainer = me.DOM.getElementById('apexchat_rd_notification_count');\r\n },\r\n showNotification() {\r\n const me = this;\r\n me.setupNotification();\r\n if (me.notificationContainer) {\r\n hideElement(me.notificationContainer);\r\n showElement(me.messageCountContainer);\r\n showElement(me.bubbleContainer);\r\n me.messageCountContainer.innerHTML = me.newMsgNotificationsCount;\r\n }\r\n },\r\n resetNotificationCount() {\r\n const me = this;\r\n if (me.notificationContainer) {\r\n hideElement(me.messageCountContainer);\r\n hideElement(me.notificationContainer);\r\n hideElement(me.bubbleContainer);\r\n ApexChat.storageAPI.Remove('livechat_new_msg_count');\r\n me.messageCountContainer.innerHTML = '';\r\n me.newMsgNotificationsCount = 0;\r\n }\r\n },\r\n showTypingInMinimizedState() {\r\n const me = this;\r\n me.setupNotification(); // Re-setup if page refreshes then old messages will come then first of all typing indicators come.\r\n if (me.notificationContainer) {\r\n showElement(me.notificationContainer);\r\n showElement(me.bubbleContainer);\r\n for (let i = 0; i < me.typingIndicator.length; i++) {\r\n showElement(me.typingIndicator[i]);\r\n }\r\n me.DOM.querySelector('.apexchat_rd_invitation_typing')?.classList.remove('disabled');\r\n me.DOM.querySelector('.apexchat_rd_invitation_bubble')?.classList.remove('disabled');\r\n }\r\n },\r\n hideTypingInMinimizedState() {\r\n const me = this;\r\n if (me.notificationContainer) {\r\n for (let i = 0; i < me.typingIndicator.length; i++) {\r\n hideElement(me.typingIndicator[i]);\r\n }\r\n }\r\n // hideElement(me.bubbleContainer);\r\n // hideElement(me.notificationContainer);\r\n me.DOM.querySelector('.apexchat_rd_invitation_typing')?.classList.add('disabled');\r\n me.DOM.querySelector('.apexchat_rd_invitation_bubble')?.classList.add('disabled');\r\n },\r\n showTypingWithAnimatedDotsInMinimizedState() {\r\n const me = this;\r\n if (me.typingIndicatorAnimatedDots) {\r\n for (let i = 0; i < me.typingIndicatorAnimatedDots.length; i++) {\r\n showElement(me.typingIndicatorAnimatedDots[i]);\r\n }\r\n }\r\n me.showTypingWithAnimatedDotsContainer();\r\n },\r\n hideTypingWithAnimatedDotsInMinimizedState() {\r\n const me = this;\r\n if (me.typingIndicatorAnimatedDots) {\r\n for (let i = 0; i < me.typingIndicatorAnimatedDots.length; i++) {\r\n hideElement(me.typingIndicatorAnimatedDots[i]);\r\n }\r\n }\r\n },\r\n showTypingWithAnimatedDotsContainer() {\r\n const me = this;\r\n if (me.typingIndicatorAnimatedDotsContainer) {\r\n showElement(me.typingIndicatorAnimatedDotsContainer[0]);\r\n }\r\n },\r\n hideTypingWithAnimatedDotsConatiner() {\r\n const me = this;\r\n if (me.typingIndicatorAnimatedDotsContainer) {\r\n hideElement(me.typingIndicatorAnimatedDotsContainer[0]);\r\n }\r\n },\r\n hideMsgCounts() {\r\n const me = this;\r\n if (me.messageCountContainer) {\r\n hideElement(me.messageCountContainer);\r\n }\r\n },\r\n showMsgCounts() {\r\n const me = this;\r\n if (me.messageCountContainer) {\r\n if (me.messageCountContainer.innerHTML != '') {\r\n showElement(me.messageCountContainer);\r\n showElement(me.bubbleContainer);\r\n } else {\r\n // hideElement(me.notificationContainer);\r\n }\r\n }\r\n },\r\n increaseNotificationCounter(isChatFromAgent) {\r\n const me = this;\r\n const lastDOMState = me.state.getStateValue(WidgetTypes.DOM);\r\n // we need only agent's msgs to show bubble counter of; and only when the RD/DOM is minimized\r\n if (\r\n isChatFromAgent &&\r\n (lastDOMState == WidgetStates.ShownMinimized ||\r\n lastDOMState == WidgetStates.ShownNormal)\r\n ) {\r\n me.newMsgNotificationsCount = me.newMsgNotificationsCount || 0;\r\n me.newMsgNotificationsCount++;\r\n ApexChat.storageAPI.StoreTemp(\r\n 'livechat_new_msg_count',\r\n me.newMsgNotificationsCount\r\n );\r\n ApexChat.storageAPI.StoreTemp('livechat_last_msg_id', isChatFromAgent.m.id);\r\n ApexChat.storageAPI.StoreTemp('livechat_msg_count_updated', true);\r\n me.showNotification();\r\n }\r\n },\r\n showNotificationCountOnReload() {\r\n const me = this;\r\n if (storageAPIExists('livechat_new_msg_count')) {\r\n me.newMsgNotificationsCount = getStorageAPIValue('livechat_new_msg_count');\r\n me.showNotification();\r\n }\r\n }\r\n },\r\n MAXIMIZE_ON_MINIMIZE: {},\r\n INVITATION_CLICKABLES: {\r\n setStartChatHandler(cb) {\r\n const me = this;\r\n const clickInviation = (e) => {\r\n const { language } = me.options;\r\n const chatInitiatedBy = 'Standard';\r\n me.onInvitationClick(e, language, chatInitiatedBy);\r\n if (cb && typeof cb === 'function') {\r\n cb();\r\n }\r\n };\r\n observe(\r\n me.DOM.getElementById('apexchat_rd_agent_image_start_chat'),\r\n 'click',\r\n clickInviation.bind2(this, 'min')\r\n );\r\n observe(\r\n me.DOM.getElementById('apexchat_rd_notification_count'),\r\n 'click',\r\n clickInviation.bind2(this, 'min')\r\n );\r\n observe(\r\n me.DOM.getElementById('apexchat_rd_invitation_title'),\r\n 'click',\r\n clickInviation.bind2(this, 'max')\r\n );\r\n observe(\r\n me.DOM.getElementById('apexchat_greet_video_start_trigger'),\r\n 'click',\r\n clickInviation.bind2(this, 'max')\r\n );\r\n // plug ADA\r\n me.handleADA(\r\n me.DOM.getElementById('apexchat_rd_agent_image_start_chat'),\r\n clickInviation.bind2(this, 'min')\r\n );\r\n me.handleADA(\r\n me.DOM.getElementById('apexchat_rd_notification_count'),\r\n clickInviation.bind2(this, 'min')\r\n );\r\n me.handleADA(\r\n me.DOM.getElementById('apexchat_rd_invitation_title'),\r\n clickInviation.bind2(this, 'max')\r\n );\r\n me.handleADA(\r\n me.DOM.getElementById('apexchat_greet_video_start_trigger'),\r\n clickInviation.bind2(this, 'max')\r\n );\r\n }\r\n }\r\n};\r\nexport default Behaviors\r\n","const BrandingWidget = {\r\n RD_DOM: 1,\r\n RD_Invitation: 2,\r\n RD_EP: 3,\r\n RD_PreChat: 4\r\n};\r\nexport default BrandingWidget;\r\n","import underscore from \"./hooks/underscore\";\r\n\r\nexport default function extend() {\r\n let options;\r\n let name;\r\n let src;\r\n let copy;\r\n let copyIsArray;\r\n let clone;\r\n let target = arguments[0] || {};\r\n let i = 1;\r\n const { length } = arguments;\r\n let deep = false;\r\n // Handle a deep copy situation\r\n if (typeof target === 'boolean') {\r\n deep = target;\r\n target = arguments[1] || {};\r\n // skip the boolean and the target\r\n i = 2;\r\n }\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if (typeof target !== 'object' && !underscore.isFunction(target)) {\r\n target = {};\r\n }\r\n // extend jQuery itself if only one argument is passed\r\n if (length === i) {\r\n target = this;\r\n --i;\r\n }\r\n for (; i < length; i++) {\r\n // Only deal with non-null/undefined values\r\n if ((options = arguments[i]) != null) {\r\n // Extend the base object\r\n for (name in options) {\r\n src = target[name];\r\n copy = options[name];\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n continue;\r\n }\r\n // Recurse if we're merging plain objects or arrays\r\n if (\r\n deep &&\r\n copy &&\r\n (underscore.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))\r\n ) {\r\n if (copyIsArray) {\r\n copyIsArray = false;\r\n clone = src && Array.isArray(src) ? src : [];\r\n } else {\r\n clone = src && underscore.isPlainObject(src) ? src : {};\r\n }\r\n // Never move original objects, clone them\r\n target[name] = extend(deep, clone, copy);\r\n // Don't bring in undefined values\r\n } else if (copy !== undefined) {\r\n target[name] = copy;\r\n }\r\n }\r\n }\r\n }\r\n // Return the modified object\r\n return target;\r\n}\r\n","import GlobalVariables from '../GlobalVariables';\r\n\r\nconst ADACompliant = {\r\n push(elements) {\r\n GlobalVariables.ADAElements.push(elements);\r\n return this;\r\n },\r\n apply() {\r\n if (GlobalVariables.ADAElements.length > 0) {\r\n for (let j = 0; j < GlobalVariables.ADAElements[0].length; j++) {\r\n GlobalVariables.ADAElements[0][j].setAttribute(\r\n 'tabindex',\r\n GlobalVariables.tabIndexCount\r\n );\r\n }\r\n this.clearArray();\r\n }\r\n },\r\n clearArray() {\r\n GlobalVariables.ADAElements = [];\r\n }\r\n};\r\nexport default ADACompliant;\r\n","import getElementsByClassName from './getElementsByClassName';\r\n\r\nconst ADACompliantActionButton = function (container, adaClass, value) {\r\n var adaClass = getElementsByClassName(container, adaClass)[0];\r\n if (adaClass) {\r\n adaClass.setAttribute('aria-label', value);\r\n adaClass.title = value;\r\n }\r\n};\r\nexport default ADACompliantActionButton;\r\n","/**\r\n * We have differennt image url from legacy application\r\n * This function replace the url of the legacy application with microservice invitation application image url\r\n * @param {Image of the url} imageUrl\r\n * @returns\r\n */\r\nconst AgentImageHandler = (imageUrl) => {\r\n if (!imageUrl) return imageUrl;\r\n if (imageUrl.startsWith('/images/agents')) {\r\n return imageUrl.replace('/images/agents', '/contents/images/agents');\r\n }\r\n if (imageUrl.indexOf('contents/contents/images') > 0) {\r\n return imageUrl.replace('/contents/contents/images', '/contents/images');\r\n }\r\n if (imageUrl.indexOf('contents//images') > 0) {\r\n return imageUrl.replace('/contents//images', '/contents/images');\r\n }\r\n if (imageUrl.indexOf('//images') > 0) {\r\n return imageUrl.replace('//images', '/contents/images');\r\n }\r\n\r\n return imageUrl;\r\n};\r\nexport default AgentImageHandler;\r\n","const AnalyticsTracking = {\r\n None: 1,\r\n GoogleUniversal: 2,\r\n FacebookPixel: 3,\r\n Custom: 4,\r\n GoogleAnalyticsClientId: 5,\r\n GoogleAnalyticsCrossDomainTracking: 6,\r\n GoogleAnalytics4: 7\r\n};\r\nexport default AnalyticsTracking;\r\n","const BehaviorTypes = {\r\n NOTIFICATIONS: 'NOTIFICATIONS',\r\n INVITATION_CLICKABLES: 'INVITATION_CLICKABLES',\r\n FAST_DOM_UI_RENDERING: 'FAST_DOM_UI_RENDERING'\r\n};\r\nexport default BehaviorTypes;\r\n","import extend from '../extend';\r\nimport BrandingWidget from '../enums/BrandingWidget';\r\n\r\n/**\r\n * Apply Branding.\r\n * takes config as param returns by settings branding values\r\n * used in Portal & Visitor-end\r\n */\r\nexport default class Branding {\r\n init(options, me) {\r\n this.widget = options.widget;\r\n // Brand config\r\n this.brand = { config: options.brandConfig };\r\n this.brandColor = this.brand.config.global.branding.brandColorCode;\r\n this.brandColorOpacity = `${this.brand.config.global.branding.brandColorCode}0F`; // Hex code 0F for 4% opacity\r\n\r\n // Apply Branding config\r\n this.applyBranding(this.widget);\r\n return this;\r\n }\r\n\r\n applyBranding(widget) {\r\n const me = this;\r\n switch (widget) {\r\n case BrandingWidget.RD_DOM:\r\n return (function () {\r\n // Generic function for RD DOM, takes property of specfic widget, and set up the config.\r\n me.overrideConfig(BrandingWidget.RD_DOM, 'rdChat');\r\n })();\r\n case BrandingWidget.RD_Invitation:\r\n return (function () {\r\n // Generic function, takes property of specfic widget, and set up the config.\r\n me.overrideConfig(BrandingWidget.RD_Invitation, 'rdInvitation');\r\n })();\r\n case BrandingWidget.RD_EP:\r\n return (function () {\r\n // Generic function, takes property of specfic widget, and set up the config.\r\n me.overrideConfig(BrandingWidget.RD_EP, 'exitPopupChat');\r\n })();\r\n case BrandingWidget.RD_PreChat:\r\n return (function () {\r\n // Generic function, takes property of specfic widget, and set up the config.\r\n me.overrideConfig(BrandingWidget.RD_DOM, 'rdThemeSettings');\r\n me.overrideConfig(BrandingWidget.RD_PreChat, 'preChat');\r\n })();\r\n default:\r\n }\r\n }\r\n\r\n /**\r\n * / Generic function which override the config for branding\r\n * @param {any} widget\r\n * @param {any} propertyName\r\n */\r\n overrideConfig(widget, propertyName) {\r\n const me = this;\r\n // getting branding object\r\n const brandedConfig = me.getBrandingElements(widget);\r\n const backupConfig = JSON.parse(JSON.stringify(me.brand.config)); // Cloning object\r\n\r\n // overriding the orignal config with branding\r\n const config = extend(true, me.brand.config[propertyName], brandedConfig);\r\n backupConfig[propertyName] = config;\r\n me.brandedConfig = backupConfig;\r\n }\r\n\r\n getBrandedConfig() {\r\n return this.brandedConfig;\r\n }\r\n\r\n getBrandingElements(widget) {\r\n const me = this;\r\n // In case of branding Visitor Response text is static #3A3A3A\r\n const brandingStaticValues = {\r\n color: '#3A3A3A',\r\n backgroundColor: '#3A3A3A0F',\r\n whiteText: '#FFFFFF',\r\n darkOpacity: `#303030${80}`\r\n };\r\n switch (widget) {\r\n case BrandingWidget.RD_DOM:\r\n return {\r\n enableBranding: true,\r\n brandColor: me.brandColor,\r\n brandColorOpacity: me.brandColorOpacity,\r\n whiteText: brandingStaticValues.whiteText,\r\n general: {\r\n headerColor: me.brandColor,\r\n disclaimerFont: {\r\n color: me.brandColor\r\n },\r\n disclaimerBgColor: me.brandColorOpacity\r\n },\r\n messages: {\r\n agentFont: {\r\n color: me.brandColor\r\n },\r\n visitorFont: {\r\n color: brandingStaticValues.color\r\n },\r\n visitorBgColor: brandingStaticValues.backgroundColor,\r\n typingIndicatorDots: me.brandColor,\r\n agentBgColor: me.brandColorOpacity\r\n },\r\n questionType: {\r\n qTBorder: me.brandColor,\r\n qTQuestion: me.brandColor,\r\n qTButton: me.brandColor\r\n }\r\n };\r\n case BrandingWidget.RD_Invitation:\r\n return {\r\n general: {\r\n backgroundColor: me.brandColor,\r\n typingIndicator: me.brandColor,\r\n btnClose: me.brandColorOpacity\r\n },\r\n rdIcon: {\r\n dotColor: me.brandColor,\r\n dotAnimationColor: me.brandColor\r\n }\r\n };\r\n case BrandingWidget.RD_EP:\r\n return {\r\n enableBranding: true,\r\n general: {\r\n leftBarBackground1Color: me.brandColor,\r\n leftBarBackground2Color: me.brandColor,\r\n btnClose: me.brandColorOpacity,\r\n opacityBrandColor: me.brandColorOpacity,\r\n disclaimerFont: {\r\n color: me.brandColor\r\n }\r\n },\r\n header: {\r\n participantsFont: {\r\n color: brandingStaticValues.whiteText\r\n }\r\n },\r\n messages: {\r\n agentFontField: {\r\n color: me.brandColor\r\n },\r\n visitorFontField: {\r\n color: brandingStaticValues.color\r\n }\r\n },\r\n body: {\r\n typingIndicatorFont: {\r\n color: me.brandColor\r\n }\r\n },\r\n sendButton: {\r\n sendbuttonBackgroundColor: me.brandColor\r\n }\r\n };\r\n case BrandingWidget.RD_PreChat:\r\n return {\r\n enableBranding: true,\r\n messagePopup: {\r\n highLightColor: me.brandColor,\r\n rdGlowTagColor: me.brandColor\r\n }\r\n };\r\n }\r\n }\r\n}\r\n","/**\r\n * Apply key and blur events on message\r\n */\r\nconst ManageFocusOnKeyEvents = function (element) {\r\n if (element) {\r\n let eventFunction = (e) => {\r\n // Apply apexchat_element_on_focus class on tab key because we just need to show border when focus from tab key not from mouse click\r\n if (e.type == 'keyup' && (e.keyCode == 9 || e.code == 'tab')) {\r\n element.classList.add('apexchat_element_on_focus');\r\n }\r\n if (e.type == 'blur') {\r\n // when focus removed from element, so blue border should not appear.\r\n element.classList.remove('apexchat_element_on_focus');\r\n }\r\n };\r\n element.addEventListener('keyup', eventFunction);\r\n element.addEventListener('blur', eventFunction);\r\n }\r\n};\r\nexport default ManageFocusOnKeyEvents;\r\n","import ADACompliantActionButton from './ADACompliantActionButton';\r\nimport GlobalVariables from '../GlobalVariables';\r\nimport ChatMode from './ChatMode';\r\n\r\nconst SetADACompliantAttributes = function (container, chatMode, selector) {\r\n const chatTitle =\r\n chatMode == ChatMode.DOM\r\n ? GlobalVariables.DOM_CHAT_TITLE\r\n : GlobalVariables.WINDOWED_CHAT_TITLE;\r\n ADACompliantActionButton(container, selector, chatTitle);\r\n};\r\nexport default SetADACompliantAttributes;\r\n","import logIt from \"../../../logIt\";\r\n\r\n/**\r\nPurpose: A static class to keep temporary variables: 1. in memory, 2. in user session\r\nMotivation: This is to avoid declaring global variables in code\r\nTwo-In-1 Usage: The extra 'persist' flag in add() will make sure variable values don't get lost and maintain in page reloads\r\n* */\r\nconst TempStorageCache = {\r\n get(key) {\r\n try {\r\n if (this[key]) {\r\n return this[key];\r\n }\r\n return sessionStorage.getItem(key);\r\n } catch (e) {\r\n logIt(e.message);\r\n }\r\n },\r\n\r\n getAndRemove(key) {\r\n const got = this.get(key);\r\n this.del(key);\r\n return got;\r\n },\r\n\r\n add(key, value, persist /* optional */) {\r\n try {\r\n this[key] = value;\r\n if (persist) {\r\n sessionStorage.setItem(key, value);\r\n }\r\n } catch (e) {\r\n logIt(e.message);\r\n }\r\n },\r\n\r\n del(key) {\r\n try {\r\n delete this[key];\r\n sessionStorage.removeItem(key);\r\n } catch (e) {\r\n logIt(e.message);\r\n }\r\n }\r\n}\r\nexport default TempStorageCache\r\n","/*\r\n Help track time lapse - tells you the time difference between each \"check()\" and since the \"start()\"\r\n*/\r\nexport default class TimeTracker {\r\n constructor() {\r\n this.startTime = new Date().getTime();\r\n this.now = this.start;\r\n }\r\n\r\n start() {\r\n this.startTime = new Date().getTime();\r\n }\r\n\r\n check() {\r\n this.now = new Date().getTime();\r\n // console.log(message, 'time elapsed:', now - start);//uncomment this in dev or debug mode\r\n }\r\n}\r\n","import GlobalVariables from \"../GlobalVariables\";\r\n\r\n\r\nconst addStyleTextInIframe = (text, id, before, dom) => {\r\n try {\r\n\r\n let cssNode = null;\r\n const defaultSheetId = 'apexchat_default_iframeCss';\r\n id = id || defaultSheetId;\r\n cssNode = dom.getElementById(id);\r\n if (!cssNode) {\r\n cssNode = dom.createElement('style');\r\n cssNode.type = 'text/css';\r\n cssNode.rel = 'stylesheet';\r\n cssNode.media = 'screen';\r\n if (id) {\r\n cssNode.id = id;\r\n }\r\n }\r\n // running cache of styles so we don't query the dom; fixes a bug in <= IE7 where dom querying blows up\r\n if (!GlobalVariables.iframeStyles[id]) {\r\n GlobalVariables.iframeStyles[id] = '';\r\n }\r\n GlobalVariables.iframeStyles[id] += text;\r\n\r\n if (cssNode.styleSheet) {\r\n cssNode.styleSheet.cssText = GlobalVariables.iframeStyles[id];\r\n } else {\r\n cssNode.appendChild(dom.createTextNode(text));\r\n }\r\n if (before) {\r\n dom.getElementsByTagName('head')[0].insertBefore(\r\n cssNode,\r\n dom.getElementsByTagName('head')[0].firstChild\r\n );\r\n } else {\r\n dom.getElementsByTagName('head')[0].appendChild(cssNode);\r\n }\r\n } catch (ex) {\r\n if (window.console) {\r\n window.console.error(ex);\r\n }\r\n }\r\n};\r\nexport default addStyleTextInIframe;\r\n","const crossDomainTracking = (domain, gaAccount, isChat) => {\r\n // removing the leading www if it exists\r\n domain = domain.replace(/^(www\\.)/, '');\r\n if (isChat) {\r\n (function (i, s, o, g, r, a, m) {\r\n i.GoogleAnalyticsObject = r;\r\n (i[r] =\r\n i[r] ||\r\n function () {\r\n (i[r].q = i[r].q || []).push(arguments);\r\n }),\r\n (i[r].l = 1 * new Date());\r\n (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);\r\n a.async = 1;\r\n a.src = g;\r\n m.parentNode.insertBefore(a, m);\r\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\r\n\r\n ga('create', gaAccount, 'auto', { allowLinker: true });\r\n ga('require', 'linker');\r\n ga('linker:autoLink', [domain]);\r\n ga('send', 'event', 'Chats', 'chatStarted');\r\n } else {\r\n ga('send', 'event', 'ChatsToLeads', 'converted');\r\n }\r\n};\r\nexport default crossDomainTracking;\r\n","const elementIsNotNULL = function (object) {\r\n if (object) {\r\n return true;\r\n }\r\n return false;\r\n};\r\nexport default elementIsNotNULL;\r\n","/* since getElementsByClassName is not supported in all Quirks Mode of IE, thats why we are writing this function */\r\n// modified by jerod, 1/6/16 to be faster and handle null nodes\r\nconst getElementsByClassName = (node, className) => {\r\n if (!node) {\r\n return [];\r\n }\r\n if (node.getElementsByClassName) {\r\n return node.getElementsByClassName(className);\r\n }\r\n const a = [];\r\n const re = new RegExp(`(^| )${className}( |$)`);\r\n const els = node.getElementsByTagName('*');\r\n for (let i = 0, j = els.length; i < j; i++) {\r\n if (re.test(els[i].className)) {\r\n a.push(els[i]);\r\n }\r\n }\r\n return a;\r\n};\r\nexport default getElementsByClassName;\r\n","import getBody from './getBody';\r\nimport { Position } from '../enums/Enum';\r\nimport getViewport from './getViewport';\r\n\r\n// determines the \"top\" coordinate needed to create a fixed position simulation\r\n/* If this context will be provided than this function will return the scroll position of that specific context */\r\nconst getFixedTop = (position, container, padding, forceEdge, context) => {\r\n let scroll;\r\n if (context) {\r\n scroll = context.documentElement.scrollTop\r\n ? context.documentElement.scrollTop\r\n : getBody(context).scrollTop;\r\n } else {\r\n scroll = document.documentElement.scrollTop\r\n ? document.documentElement.scrollTop\r\n : getBody().scrollTop;\r\n }\r\n if (!container) {\r\n // If container is NULL then just assign it.\r\n container = document.getElementById('apexchat');\r\n }\r\n if (container.offsetHeight) {\r\n const dims = getViewport();\r\n const halfHeight = dims[1] / 2 - container.offsetHeight / 2;\r\n\r\n const pos = position == Position.Center\r\n ? halfHeight + scroll\r\n : dims[1] - container.offsetHeight + scroll;\r\n return `${pos - (padding || 0)}px`;\r\n }\r\n};\r\nexport default getFixedTop;\r\n","// utils added for iframe/V3 version of codebase\r\nconst getQueryStringValue = function (key) {\r\n return unescape(\r\n window.location.search.replace(\r\n new RegExp(\r\n `^(?:.*[&\\\\?]${escape(key).replace(/[\\.\\+\\*]/g, '\\\\$&')}(?:\\\\=([^&]*))?)?.*$`,\r\n 'i'\r\n ),\r\n '$1'\r\n )\r\n );\r\n};\r\nexport default getQueryStringValue;\r\n","import { LogLevel } from '../enums/Enum';\r\nimport ServerLog from './ServerLog';\r\nimport GlobalVariables from '../GlobalVariables';\r\n\r\n\r\nconst getScript = (url, callback, debug) => {\r\n let script = document.createElement('script');\r\n const head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;\r\n\r\n script.src = url;\r\n if (debug === true) {\r\n script.src += '&debug=true';\r\n }\r\n\r\n script.id = `apexchat_script_${++GlobalVariables.scriptId}`;\r\n\r\n // add a monitor\r\n const timeout = window.setTimeout(() => {\r\n if (!script.loaded) {\r\n ServerLog.log({\r\n level: LogLevel.Error,\r\n visitorId: 0,\r\n companyId: 0,\r\n text: 'Timeout hit'\r\n });\r\n alert(\"We're sorry, but the chat could not be started. Please try again.\");\r\n }\r\n }, 30000);\r\n\r\n // when the script loads, clear the timeout and invoke the callback\r\n script.onload = script.onreadystatechange = function (_, isAbort) {\r\n if (!script.readyState || /loaded|complete/.test(script.readyState)) {\r\n window.clearTimeout(timeout);\r\n try {\r\n // Callback if not abort\r\n if (!isAbort) {\r\n callback();\r\n }\r\n\r\n // Handle memory leak in IE\r\n script.onload = script.onreadystatechange = null;\r\n\r\n // Remove the script\r\n if (head && script.parentNode) {\r\n head.removeChild(script);\r\n }\r\n\r\n // Dereference the script\r\n script = undefined;\r\n } catch (e) {\r\n }\r\n }\r\n };\r\n\r\n // Use insertBefore instead of appendChild to circumvent an IE6 bug.\r\n // This arises when a base node is used, per Jquery bugs (#2709 and #4378).\r\n head.insertBefore(script, head.firstChild);\r\n};\r\nexport default getScript;\r\n","const getStyleForIframe = function (url, linkId, iframeId, dom) {\r\n return new Promise((resolve, reject) => {\r\n let DOM = dom;\r\n if (iframeId) {\r\n const iFrame = document.getElementById(iframeId);\r\n let framedoc = iFrame.contentDocument;\r\n if (!framedoc && iFrame.contentWindow) {\r\n framedoc = iFrame.contentWindow.document;\r\n }\r\n\r\n DOM = iFrame.contentWindow || iFrame.contentDocument;\r\n if (DOM.document) {\r\n DOM = DOM.document;\r\n }\r\n }\r\n\r\n const link = DOM.createElement('link');\r\n const head = DOM.head || DOM.getElementsByTagName('head')[0] || DOM.documentElement;\r\n if (DOM.getElementById(linkId)) {\r\n // if already exists remove it\r\n head.removeChild(DOM.getElementById(linkId));\r\n }\r\n\r\n link.href = url;\r\n link.id = linkId;\r\n link.type = 'text/css';\r\n link.rel = 'stylesheet';\r\n\r\n head.insertBefore(link, head.firstChild);\r\n link.onload = link.onreadystatechange = function () {\r\n resolve(this);\r\n };\r\n });\r\n};\r\nexport default getStyleForIframe;\r\n","const getViewport = () => {\r\n let viewportwidth;\r\n let viewportheight;\r\n\r\n // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight\r\n if (typeof window.innerWidth !== 'undefined') {\r\n viewportwidth = window.innerWidth;\r\n viewportheight = window.innerHeight;\r\n }\r\n\r\n\r\n // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)\r\n else if (typeof document.documentElement !== 'undefined' &&\r\n typeof document.documentElement.clientWidth !== 'undefined' &&\r\n document.documentElement.clientWidth) {\r\n viewportwidth = document.documentElement.clientWidth;\r\n viewportheight = document.documentElement.clientHeight;\r\n }\r\n\r\n\r\n // older versions of IE\r\n else {\r\n viewportwidth = document.getElementsByTagName('body')[0].clientWidth;\r\n viewportheight = document.getElementsByTagName('body')[0].clientHeight;\r\n }\r\n\r\n return [viewportwidth, viewportheight];\r\n};\r\nexport default getViewport;\r\n","import configureGoogleAnalytics4 from './configureGoogleAnalytics4';\r\nimport getStorageAPIValue from './getStorageAPIValue';\r\n\r\nconst googleAnalytics4 = (measurementId, isChat) => {\r\n configureGoogleAnalytics4(measurementId);\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n function gtag() {\r\n dataLayer.push(arguments);\r\n }\r\n gtag('js', new Date());\r\n\r\n // don't send page view event when we load the gtag script\r\n gtag('config', measurementId, { send_page_view: false });\r\n\r\n if (isChat) {\r\n if (getStorageAPIValue('livechat_ga4_chat_logged') != 'true') {\r\n gtag('event', 'chatStart', { send_to: measurementId });\r\n ApexChat.storageAPI.Store('livechat_ga4_chat_logged', true);\r\n }\r\n } else if (getStorageAPIValue('livechat_ga4_lead_logged') != 'true') {\r\n gtag('event', 'chatLead', { send_to: measurementId });\r\n ApexChat.storageAPI.Store('livechat_ga4_lead_logged', true);\r\n }\r\n};\r\nexport default googleAnalytics4;\r\n","const googleAnalyticsObjectInit = (objectName) => {\r\n // initializing the google analytics object\r\n (function (i, s, o, g, r, a, m) {\r\n i.GoogleAnalyticsObject = r;\r\n (i[r] =\r\n i[r] ||\r\n function () {\r\n (i[r].q = i[r].q || []).push(arguments);\r\n }),\r\n (i[r].l = 1 * new Date());\r\n (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);\r\n a.async = 1;\r\n a.src = g;\r\n m.parentNode.insertBefore(a, m);\r\n })(window, document, 'script', '//www.google-analytics.com/analytics.js', objectName);\r\n};\r\nexport default googleAnalyticsObjectInit;\r\n","import elementIsNotNULL from './elementIsNotNULL';\r\n\r\nconst hideElement = function (element) {\r\n if (!element) return;\r\n if (typeof element === 'string') {\r\n element = document.getElementById(element);\r\n }\r\n if (elementIsNotNULL(element)) {\r\n element.style.display = 'none';\r\n }\r\n};\r\nexport default hideElement;\r\n","// Space and Enter Keys are used to accept Inputs\r\nconst isAcceptKey = function (e) {\r\n if (e.code === 'Space' || e.code === 'Enter' || e.keyCode === 13 || e.keyCode === 32) {\r\n return true;\r\n }\r\n return false;\r\n};\r\nexport default isAcceptKey;\r\n","const isEscapeKey = function (e) {\r\n return e.key === 'Escape';\r\n};\r\nexport default isEscapeKey;\r\n","const isTabKey = function (e) {\r\n return e.key === 'Tab';\r\n};\r\nexport default isTabKey;\r\n","import getStorageAPIValue from './getStorageAPIValue';\r\nimport GlobalVariables from '../GlobalVariables';\r\n\r\nconst logClickEventOnGA = () => {\r\n function createGuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === 'x' ? r : (r & 3) | 8;\r\n return v.toString(16);\r\n });\r\n }\r\n try {\r\n if (getStorageAPIValue('apex_ga_click_logged') != 'true') {\r\n const ga_url = `https://www.google-analytics.com/collect?v=1&tid=UA-41498037-4&t=event&ec=ChatStart&ea=NewChat&cid=${createGuid()}&dl=${GlobalVariables.ApexChatBaseUrl}`;\r\n const elem = document.createElement('img');\r\n elem.src = ga_url;\r\n elem.setAttribute('width', 1);\r\n elem.setAttribute('height', 1);\r\n elem.setAttribute('style', 'display:none;');\r\n document.head.appendChild(elem);\r\n ApexChat.storageAPI.Store('apex_ga_click_logged', true);\r\n }\r\n } catch (e) { }\r\n};\r\nexport default logClickEventOnGA;\r\n","const observe = function (element, event, handler) {\r\n if (element) {\r\n // JIRA_3079 - If element is present in the page then continue binding.\r\n if (element.addEventListener) {\r\n element.addEventListener(event, handler, false);\r\n } else if (element.attachEvent) {\r\n element.attachEvent(`on${event}`, handler);\r\n } else {\r\n element[`on${event}`] = handler;\r\n }\r\n }\r\n};\r\nexport default observe;\r\n","import GlobalVariables from \"../GlobalVariables\";\r\n\r\n\r\nconst parseTemplate = (str, data) => {\r\n /// \r\n /// Client side template parser that uses <#= #> and <# code #> expressions.\r\n /// and # # code blocks for template expansion.\r\n /// NOTE: chokes on single quotes in the document in some situations\r\n /// use &rsquo; for literals in text and avoid any single quote\r\n /// attribute delimiters.\r\n /// \r\n /// The text of the template to expand\r\n /// \r\n /// Any data that is to be merged. Pass an object and\r\n /// that object's properties are visible as variables.\r\n /// \r\n /// \r\n let err = '';\r\n try {\r\n let func = GlobalVariables.TmpleteCache[str];\r\n if (!func) {\r\n const strFunc = `var p=[],print=function(){p.push.apply(p,arguments);};` +\r\n `with(obj){p.push('${str\r\n .replace(/[\\r\\t\\n]/g, ' ')\r\n .replace(/'(?=[^#]*#>)/g, '\\t')\r\n .split(\"'\")\r\n .join(\"\\\\'\")\r\n .split('\\t')\r\n .join(\"'\")\r\n .replace(/<#=(.+?)#>/g, \"',$1,'\")\r\n .split('<#')\r\n .join(\"');\")\r\n .split('#>')\r\n .join(\"p.push('\")}');}return p.join('');`;\r\n\r\n // alert(strFunc);\r\n func = new Function('obj', strFunc);\r\n GlobalVariables.TmpleteCache[str] = func;\r\n }\r\n return func(data);\r\n } catch (e) {\r\n err = e.message;\r\n }\r\n return `< # ERROR: ${err.htmlEncode ? err.htmlEncode() : err} # >`;\r\n};\r\nexport default parseTemplate;\r\n","import crossDomainTracking from './crossDomainTracking';\r\nimport googleAnalytics4 from './googleAnalytics4';\r\nimport AnalyticsTracking from './AnalyticsTracking';\r\nimport log from './log';\r\nimport sendGAClientId from './sendGAClientId';\r\n\r\n// Code for sending chats or leads data over to multiple trackings\r\nconst sendChatAndLeadAnalytics = (ApexChatStartData, isChat, visitorsGoogleClientId) => {\r\n const companytrackings = ApexChatStartData.companyTrackingTypes;\r\n if (companytrackings && companytrackings.length > 0) {\r\n try {\r\n const gaCode = ApexChatStartData.googleUniversalCode;\r\n const fbCode = ApexChatStartData.facebookPixelCode;\r\n const customAnalyticsLeadCode = ApexChatStartData.leadCodeForCustomAnalytics;\r\n const customAnalyticsChatCode = ApexChatStartData.chatCodeForCustomAnalytics;\r\n const domain = ApexChatStartData.googleAnalyticsDomain;\r\n\r\n for (let i = 0; i < companytrackings.length; i++) {\r\n // conditions to check\r\n const checkGoogleUniversal =\r\n AnalyticsTracking.GoogleUniversal == companytrackings[i].trackingType &&\r\n ApexChatStartData.googleAnalyticsAccount &&\r\n gaCode;\r\n const checkGoogleAnalyticsWithClientId =\r\n AnalyticsTracking.GoogleAnalyticsClientId == companytrackings[i].trackingType &&\r\n ApexChatStartData.googleAnalyticsAccount;\r\n const checkFacebook =\r\n AnalyticsTracking.FacebookPixel == companytrackings[i].trackingType &&\r\n ApexChatStartData.facebookPixelAccount &&\r\n fbCode;\r\n const checkCustom =\r\n AnalyticsTracking.Custom == companytrackings[i].trackingType &&\r\n (customAnalyticsLeadCode || customAnalyticsChatCode);\r\n const checkCrossDomainTracking =\r\n AnalyticsTracking.GoogleAnalyticsCrossDomainTracking ==\r\n companytrackings[i].trackingType && ApexChatStartData.googleAnalyticsDomain;\r\n const checkGoogleAnalytics4 =\r\n AnalyticsTracking.GoogleAnalytics4 == companytrackings[i].trackingType &&\r\n ApexChatStartData.googleAnalyticsMeasurementId;\r\n if (checkGoogleUniversal || checkGoogleAnalyticsWithClientId) {\r\n if (checkGoogleAnalyticsWithClientId) {\r\n // New and improved procedure for sending chats to GA by clientId\r\n sendGAClientId(\r\n visitorsGoogleClientId,\r\n gat,\r\n ApexChatStartData.googleAnalyticsAccount,\r\n isChat ? 'LiveChat' : 'LiveChatLead',\r\n isChat ? 'LiveChatStarted' : 'LiveChatLeadStarted',\r\n isChat ? 'LiveChatConverted' : 'LiveChatLeadConverted'\r\n );\r\n } else {\r\n eval(gaCode);\r\n // sending over chats source, medium etc to google universal; if source is null than landing referrer should be sent as source else none\r\n GoogleUniversalTracker(\r\n ApexChatStartData.googleAnalyticsAccount,\r\n isChat ? '/chats' : '/chatToLead',\r\n isChat ? 'Chats' : 'ChatsToLeads',\r\n isChat ? 'chatStarted' : 'converted',\r\n ApexChatStartData.googleAnalyticsCampaignSource\r\n ? ApexChatStartData.googleAnalyticsCampaignSource\r\n : ApexChatStartData.landingReferrer\r\n ? ApexChatStartData.landingReferrer\r\n : 'direct',\r\n ApexChatStartData.googleAnalyticsCampaignMedium\r\n ? ApexChatStartData.googleAnalyticsCampaignMedium\r\n : 'none',\r\n ApexChatStartData.googleAnalyticsCampaignName\r\n ? ApexChatStartData.googleAnalyticsCampaignName\r\n : 'none',\r\n ApexChatStartData.googleAnalyticsCampaignContent\r\n ? ApexChatStartData.googleAnalyticsCampaignContent\r\n : 'none'\r\n );\r\n }\r\n } else if (checkCrossDomainTracking) {\r\n crossDomainTracking(\r\n ApexChatStartData.googleAnalyticsDomain,\r\n ApexChatStartData.googleAnalyticsAccount,\r\n isChat\r\n );\r\n } else if (checkFacebook) {\r\n eval(fbCode);\r\n // sending over chats/Leads to facebook pixel\r\n FacebookPixelTracker(\r\n ApexChatStartData.facebookPixelAccount,\r\n isChat ? 'Chat' : 'Lead'\r\n );\r\n } else if (checkCustom) {\r\n if (isChat) {\r\n // sending over chats to user defined analytic engine\r\n const sendChatInfoToCustomAnalyticsEngine = new Function(\r\n customAnalyticsChatCode\r\n );\r\n sendChatInfoToCustomAnalyticsEngine();\r\n } else {\r\n // sending over leads to user defined analytic engine\r\n const sendLeadInfoToCustomAnalyticsEngine = new Function(\r\n customAnalyticsLeadCode\r\n );\r\n sendLeadInfoToCustomAnalyticsEngine();\r\n }\r\n } else if (checkGoogleAnalytics4) {\r\n googleAnalytics4(ApexChatStartData.googleAnalyticsMeasurementId, isChat);\r\n }\r\n }\r\n } catch (e) {\r\n log(e);\r\n }\r\n }\r\n};\r\nexport default sendChatAndLeadAnalytics;\r\n","// New and improved procedure for sending data over to google analytics with respect to clientId\r\nconst sendGAClientId = function (\r\n visitorsGoogleClientId,\r\n ga,\r\n gaAccount,\r\n eventCategory,\r\n eventAction,\r\n eventLabel\r\n) {\r\n // If the visitor's client Id is not empty than we are passing it to google and If visitor's client Id is empty than generate a new client Id.\r\n let gaClientId = '';\r\n if (!visitorsGoogleClientId) {\r\n if (gaAccount && ga) {\r\n ga('create', gaAccount, 'auto');\r\n ga((tracker) => {\r\n gaClientId = tracker.get('clientId');\r\n });\r\n }\r\n } else {\r\n gaClientId = visitorsGoogleClientId;\r\n }\r\n // If clientId is tracked then we are sending an event.\r\n if (gaClientId) {\r\n ga('create', gaAccount, {\r\n storage: 'none',\r\n clientId: gaClientId\r\n });\r\n ga('send', 'event', eventCategory, eventAction, eventLabel);\r\n }\r\n};\r\nexport default sendGAClientId;\r\n","import elementIsNotNULL from \"../../core/hooks/elementIsNotNULL\";\r\n\r\n/**\r\n * Shows or hides the specified element based on the value of isSpan.\r\n *\r\n * @param {string|HTMLElement} element - The element to show or hide.\r\n * @param {boolean} isSpan - A flag to determine if the element should be displayed inline-block.\r\n */\r\nconst showElement = function (element, isSpan) {\r\n // isSpan is introduced if element TagName is SPAN than it should be inline-block\r\n if (typeof element === 'string') {\r\n element = document.getElementById(element);\r\n }\r\n if (elementIsNotNULL(element)) {\r\n if (!isSpan) {\r\n element.style.display = 'block';\r\n } else {\r\n element.style.display = 'inline-block';\r\n }\r\n }\r\n};\r\nexport default showElement;\r\n","import logIt from \"../../../logIt\";\r\n\r\nconst throttleByFunctionName = function (func, timeInSeconds, throttledFunctionName) {\r\n const me = this;\r\n return function (...args) {\r\n const functionName = throttledFunctionName || func.name || 'anonymous';\r\n logIt(\r\n `throttle check for function name: ${ApexChat.throttledFunctions[functionName]} check: ${functionName}`\r\n );\r\n\r\n if (!ApexChat.throttledFunctions[functionName]) {\r\n // Call the original function with provided arguments\r\n func.apply(this, args);\r\n\r\n // Set a timeout to reset the throttling after the specified time\r\n setTimeout(() => {\r\n ApexChat.throttledFunctions[functionName] = false;\r\n }, timeInSeconds * 1000);\r\n\r\n // Set the flag to indicate that the function is currently throttled\r\n ApexChat.throttledFunctions[functionName] = true;\r\n } else {\r\n logIt(`throttled!${ApexChat.throttledFunctions[functionName]}`);\r\n }\r\n };\r\n};\r\nexport default throttleByFunctionName;\r\n","// note: contains utility function like lodash.js\r\n// todo: this should be move to some other location in a better way\r\nconst underscore = {\r\n // todo: very basic implementation without any typechecking\r\n firstIndex(items, predicate) {\r\n let selectedindex = -1;\r\n for (let i = 0; i < items.length; i++) {\r\n if (predicate(items[i])) {\r\n selectedindex = i;\r\n break;\r\n }\r\n }\r\n return selectedindex;\r\n },\r\n isFunction(func) {\r\n return typeof func === 'function';\r\n },\r\n // isArray: function (func) {\r\n // // for safe-side for very old browsers like chrome 5 and current version is Chrome#90.\r\n // if (typeof Array.isArray === 'undefined') {\r\n // Array.isArray = function (obj) {\r\n // return Object.prototype.toString.call(obj) === '[object Array]';\r\n // }\r\n // }\r\n // return Array.isArray(func);\r\n // },\r\n isPlainObject(obj) {\r\n /**\r\n * Because of IE, we must also check the constructor properties to ensure that node objects and window objects are not passed.\r\n */\r\n if (!obj || typeof obj !== 'object' || obj.nodeType || underscore.isWindow(obj)) {\r\n return false;\r\n }\r\n try {\r\n // If obj has no constructor attribute and no obj in the prototype chain of obj returns false\r\n if (\r\n obj.constructor &&\r\n !underscore.hasOwn.call(obj, 'constructor') &&\r\n !underscore.hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')\r\n ) {\r\n return false;\r\n }\r\n } catch (e) {\r\n // IE8,9 will throw throw exceptions on certain host\r\n return false;\r\n }\r\n let key;\r\n for (key in obj) {\r\n }\r\n /**\r\n * If the key is not assigned, return fasle\r\n */\r\n return key === undefined || underscore.hasOwn.call(obj, key);\r\n },\r\n hasOwn:\r\n {}.hasOwnProperty ||\r\n function (prop) {\r\n if (prop in this) {\r\n const value = this[prop];\r\n\r\n if (!delete this[prop]) {\r\n return true;\r\n }\r\n if (!(prop in this) || this[prop] !== value) {\r\n this[prop] = value;\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n isWindow(obj) {\r\n return obj != null && obj === obj.window;\r\n }\r\n};\r\nexport default underscore;\r\n","const clone = (src) => {\r\n function mixin(dest, source, copyFunc) {\r\n let name;\r\n let s;\r\n let i;\r\n const empty = {};\r\n for (name in source) {\r\n // the (!(name in empty) || empty[name] !== s) condition avoids copying properties in \"source\"\r\n // inherited from Object.prototype. For example, if dest has a custom toString() method,\r\n // don't overwrite it with the toString() method that source inherited from Object.prototype\r\n s = source[name];\r\n if (!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))) {\r\n dest[name] = copyFunc ? copyFunc(s) : s;\r\n }\r\n }\r\n return dest;\r\n }\r\n\r\n if (\r\n !src ||\r\n typeof src !== 'object' ||\r\n Object.prototype.toString.call(src) === '[object Function]'\r\n ) {\r\n // null, undefined, any non-object, or function\r\n return src; // anything\r\n }\r\n if (src.nodeType && 'cloneNode' in src) {\r\n // DOM Node\r\n return src.cloneNode(true); // Node\r\n }\r\n if (src instanceof Date) {\r\n // Date\r\n return new Date(src.getTime()); // Date\r\n }\r\n if (src instanceof RegExp) {\r\n // RegExp\r\n return new RegExp(src); // RegExp\r\n }\r\n let r;\r\n let i;\r\n let l;\r\n if (src instanceof Array) {\r\n // array\r\n r = [];\r\n for (i = 0, l = src.length; i < l; ++i) {\r\n if (i in src) {\r\n r.push(ApexChat.clone(src[i]));\r\n }\r\n }\r\n // we don't clone functions for performance reasons\r\n // }else if(d.isFunction(src)){\r\n // // function\r\n // r = function(){ return src.apply(this, arguments); };\r\n } else {\r\n // generic objects\r\n r = src.constructor ? new src.constructor() : {};\r\n }\r\n return mixin(r, src, ApexChat.clone);\r\n};\r\nexport default clone;\r\n","import Cookies from \"./core/hooks/Cookies\";\r\n\r\n\r\nexport function getParam(s, q) {\r\n try {\r\n const match = s.match(`[?&]${q}=([^&]+)`);\r\n return match ? match[1] : '';\r\n // return s.match(RegExp('(^|&)'+q+'=([^&]*)'))[2];\r\n } catch (e) {\r\n return '';\r\n }\r\n}\r\n\r\nexport function calculateTrafficSource() {\r\n let source = '';\r\n let medium = '';\r\n let campaign = '';\r\n let term = '';\r\n let content = '';\r\n let campaignId = '';\r\n const search_engines = [\r\n ['bing', 'q'],\r\n ['google', 'q'],\r\n ['yahoo', 'q'],\r\n ['baidu', 'q'],\r\n ['yandex', 'q'],\r\n ['ask', 'q']\r\n ]; // List of search engines\r\n let ref = document.referrer;\r\n ref = ref.substr(ref.indexOf('//') + 2);\r\n let ref_domain = ref;\r\n let ref_path = '/';\r\n let ref_search = '';\r\n // Checks for campaign parameters\r\n const url_search = document.location.search;\r\n\r\n // console.log(url_search.indexOf('utm_source'));\r\n // console.log(getParam(url_search, 'gclid'));\r\n // console.log(url_search);\r\n\r\n // Note for future: client can have both utm parameters and gclid values. it shouldn't be if/else.\r\n if (url_search.indexOf('utm_') > -1) {\r\n source = getParam(url_search, 'utm_source');\r\n medium = getParam(url_search, 'utm_medium');\r\n campaign = getParam(url_search, 'utm_campaign');\r\n term = getParam(url_search, 'utm_term');\r\n content = getParam(url_search, 'utm_content');\r\n campaignId = getParam(url_search, 'utm_id');\r\n } else if (getParam(url_search, 'gclid')) {\r\n source = 'google';\r\n medium = 'cpc';\r\n campaign = '(not set)';\r\n } else if (ref) {\r\n // separate domain, path and query parameters\r\n if (ref.indexOf('/') > -1) {\r\n ref_domain = ref.substr(0, ref.indexOf('/'));\r\n ref_path = ref.substr(ref.indexOf('/'));\r\n if (ref_path.indexOf('?') > -1) {\r\n ref_search = ref_path.substr(ref_path.indexOf('?') + 1);\r\n ref_path = ref_path.substr(0, ref_path.indexOf('?'));\r\n }\r\n }\r\n medium = 'referral';\r\n source = ref_domain;\r\n // Extract term for organic source\r\n for (let i = 0; i < search_engines.length; i++) {\r\n if (ref_domain.indexOf(search_engines[i][0]) > -1) {\r\n medium = 'organic';\r\n source = search_engines[i][0];\r\n term = getParam(ref_search, search_engines[i][1]) || '(not provided)';\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n source,\r\n medium,\r\n campaign,\r\n term,\r\n content,\r\n campaignId\r\n };\r\n}\r\n\r\nexport function getTrafficSource(cookieName, hostname) {\r\n const trafficSources = calculateTrafficSource();\r\n let overwriteTrafficSource = false;\r\n if (trafficSources.source.length === 0) {\r\n overwriteTrafficSource = true;\r\n }\r\n const source = trafficSources.source.length === 0 ? 'direct' : trafficSources.source;\r\n const medium = trafficSources.medium.length === 0 ? 'none' : trafficSources.medium;\r\n let campaign = trafficSources.campaign.length === 0 ? 'direct' : trafficSources.campaign;\r\n // exception\r\n if (medium === 'referral') {\r\n campaign = '';\r\n }\r\n const rightNow = new Date();\r\n const value = `source=${source}&medium=${medium}&campaign=${campaign}&term=${trafficSources.term\r\n }&content=${trafficSources.content}&campaignId=${trafficSources.campaignId\r\n }&overwritetrafficsource=${overwriteTrafficSource}&date=${rightNow\r\n .toISOString()\r\n .slice(0, 10)\r\n .replace(/-/g, '')}`;\r\n return value;\r\n}\r\nexport function writeTrafficSourcesLogic(n) {\r\n let a = getTrafficSource(n, '.example.com'); // Insert your domain here\r\n a = a.replace(/\\|{2,}/g, '|');\r\n a = a.replace(/^\\|/, '');\r\n a = unescape(a);\r\n Cookies.set(n, a, 182); // Cookie expiration sets to 182 days\r\n}\r\n"],"names":["BaseWidget","BaseClass","constructor","options","super","iframeId","iFrame","document","getElementById","this","DOM","contentWindow","contentDocument","iFrameWindow","container","getContainer","Object","assign","targetElementId","chatSize","ChatSize","Small","overrideHandlerId","invitationDisplayMode","InvitationDisplayMode","Drop","containerId","maskId","inProgressContainerId","minimizedContainerId","exitPopupRegionEditorContainerId","callToActionId","mobileDOM_MinimizeInvitation","mobileDOM_Chevron","mobileDOM_ChevronInMinimizedContainer","chevronStyle_MinimizeInvitation","chevronStyle_AgentImage","minimizedCallToActionId","closeButtonId","altCloseButtonId","tabHeaderId","exitPopupContainerId","exitPopupMinimizedContainerId","initialLoadTimeout","subsequentLoadTimeout","animationTime","handlerImageUrl","agentName","agentAliasId","operatorId","defaultOperatorId","visitorId","profileId","highlightColor","hideOnClose","alwaysShowMinimizedInviteInSecondaryLocation","maintainHiddenState","maintainMinimizedState","skinInviteType","SkinInviteType","Standard","invitationTabTextTemplate","invitationMinimizedTabTextTemplate","invitationInProgressTabTextTemplate","invitationTextTemplate","invitationMinimizedTextTemplate","invitationInProgressTextTemplate","invitationActionTextTemplate","invitationActionVideoTextTemplate","invitationVideoActionText","parseTemplate","invitationVideoActionTextTemplate","invitationMinimizedActionTextTemplate","invitationInProgressActionTextTemplate","invitationCloseTextTemplate","invitationWidgetStyle","invitationWidgetStyleQuirks","invitationWidgetStyleIE6","invitationWidgetStyleCustom","invitationWidgetTemplate","invitationWidgetTemplateMinimized","invitationWidgetTemplateInProgress","poweredBy","chatMode","ChatMode","Windowed","position","Position","Right","secondaryPosition","invitationHideShowTabEnabled","invitationTabDirection","InvitationTabDirection","Down","invitationShowTabDuration","wiggleEnabled","wiggleInterval","rememberShownState","preloadEnabled","fixFlash","isMobile","mobileDisplayMode","MobileDisplayMode","Default","frameBuster","frameBusterMessage","invitationMask","language","getQueryStringValue","enableChatWindowCloseWarning","chatbar","reShowIntervalMinutes","smsEnabled","smsSubject","smsNumber","applyMobileViewport","widget","draggables","initiatedBy","getInitiatedBy","behaviors","state","changeState","toState","WidgetStates","Initialized","ready","Ready","TempStorageCache","add","create","me","styleName","console","log","GlobalVariables","CdnBaseUrl","getStyleForIframe","undefined","Created","isWriteTrafficSourcesLogicApplied","get","isInvitationType","referrer","split","domain","previousSessionCookie","getCookieValue","TempCache","VISITOR_TRACKING_COOKIE","writeTrafficSourcesLogic","indexOf","WidgetTypes","DropDown","isActiveChatMinimizedOnPageReload","logIt","room","then","module","LiveChatRoom","default","isFromInvitation","initChatRoom","setChatId","CHAT_ID_COOKIE","CHAT_TOKEN_COOKIE","isStaticButtonRegistered","registerStaticButton","subscribe","Static","Clicked","data","onInvitationClick","chatInitiatedBy","staticButton","getElementsByClassName","observe","postMessage","event","show","ShownNormal","ADACompliant","push","apply","SetADACompliantAttributes","preloadChatOptions","cb","url","query","getQueryString","visitorInfoId","invitationVersion","evn","API_URL","getScript","preLoadedOptions","ApexChat","getPreloadedChatOptions","localStorageAPI","Store","JSON","stringify","PreloadedChatOptions","execChatStartHandler","callback","queryString","LiveChatServiceUrl","videoGreetEnabled","videoGreetWatchTime","chatStartOptions","ApexChatStartData","execChatStartHandlerWithThrottle","throttleByFunctionName","bind","preloadFormOptions","ApexChatQuery","ApexChatBaseUrl","preloadVisitorFormOptions","reInitChat","$","uicontroller","loadChatRoom","getCurrentState","minimize","ShownMinimized","showElement","parentDivId","maximize","ShownMaximized","hide","Hidden","popout","PoppedOut","close","Closed","QuestionTypeRendererFactory","destroy","e","extra","logClickEventOnGA","isDomChatPoppedOut","WindowedChatStarted","getStorageAPIValue","TimeTracker","start","usingSmsService","startFacebookChat","getSmsService","requestVisitorInfo","VisitorFormClicked","interceptorResults","startWindowedChat","selectedLanguage","_domStartTime","Date","getTime","visitorsGoogleClientId","Cookies","sendChatAndLeadAnalytics","companyTrackingSettings","invokeChatInterceptor","window","ChatInterceptor","exInner","setAttribute","companyFacebookPageName","click","onVideoChatClick","DynamicVisitorFormClicked","setClickCallToAction","element","clickCallToAction","chatTab","style","cursor","addEventListener","bind2","handleADA","openWindowed","v3WidgetType","bindWindowedHandler","selector","querySelector","formChat","permutator","inputArr","results","permute","arr","memo","cur","i","length","splice","concat","slice","getSmsMessage","chatTabSmsMessage","chatBarSmsMessage","ChArray","UNICODE_CH","smsOptions","chatTabType","ChatType","sms","chatBarType","warn","separator","Browser","isiOS","EncodeArray","UNICODE_EN","UNICODE_INDEX","Math","floor","random","smsMessage","join","encodeURIComponent","ga","googleAnalyticsObjectInit","gaClientId","getGaClientId","googleAnalyticsAccount","trafficCookie","location","href","smsCh","visitationLogID","VISITOR_ID_COOKIE","companyId","chatInterceptorValue","getJSON","result","getRegionData","region","clone","borderStyle","backgroundStyle","fontCSS","textFont","width","height","zIndex","borderWidth","borderColor","borderRadius","backgroundColor","backgroundImage","extraCss","type","SkinRegionType","videoChat","VideoChat","action","Action","addElement","id","template","target","createElement","body","appendChild","overflow","display","CONTAINER_Z_INDEX","isIE","innerHTML","ieClasses","isIE7","isIE8","isIE9","targets","className","isQuirksMode","getStartStyle","right","monitorIE","setInterval","wiggling","top","getFixedTop","getChatWindowDimensions","h","w","chatHeight","chatWidth","viewportDimensions","getViewport","screenDimensions","outerWidth","screen","outerHeight","diff","dims","WINDOWED_CHAT_STARTED","clearTimeout","EP_SetTimeOut","windowedChatStarted","setTimeout","chatId","isDOM","requestVisitorName","URL","isPageRefreshed","getStateValue","ExitPopup","env","shouldContinueMapping","FullTextVisitorResponse","isChatActive","win","open","storageAPI","StoreTemp","isSafari","alert","isChatInProgress","domState","PreChat","Bar","Tab","serverLog","logInfo","trackClick","ServerLog","clickSource","addBehavior","include","Behaviors","showDOMFastOnClick","BehaviorTypes","FAST_DOM_UI_RENDERING","canWidgetShowNotifications","NOTIFICATIONS","hasCustomClickHandlersDefined","INVITATION_CLICKABLES","openCallback","closeCallback","elTrace","innerText","title","targetElem","srcElement","tagName","isAcceptKey","isEscapeKey","isTabKey","ManageFocusOnKeyEvents","context","stopPropagation","maintainPageRefreshState","storageAPIExists","IS_PAGE_REFRESHED","widgetType","VideoGreetInvitation","arrayObjectIndexOf","myArray","searchTerm","property","foundLast","len","replace","REMOVE_NON_ALPHANUMERIC","setup","setupNotification","bubbleContainer","notificationContainer","typingIndicatorAnimatedDots","typingIndicatorAnimatedDotsContainer","typingIndicator","messageCountContainer","showNotification","hideElement","newMsgNotificationsCount","resetNotificationCount","Remove","showTypingInMinimizedState","classList","remove","hideTypingInMinimizedState","showTypingWithAnimatedDotsInMinimizedState","showTypingWithAnimatedDotsContainer","hideTypingWithAnimatedDotsInMinimizedState","hideTypingWithAnimatedDotsConatiner","hideMsgCounts","showMsgCounts","increaseNotificationCounter","isChatFromAgent","lastDOMState","m","showNotificationCountOnReload","MAXIMIZE_ON_MINIMIZE","setStartChatHandler","clickInviation","RD_DOM","RD_Invitation","RD_EP","RD_PreChat","extend","name","src","copy","copyIsArray","arguments","deep","underscore","isFunction","isPlainObject","Array","isArray","elements","ADAElements","j","tabIndexCount","clearArray","adaClass","value","imageUrl","startsWith","None","GoogleUniversal","FacebookPixel","Custom","GoogleAnalyticsClientId","GoogleAnalyticsCrossDomainTracking","GoogleAnalytics4","Branding","init","brand","config","brandConfig","brandColor","global","branding","brandColorCode","brandColorOpacity","applyBranding","BrandingWidget","overrideConfig","propertyName","brandedConfig","getBrandingElements","backupConfig","parse","getBrandedConfig","brandingStaticValues","enableBranding","whiteText","general","headerColor","disclaimerFont","color","disclaimerBgColor","messages","agentFont","visitorFont","visitorBgColor","typingIndicatorDots","agentBgColor","questionType","qTBorder","qTQuestion","qTButton","btnClose","rdIcon","dotColor","dotAnimationColor","leftBarBackground1Color","leftBarBackground2Color","opacityBrandColor","header","participantsFont","agentFontField","visitorFontField","typingIndicatorFont","sendButton","sendbuttonBackgroundColor","messagePopup","highLightColor","rdGlowTagColor","eventFunction","keyCode","code","chatTitle","DOM_CHAT_TITLE","WINDOWED_CHAT_TITLE","ADACompliantActionButton","key","sessionStorage","getItem","message","getAndRemove","got","del","persist","setItem","removeItem","startTime","now","check","addStyleTextInIframe","text","before","dom","cssNode","rel","media","iframeStyles","styleSheet","cssText","createTextNode","getElementsByTagName","insertBefore","firstChild","ex","error","crossDomainTracking","gaAccount","isChat","s","o","r","a","GoogleAnalyticsObject","q","l","async","parentNode","allowLinker","object","node","re","RegExp","els","test","padding","forceEdge","scroll","documentElement","scrollTop","getBody","offsetHeight","halfHeight","Center","unescape","search","escape","debug","script","head","scriptId","timeout","loaded","level","LogLevel","Error","onload","onreadystatechange","_","isAbort","readyState","removeChild","linkId","Promise","resolve","reject","framedoc","link","viewportwidth","viewportheight","innerWidth","innerHeight","clientWidth","clientHeight","googleAnalytics4","measurementId","gtag","dataLayer","configureGoogleAnalytics4","send_page_view","send_to","objectName","elementIsNotNULL","ga_url","c","toString","elem","handler","attachEvent","str","err","func","TmpleteCache","strFunc","Function","htmlEncode","companytrackings","companyTrackingTypes","gaCode","googleUniversalCode","fbCode","facebookPixelCode","customAnalyticsLeadCode","leadCodeForCustomAnalytics","customAnalyticsChatCode","chatCodeForCustomAnalytics","googleAnalyticsDomain","checkGoogleUniversal","AnalyticsTracking","trackingType","checkGoogleAnalyticsWithClientId","checkFacebook","facebookPixelAccount","checkCustom","checkCrossDomainTracking","checkGoogleAnalytics4","googleAnalyticsMeasurementId","sendGAClientId","gat","eval","GoogleUniversalTracker","googleAnalyticsCampaignSource","landingReferrer","googleAnalyticsCampaignMedium","googleAnalyticsCampaignName","googleAnalyticsCampaignContent","FacebookPixelTracker","sendChatInfoToCustomAnalyticsEngine","sendLeadInfoToCustomAnalyticsEngine","eventCategory","eventAction","eventLabel","tracker","storage","clientId","isSpan","timeInSeconds","throttledFunctionName","functionName","throttledFunctions","_len","args","_key","firstIndex","items","predicate","selectedindex","obj","nodeType","isWindow","hasOwn","call","prototype","hasOwnProperty","prop","cloneNode","dest","source","copyFunc","empty","mixin","getParam","match","n","trafficSources","medium","campaign","term","content","campaignId","search_engines","ref","substr","ref_domain","ref_path","ref_search","url_search","calculateTrafficSource","overwriteTrafficSource","rightNow","toISOString","getTrafficSource","set"],"sourceRoot":""}