window.__lpEnvSite = "21991129";
window.__watchDogURL = "https://va-healthcheck-service.public.openaiplatform.telstra.com/codi_consumer_health";
window.__businessWatchDogURL = "https://va-healthcheck-service.public.openaiplatform.telstra.com/codi_business_health";
Object.defineProperty(window,"__loadLivePersonSrc",{value:function(){
window.lpTag=window.lpTag||{},'undefined'==typeof window.lpTag._tagCount?(window.lpTag={wl:lpTag.wl||null,scp:lpTag.scp||null,site:window.__lpEnvSite||'81478844',section:lpTag.section||'',tagletSection:lpTag.tagletSection||null,autoStart:lpTag.autoStart!==!1,ovr:lpTag.ovr||{},_v:'1.10.0',_tagCount:1,protocol:'https:',events:{bind:function(t,e,i){lpTag.defer(function(){lpTag.events.bind(t,e,i)},0)},trigger:function(t,e,i){lpTag.defer(function(){lpTag.events.trigger(t,e,i)},1)}},defer:function(t,e){0===e?(this._defB=this._defB||[],this._defB.push(t)):1===e?(this._defT=this._defT||[],this._defT.push(t)):(this._defL=this._defL||[],this._defL.push(t))},load:function(t,e,i){var n=this;setTimeout(function(){n._load(t,e,i)},0)},_load:function(t,e,i){var n=t;t||(n=this.protocol+'//'+(this.ovr&&this.ovr.domain?this.ovr.domain:'lptag.liveperson.net')+'/tag/tag.js?site='+this.site);var o=document.createElement('script');o.setAttribute('charset',e?e:'UTF-8'),i&&o.setAttribute('id',i),o.setAttribute('src',n),document.getElementsByTagName('head').item(0).appendChild(o)},init:function(){this._timing=this._timing||{},this._timing.start=(new Date).getTime();var t=this;window.attachEvent?window.attachEvent('onload',function(){t._domReady('domReady')}):(window.addEventListener('DOMContentLoaded',function(){t._domReady('contReady')},!1),window.addEventListener('load',function(){t._domReady('domReady')},!1)),'undefined'===typeof window._lptStop&&this.load()},start:function(){this.autoStart=!0},_domReady:function(t){this.isDom||(this.isDom=!0,this.events.trigger('LPT','DOM_READY',{t:t})),this._timing[t]=(new Date).getTime()},vars:lpTag.vars||[],dbs:lpTag.dbs||[],ctn:lpTag.ctn||[],sdes:lpTag.sdes||[],hooks:lpTag.hooks||[],identities:lpTag.identities||[],ev:lpTag.ev||[]},lpTag.init()):window.lpTag._tagCount+=1; }});
window.__disableVA = false;
window.__disableBusinessVA = false;
window.dtcDisabledPages = "https://www.telstra.com.au/chatnow/landing";
window.lpSettings = window.lpSettings || {
"heading": "Need help?",
"description": "Please tell us what you'd like to message us about",
"persistentChat": true,
"options": {"route0": {"label": "Mobile & Tablet Plans","isActive": "true","section": "telstra,service,aem,consumer","childs": {"route0": {"label": "Bill & Plan Enquiries","isActive": "true","section": "service-mobile,virtualassistant","lead": "MOB-bill-plan-addon","help": "Help & Support
I need to understand my bill
Report a payment or reconnect my service
Request a payment extension
Arrange or update direct debit
Check my upgrade and recontracting fees
"}, "route1": {"label": "Buy Online","isActive": "true","section": "sales-mobile","lead": "MOB-buy-online","help": "Help & Support
Order a new mobile
Get a SIM only plan
Check my upgrade date and fees
Track my order
Get help with a back order"}, "route2": {"label": "Existing Order","isActive": "true","section": "service-general,virtualassistant","lead": "MOB-existing-order","help": "Delays to some order deliveries
COVID-19 impacts are causing delays on some orders. Your order should arrive within 7 days in metro locations, while some regional orders may take longer. We're doing everything we can to get your order to you quickly and apologise for the inconvenience..
Help & Support
Track my order
Cancel or change my order
Confirm my plan details
Check my contract termination fees
Get help with a back order"}, "route3": {"label": "Fault","isActive": "true","section": "fault-mobile,virtualassistant","lead": "MOB-fault","help": "Help & Support
View our interactive mobile help guides
Check for outages"}, "route4": {"label": "SIM Replacement","isActive": "true","section": "mobile-sim-deflect","lead": "MOB-sim-rep"}, "route5": {"label": "Disconnection","isActive": "true","section": "saves","lead": "MOB-disconnection"}, "route6": {"label": "Other","isActive": "true","section": "service-general,mob-other,virtualassistant","lead": "MOB-other","help": "Help & Support
Check my contract termination fees
Track my order
I need to understand my bill
Try our online support articles"}}}, "route1": {"label": "Pre-Paid","isActive": "true","section": "telstra,service,aem,consumer","childs": {"route0": {"label": "Activate & Recharge","isActive": "true","section": "prepaid,virtualassistant","lead": "PPM-activate-recharge","help": "Help & Support
How to activate my Pre-Paid service
How to recharge my Pre-Paid service
Payment options
Check my activation status
Check out our Pre-Paid support articles"}, "route1": {"label": "Existing Order","isActive": "true","section": "prepaid,virtualassistant","lead": "PPM-existing-order","help": "Delays to some order deliveries
COVID-19 impacts are causing delays on some orders. Your order should arrive within 7 days in metro locations, while some regional orders may take longer. We're doing everything we can to get your order to you quickly and apologise for the inconvenience.
Help & Support
How to activate my Pre-Paid service
How to change my plan
Check my activation status
Check out our Pre-Paid support articles
Track my order"}, "route2": {"label": "Offers & Plans","isActive": "true","section": "prepaid,virtualassistant","lead": "PPM-my-offer-plan","help": "Help & Support
View or change my plan
Explore available plans
Pre-Paid Plus packs
Pre-Paid expiry period
International roaming"}, "route3": {"label": "Fault","isActive": "true","section": "fault-prepaid,virtualassistant","lead": "PPM-fault","help": "Help & Support
Check for outages
Unlock my Telstra mobile
Pre-Paid troubleshooting tips
Pre-Paid support articles"}, "route4": {"label": "SIM Replacement","isActive": "true","section": "prepaid-sim-deflect","lead": "PPM-sim-rep","help": "Help & Support
Unlock my Telstra mobile
Track my order
Cancel or change my order
Pre-Paid support articles"}, "route5": {"label": "Disconnection","isActive": "true","section": "saves","lead": "PPM-disconnection"}}}, "route2": {"label": "NBN & Bundles","isActive": "true","section": "telstra,service,aem,consumer","childs": {"route0": {"label": "Buy Online","isActive": "true","section": "sales-nbn","lead": "NBN-buy-online","help": "Help & Support
Order a new service
See latest offers
Check my upgrade date and fees
Track my order"}, "route1": {"label": "Bill & Plan Enquiries","isActive": "true","section": "service-nbn,virtualassistant","lead": "NBN-bill-plan-addon","help": "Help & Support
Request a payment extension
Report a payment or reconnect my service
I want to pay my bill
I need to understand my bill
Arrange or update direct debit"}, "route2": {"label": "Existing Order","isActive": "true","section": "nbn-orders,virtualassistant","lead": "NBN-existing-order","help": "Delays to some order deliveries
COVID-19 impacts are causing delays on some orders. Your order should arrive within 7 days in metro locations, while some regional orders may take longer. We're doing everything we can to get your order to you quickly and apologise for the inconvenience.
Help & Support
Track my order
Reschedule my appointment"}, "route3": {"label": "Moving Home","isActive": "true","section": "nbn-moves,virtualassistant","lead": "NBN-moving-home","help": "Help & Support
Move my service to another address
Track my order"}, "route4": {"label": "Fault","isActive": "true","section": "fault-nbn,virtualassistant","lead": "NBN-fault","help": "Help & Support
Connecting my new service
Check for outages
Troubleshooting and tech support
How to use my service
Connection speed"}, "route5": {"label": "Disconnection","isActive": "true","section": "saves","lead": "NBN-disconnection"}}}, "route3": {"label": "Broadband, Bundles & Home Phone","isActive": "true","section": "telstra,service,aem,consumer","childs": {"route0": {"label": "Buy Online","isActive": "true","section": "sales-home,virtualassistant","lead": "BBHP-buy-online","help": "Help & Support
Order a new service
See latest offers
Check my upgrade date and fees
Track my order"}, "route1": {"label": "Bill & Plan Enquiries","isActive": "true","section": "service-home,virtualassistant","lead": "BBHP-bill-plan-addon","help": "Help & Support
Request a payment extension
Report a payment or reconnect my service
I need to understand my bill
Arrange or update direct debit
I want to query a charge on my bill"}, "route2": {"label": "Existing Order","isActive": "true","section": "service-bundles-home,virtualassistant","lead": "BBHP-existing-order","help": "Delays to some order deliveries
COVID-19 impacts are causing delays on some orders. Your order should arrive within 7 days in metro locations, while some regional orders may take longer. We're doing everything we can to get your order to you quickly and apologise for the inconvenience.
Help & Support
Track my order
Reschedule my appointment"}, "route3": {"label": "Moving Home","isActive": "true","section": "copper-moves,virtualassistant","lead": "BBHP-moving-home","help": "Help & Support
Move my service to another address
Track my order"}, "route4": {"label": "Fault","isActive": "true","section": "fault-adsl,virtualassistant","lead": "BBHP-fault","help": "Help & Support
Connecting my new service
Check for outages
Troubleshooting and tech support
Mobile broadband tech support
Connection speed"}, "route5": {"label": "Disconnection","isActive": "true","section": "saves","lead": "BBHP-disconnection"}}}, "route4": {"label": "Entertainment & Apps","isActive": "true","section": "telstra,service,aem,consumer","childs": {"route0": {"label": "My Telstra","isActive": "true","section": "service-apps,virtualassistant","lead": "EAA-247-app","help": "Help & Support
Register for a Telstra ID
Retrieve my Telstra ID username
Retrieve my Telstra ID password"}, "route1": {"label": "Telstra Plus","isActive": "true","section": "telstra-plus,virtualassistant","lead": "EAA-telstraplus","help": "Help & Support
Join Telstra Plus
Find out more about Telstra Plus
View Telstra Plus FAQ
Register for a Telstra ID
Retrieve my Telstra ID username
Retrieve my Telstra ID password"}, "route2": {"label": "Email","isActive": "true","section": "fault-email,virtualassistant","lead": "EAA-email","help": "Help & Support
Troubleshoot email for PC
Troubleshoot email for mobile device
Forgot my username or password"}, "route3": {"label": "Foxtel","isActive": "true","section": "foxtel,virtualassistant","lead": "EAA-foxtel","help": "Help & Support
Foxtel FAQs
Foxtel from Telstra – Set up and configure
Foxtel Go"}, "route4": {"label": "Telstra TV & Telstra TV Box Office","isActive": "true","section": "service-apps,virtualassistant","lead": "EAA-telstra-tv-box-office","help": "Help & Support
Find out more about Telstra TV
Sign in to Telstra Box Office
Telstra Box Office FAQs
"}, "route5": {"label": "Telstra Air","isActive": "true","section": "service-apps,virtualassistant","lead": "EAA-telstra-air","help": "Help & Support
Telstra Air – all you need to know"}, "route6": {"label": "Platinum","isActive": "true","section": "platinum","lead": "EAA-platinum","help": "Help & Support
Telstra Platinum"}}}, "route5": {"label": "Business Accounts & Products","isActive": "true","section": "telstra,service,aem,consumer,business,businessva","lead": "BAAP-none","childs": {}}},
"enableDTC": true,
"enableBusinessDTC": false,
"dtcSection": "tcom,non-auth,telstra,service,aem,consumer,dtc,virtualassistant",
"dtcBusinessSection": "",
"chatEverywhereLabel": "Message Us",
"dtcLabel": "Message Us",
"abcEnabled": true,
"abcBusinessId": "5658cef3-b53e-11e7-847d-7b88b04daa8e",
"bizIntentId": "ios_general",
"bizGroupId": "",
"body": "",
"abcButtonDelay": "10000",
"contactUsABCEnabled": false,
"authEnabled": true,
"v2AuthEnabled": true,
"allowedPages": "www.myservices.telstra.com.au/*,fix.telstra.com/*,plus.telstra.com.au/*,checkout.telstra.com.au/*,www.telstra.com.au/*,www.my.telstra.com.au/myaccount/*,prepaid.activate.telstra.com.au/*,recharge.telstra.com.au/*,www.ordertracker.telstra.com.au/*,say.telstra.com.au/customer/forms/request-a-credit-form,shop.telstra.com.au/*",
"v2AllowedPages": "fix.telstra.com/*,www.myservices.telstra.com.au/*,www.telstra.com.au/*",
"engCollectTimeout": "1500",
"ssoUrl": "https://chat-messaging.public.openaiplatform.telstra.com",
"retrieveUrl": "https://tapi.telstra.com/presentation/v1/va-chatservices/retrieve-lp-auth-objects",
"retrieveV2Url": "https://tapi.telstra.com/presentation/v1/va-chatservices/lp-auth-objects",
"ssoTimeout": "4500",
"retrieveTimeout": "2000",
"tacticalAbcEnabled": false,
"disableDragDropFileUpload": false,
"enableMTRedirection": false,
"minIOSAppVerForMTRedirect": "70.0",
"minAndroidAppVerForMTRedirect": "70.0",
"mtwIOSHostName": "https://www.myservices.telstra.com.au",
"mtwAndroidHostName": "https://www.myservices.telstra.com.au",
"tacticalTCOMAuthEnabled": false,
"tcomPrefix": "www"
};
try {
if (window.TelstraLivePerson) {
// prevent redeclaration of the class
throw new Error('Can not redefine this object');
}
Object.defineProperty(window, 'TelstraLivePerson', {
value: function (__config) {
const _config = JSON.parse(JSON.stringify(__config));
const _instance = this;
const _tcomPrefix = _config.tcomPrefix||"www";
const _mtwIOSHostName = _config.mtwIOSHostName;
const _mtwAndroidHostName = _config.mtwAndroidHostName;
const disableDragDropFileUpload = _config.disableDragDropFileUpload;
let _dragDropOverridden = false;
let defaultSignInUrl = {
msg: "Looks like this session has timed out. Sign back in to continue your conversation, or go to My Telstra and select 'Message us' to reply.",
url: 'https://open.mytelstra.app/BJRB/804999cc',
label: 'Go to My Telstra',
action: 'navigate'
};
let defaultAuthDisabledUrl = {
msg: "This is a secure conversation which can only be continued on specific Telstra pages. If you wish to continue this conversation, please go to My Telstra and select 'Message us' to reply.",
action: 'navigate',
label: 'Go to My Telstra',
url: 'https://open.mytelstra.app/BJRB/804999cc'
};
const signInUrls = { '*': defaultSignInUrl };
signInUrls[document.location.origin] = defaultSignInUrl;
let _mySignInUrl = signInUrls['*'];
const siuXhr = new XMLHttpRequest();
siuXhr.onreadystatechange = function () {
if (siuXhr.readyState === siuXhr.DONE) {
if (siuXhr.status === 200) {
try {
Object.assign(signInUrls, JSON.parse(siuXhr.responseText));
_mySignInUrl = signInUrls[document.location.origin];
if (signInUrls['*']) {
defaultSignInUrl = signInUrls['*'];
}
if (singInUrls['defaultAuthDisabled']) {
defaultAuthDisabledUrl = singInUrls['defaultAuthDisabled'];
}
} catch (e) {}
}
}
};
siuXhr.open(
'GET',
'https://' +
_tcomPrefix +
'.telstra.com.au/content/dam/tcom/virtualassistant/config/t-lp-err-msg' +
(window.__lpEnvSite === '21991129' ? '-pr' : '-np') +
'.json'
);
siuXhr.send();
const checkPageAllowedForAuth = function (thisPage, allowedPages) {
let allowedList = allowedPages.split(',');
let allowed = false;
let listItem;
for (let i = 0; i < allowedList.length; i++) {
listItem = 'https://' + allowedList[i];
let lastChar = listItem.substr(listItem.length - 1, 1);
if (lastChar === '*') {
allowed =
thisPage.substr(0, listItem.length - 1) ===
listItem.substr(0, listItem.length - 1);
} else {
allowed = thisPage === listItem;
}
if (allowed) {
break;
}
}
return allowed;
};
const isAllowedOriginForAuth = checkPageAllowedForAuth(
document.location.origin + document.location.pathname,
_config.allowedPages
);
let authIsEnabled =
_config.authEnabled &&
isAllowedOriginForAuth &&
(typeof window.addEventListener === 'function' ||
window.attachEvent === 'function');
const isAllowedOriginForV2Auth = checkPageAllowedForAuth(
document.location.origin + document.location.pathname,
_config.v2AllowedPages
);
let authV2IsEnabled = _config.v2AuthEnabled && isAllowedOriginForV2Auth;
const ssoUrl = _config.ssoUrl;
let cid;
const retrieveUrl = _config.retrieveUrl;
const retrieveV2Url = _config.retrieveV2Url;
let engCollectTimeout = parseInt(_config.engCollectTimeout);
if (isNaN(engCollectTimeout)) {
engCollectTimeout = 500;
}
let ssoTimeout = parseInt(_config.ssoTimeout);
if (isNaN(ssoTimeout)) {
ssoTimeout = 5000;
}
let retrieveTimeout = parseInt(_config.retrieveTimeout);
if (isNaN(retrieveTimeout)) {
retrieveTimeout = 2000;
}
const minAndroidAppVerForMTRedirect =
_config.minAndroidAppVerForMTRedirect;
const minIOSAppVerForMTRedirect = _config.minIOSAppVerForMTRedirect;
let _globalMTRedirectEnabled;
//
const generateCorrelationId = function () {
let id = '';
try {
id = encodeURIComponent(
btoa(
window.crypto
.getRandomValues(new Uint8Array(32))
.reduce(function (prev, curr) {
return prev + String.fromCharCode(curr);
}, '')
)
);
} catch (e) {
for (let i = 0; i < 4; i++) {
id =
id +
parseInt(((1 + Math.random()) * 0x10000).toFixed(0))
.toString(32)
.substring(1);
}
}
return id;
};
const initConfig = JSON.parse(JSON.stringify(_config));
Object.defineProperty(_instance, 'data', { value: initConfig });
if (initConfig.abcButtonDelay) {
// convert to number
try {
initConfig.abcButtonDelay = parseInt(initConfig.abcButtonDelay);
} catch (e) {
initConfig.abcButtonDelay = 100;
}
}
let isChatEverywhereClick = false;
_instance.persistentChatContainer = false;
_instance.appleDeviceType = 'UNIDENTIFIED';
_instance.backMask = false;
_instance.container = false;
_instance.containerBox = false;
_instance.closeBT = false;
_instance.childElements = {};
_instance.siteId = false;
_instance.section = false;
_instance.sourceSection = false;
_instance.isDirect = false;
_instance.lead = false;
_instance.urlMap = window.__lpUrlMap || false;
_instance.callBack = false;
_instance.callBackInterval = 1; // in second
_instance.callBackTread = false;
_instance.chatWindowOpen = false;
// load jabuka.json using absolute url to ensure no errors if import.htm injected on page in any other domain
Object.defineProperty(_instance, 'jabukaUrl', {
value:
'https://' +
_tcomPrefix +
'.telstra.com.au/content/dam/tcom/virtualassistant/config/jabuka.json'
});
let initParams = {};
const _businessVaSection = 'businessva';
let _initCalled = false;
let engagementName;
let proactiveSuppressionCheck = false;
let tacticalAbcEnabled = _config.tacticalAbcEnabled || false;
let onChatWindowMinimized = null;
let onChatWindowClosed = null;
let minimizedFocusQuerySelector = null;
let closedFocusQuerySelector = null;
let _defaultMinimizedCallback = null;
let _defaultClosedCallback = null;
let _defaultMinimizedSelector = null;
let _defaultClosedSelector = null;
let _appVersion = -1;
let _appPlatform = '';
let calculatedMTRedirect = false;
let preferMTRForMessageUs = false;
const chatEverywhereSelector = 'button.persistentChatBtn';
const APP_VER_REGEX = /^\d+\.\d+(\.\d+)?$/;
const triggers = [];
let lpTagInitialized = false;
let proactiveAutoClick = false;
let trComponentInfo = null;
let reactiveTRComponentInfo = null;
let agentCtxInfo = [];
let reactiveAgentCtxInfo = [];
let processingTrigger = false;
let _proactiveButtonLoad;
// auth specific stuff
let authInProgress = false;
let ssoFrame = null;
let ssoFrameContentWindow = null;
let _token = null;
let _id = null;
let retrievalXHR = null;
let retrievalV2XHR = null;
let lpCallback = null;
let ssoTimeoutHandle = null;
let retrievalTimeoutHandle = null;
let authForClick = false;
let messageMonitorHandle = null;
let messageUpdated = false;
let cBlocking = false;
let statType = 'NOT_AVAILABLE';
let clicked = false;
let stylesAdded = false;
let _inputBoxFocus = false;
let startStatSent = false;
let impressionStatSent = false;
let declinedStatSent = false;
let statConvoId = 'n/a';
let isProactive = false;
let isReactive = false;
var ignoreOffer = false;
let engagementId;
let stopCollectingEngagements = false;
window.engagementsOffered = [];
let impressionsTimeoutHandle = null;
let previousEngagementType = 0;
let convoStartedOnPage = false;
let convoTriggerStartTime = 0;
let monitorId = generateCorrelationId();
let windowOpenMonitorHandle = null;
const MESSAGING_ACTION = '__messaging';
const _businessWatchDogURL =
window.__businessWatchDogURL || 'virtual-assistant-status';
let _businessWatchDog = {
'virtual-assistant-status': {
orchestrator: false,
'watson-virtual-agent': false,
'liveperson-agent-api': false,
'watson-tone-analyzer': false
}
};
var loadedVA = [];
var totalVA = 1; // update this if more VA are added on the page
var postVALoadDone = false;
let abcConfigLoaded = false;
let _loadedAbcConfig = null;
let _intent_id, _group_id;
let abcUrlPrefix =
'https://bcrw.apple.com/urn:biz:' + _instance.data.abcBusinessId;
const _osExtractRegex =
/\((Macintosh|iPhone|iPad|(?:iPod(?:\stouch)?));.*\s((?:\d[_.]{0,1})+)[^)]*\)\s/i;
const _minSupportedMacOS = [10, 13, 4];
const _minSupportedIOS = [11, 3];
// calculate some of the dtc params here so that they are not re-calculated unnecessarily
// do not consider query params or anchor tags when checking for current page url
const _dtcDisabledPage = window.dtcDisabledPages.split(',');
const thisPage = window.location.href.split(/[?#]/)[0];
const isDTCDisabledPage = _dtcDisabledPage.indexOf(thisPage) != -1;
const smlBusIndx = thisPage.indexOf('/small-business');
const _isUnderSmallBusiness =
thisPage.indexOf('/small-business/') != -1 ||
(smlBusIndx != -1 &&
thisPage.substring(smlBusIndx) == '/small-business');
//
const compareVersion = function (a, b) {
let i, diff;
let _a = '' + a,
_b = '' + b;
const regExStrip0 = /(\.0+)+$/;
const v1Parts = _a.replace(regExStrip0, '').split('.');
const v2Parts = _b.replace(regExStrip0, '').split('.');
const minLength = Math.min(v1Parts.length, v2Parts.length);
for (i = 0; i < minLength; i++) {
diff = parseInt(v1Parts[i], 10) - parseInt(v2Parts[i], 10);
if (diff) {
return diff;
}
}
return v1Parts.length - v2Parts.length;
};
//
const sendNRPageAction = function (actionName, actionPayload) {
try {
if (newrelic && newrelic.addPageAction) {
newrelic.addPageAction(
actionName,
Object.assign(actionPayload, { _monitorId: monitorId })
);
}
} catch (e) {}
};
//
const doInputBoxFocus = function () {
setTimeout(function () {
try {
document.querySelector('textarea.lpview_form_textarea').focus();
_inputBoxFocus = true;
} catch (e) {}
}, 2000);
};
//
const doAssetFocus = function (
op,
handlerFn,
querySelector,
isChatEverywhereClick
) {
setTimeout(function () {
let focusElement, defaultFocusElement;
let defaultSelector =
op === 'minimized'
? _defaultMinimizedSelector
: isChatEverywhereClick
? chatEverywhereSelector
: _defaultClosedSelector;
let defaultHandlerFn =
op === 'minimized'
? _defaultMinimizedCallback
: _defaultClosedCallback;
try {
defaultFocusElement = document.querySelector(defaultSelector);
} catch (e) {
defaultFocusElement = null;
}
try {
focusElement = document.querySelector(
isChatEverywhereClick && op === 'closed'
? chatEverywhereSelector
: querySelector
);
} catch (e) {
focusElement = null;
}
try {
if (typeof handlerFn === 'function') {
handlerFn();
} else if (
focusElement &&
typeof focusElement.focus === 'function'
) {
focusElement.focus();
} else if (typeof defaultHandlerFn === 'function') {
defaultHandlerFn();
} else if (
defaultFocusElement &&
typeof defaultFocusElement.focus === 'function'
) {
defaultFocusElement.focus();
}
} catch (e) {
sendNRPageAction(
('__lp__' + handlerFn && handlerFn.name) ||
(defaultHandlerFn && defaultHandlerFn.name) ||
'generic_error',
{
err: e.message || JSON.stringify(e),
stack: e.stack || 'N/A',
selector: querySelector,
defaultSelector: defaultSelector
}
);
}
}, 1000);
};
// extract device type and os version
function _isMinSupportedVersion(referenceVersion, versionUnderTest) {
for (var i = 0; i < referenceVersion.length; i++) {
if (versionUnderTest[i] < referenceVersion[i]) {
// most significant version at this point is lower than reference so we can mark unsupported
return false;
}
if (versionUnderTest[i] > referenceVersion[i]) {
// most significant version at this point is greater than reference so we can mark supported
return true;
}
// most significant version at this point is equal to reference. continue loop to check next version element
}
// all version elements equal reference so we can mark supported
return true;
}
const checkABCCompatibleDevice = function () {
var isCompatibleDevice = false;
try {
var ua = (window.navigator && window.navigator.userAgent) || '';
var extracted = _osExtractRegex.exec(ua);
if (extracted) {
var deviceType = extracted[1].toLowerCase();
var extractedOSVersion = extracted[2]
.replace(/_/g, '.')
.split('.')
.map(function (ver) {
var intVer = 0;
try {
intVer = parseInt(ver);
} catch (e) {
// ignore parsing errors and just set it to 0
// that way, it will always be lesser than supported version
}
return intVer;
});
if (deviceType == 'macintosh') {
// this could be iPad since iPadOS returns same UA string as Mac
// as of Nov 2019, no touch enabled mac laptop/desktop exists. so if this browser has touch events available, it is iPad
// this is the only way at the moment to identify if this is iPad or not
if (window.navigator.maxTouchPoints > 1) {
// desktop/laptop won't have touch points. if touch points exists, it is a touch screen device, which at the moment implies iPadOS
// all iPadOS versions will support ABC so no further checks required
isCompatibleDevice = true;
_instance.appleDeviceType = 'tablet';
}
} else {
isCompatibleDevice = _isMinSupportedVersion(
_minSupportedIOS,
extractedOSVersion
);
_instance.appleDeviceType = 'mobile';
}
}
} catch (e) {
// wrapped in try catch so that if any of the expressions fail in older browser, it doesn't cause issues with rest of the script
}
return isCompatibleDevice;
};
Object.defineProperty(_instance, 'isABCCompatibleDevice', {
value: checkABCCompatibleDevice()
});
//
function convertChatButtonToMessaging() {
if (
!_instance.data.abcEnabled ||
!_instance.isABCCompatibleDevice ||
!_instance.data.contactUsABCEnabled
) {
// don't bother if abc disabled or not abc compatible device or contact us pages are not supposed to be converted to
return;
}
try {
var originalOnLoad = window.onload;
window.onload = function () {
var buttons = Array.from(document.getElementsByTagName('a'))
.filter(function (tag) {
return tag && /#lp:2way$/.test(tag.href);
})
.filter(function (tag) {
return (
tag &&
tag.classList &&
tag.innerText &&
tag.classList.contains('btn') &&
tag.classList.contains('primary') &&
tag.innerText == 'Chat now'
);
});
if (buttons && buttons.length > 0) {
buttons[0].href = abcUrlPrefix;
buttons[0].text = 'Message Us';
}
if (originalOnLoad && typeof originalOnLoad === 'function') {
originalOnLoad();
}
};
} catch (e) {
// wrapping in try catch so that no other functionality gets impacted
}
}
const isDTCApplicableOnPage = function () {
// not applicable if relevant DTC flag is off or if relevant VA is not active
if (
(_isUnderSmallBusiness &&
(!_config.enableBusinessDTC || !_instance.isBusinessVAActive())) ||
(!_isUnderSmallBusiness && !_config.enableDTC)
) {
return false;
}
// return false if this is a DTC disabled page
return !isDTCDisabledPage;
};
Object.defineProperty(_instance, 'isBusinessVAActive', {
value: function () {
if (
_businessWatchDog &&
((_businessWatchDog['virtual-assistant-status'] &&
_businessWatchDog['virtual-assistant-status']['orchestrator'] &&
_businessWatchDog['virtual-assistant-status'][
'watson-virtual-agent'
] &&
_businessWatchDog['virtual-assistant-status'][
'liveperson-agent-api'
]) ||
_businessWatchDog['active'] == true)
) {
return true;
} else {
return false;
}
}
});
const _style = [
'.telstra_live_person_back.hide, .telstra_live_person_containerBox.hide, .persistentChatContainer.hide{display:none;}',
'.telstra_live_person_back{width:100%; height:1000%; position: absolute; top: 0; left: 0; background-color: #666666; opacity: 0.8;}',
'.telstra_live_person_containerBox{width: 100%;position: fixed; top: 100px;font-size:14px;}',
'.telstra_live_person_container{width: 80%; max-width:474px; max-height:100%; min-height: 220px; margin: 0px auto; background-color: #ffffff;color: #666666; padding: 10px;}',
'.telstra_live_person_container_header{font-size: 24px; padding: 10px; border-bottom: 1px solid #dddddd;}',
'.telstra_live_person_container_description{padding: 10px;}',
'.telstra_live_person_container_routeLevel1{width: 90%; padding: 5px 10px; margin-bottom: 5px;}',
'.telstra_live_person_container_routeLevel1>select{width: 100%; padding: 5px 0px;}',
'.telstra_live_person_container_routeLevel2{width: 90%; padding: 5px 10px; margin-bottom: 5px;}',
'.telstra_live_person_container_routeLevel2>select{width: 100%; padding: 5px 0px;}',
'.telstra_live_person_container_chatNow_desc{width: 90%; padding: 5px 10px;}',
'.telstra_live_person_container_chatNow_bt{float: right;left: -20px;}',
'.persistentChatContainer{width:auto;position:fixed;bottom:0px;right:56px;z-index:1040}',
'.persistentChatBtnContainer{max-width:1365px;margin-right:auto;margin-left:auto;bottom:0px;}',
'.persistentChatBtn{background-color:#1a5199;padding:6px 10px 6px 12px;float:right;z-index:1040;text-decoration:none;cursor:pointer;font-family: "Telstra Akkurat",sans-serif;font-size:1rem;border-style:none;border-radius:3px 3px 0 0;transition:box-shadow 250ms;}',
'.persistentChatBtn:hover,.persistentChatBtn:focus,.persistentChatBtn:focus-visible,.persistentChatBtn:active,.persistentChatBtn:focus-within,.persistentChatBtn:target{color: #fff !important;text-decoration:none !important;box-shadow: 3px -3px 0px 0.2rem #5d99da, -3px -3px 0px 0.2rem #5d99da;background-color: #1a5199 !important;}',
'.persistentChatLabel{padding-top:5px;margin-left:8px;margin-right:5px;color:#fff;line-height:1.4;display:inline-block;}',
'.persistentChatIcon{float:left;width:28px;padding:2px}',
'@media only screen and (max-width:767px){.persistentChatContainer{right: 26px;} .persistentChatBtnContainer{width:auto;right:0px;} .persistentChatBtn{border-radius:50%;padding:18px;margin-bottom:40px;margin-right:0px} .persistentChatLabel{display:none} .persistentChatIcon{width:29px} .persistentChatBtn:hover,.persistentChatBtn:focus,.persistentChatBtn:focus-visible,.persistentChatBtn:active,.persistentChatBtn:focus-within,.persistentChatBtn:target{color: #fff !important;text-decoration:none !important;box-shadow: 0px 0px 0px 0.3rem #5d99da;background-color: #1a5199 !important;}}',
'.abcChatContainerMobile {width: 47pt !important;height: 47pt !important;position: fixed;bottom: 100px !important;right: 24px !important;z-index: 1024;}',
'.abcChatContainerTablet {width: 65pt !important;height: 65pt !important;position: fixed;bottom: 100px !important;right: 24px !important;z-index: 1024;}',
'.abcButtonLink {cursor: pointer;width:47pt;height:47pt;}',
'.abcIconMobile {width:46pt;height:46pt;}',
'.abcIconTablet {width:64pt;height:64pt;}',
'.fadein{opacity: 1;animation-name: fadeInOpacity;animation-iteration-count: 1;animation-timing-function: ease-in;animation-duration: 1s;}@keyframes fadeInOpacity {0% {opacity: 0;}100% {opacity: 1;}}',
'div.lp_drop_image_wrapper{display: none !important;}'
].join('');
const _styleElement = document.createElement('STYLE');
_styleElement.innerHTML = _style;
document.getElementsByTagName('head')[0].appendChild(_styleElement);
/**
* All Function Definitions follow
*/
//
const sendUrlSDE = function () {
window.lpTag.sdes.push({
type: 'lead',
lead: {
topic: document.location.href,
leadId: 'siteUrl'
}
});
};
//
const sendAgentCtxInfo = function () {
let ctxInfo = null;
if (isProactive) {
if (!agentCtxInfo || agentCtxInfo.length === 0) {
return;
} else {
ctxInfo = agentCtxInfo;
}
} else if (isReactive) {
if (!reactiveAgentCtxInfo || reactiveAgentCtxInfo.length === 0) {
return;
} else {
ctxInfo = reactiveAgentCtxInfo;
}
}
if (ctxInfo === null) {
return;
}
try {
ctxInfo.map((info) => {
lpTag.sdes.push({
type: 'error',
error: { contextId: info.label, message: info.value }
});
});
} catch (e) {}
};
//
const _asyncLoad = setTimeout(function () {
if (document.getElementsByTagName('body').length != 0) {
_instance.backMask = document.createElement('DIV');
_instance.backMask.setAttribute(
'class',
'telstra_live_person_back hide'
);
_instance.container = document.createElement('DIV');
_instance.container.setAttribute(
'class',
'telstra_live_person_container modal-content'
);
_instance.containerBox = document.createElement('DIV');
_instance.containerBox.setAttribute(
'class',
'telstra_live_person_containerBox hide'
);
_instance.containerBox.appendChild(_instance.container);
_instance.closeBT = document.createElement('BUTTON');
_instance.closeBT.setAttribute('class', 'close');
_instance.closeBT.onclick = function () {
_instance.hide();
};
_instance.container.appendChild(_instance.closeBT);
document
.getElementsByTagName('body')[0]
.appendChild(_instance.backMask);
document
.getElementsByTagName('body')[0]
.appendChild(_instance.containerBox);
_instance.render();
clearTimeout(_asyncLoad);
}
}, 500);
//
const getInitPersistentSection = function (_initSetting) {
return (
_instance.data.persistentSection ||
(_initSetting && _initSetting.persistentSection)
);
};
//
Object.defineProperty(_instance, 'getPersistentSection', {
value: function (_initSetting) {
return getInitPersistentSection(_initSetting);
}
});
//
const getInitPersistentChatLabel = function (_initSetting) {
return _instance.data.chatEverywhereLabel;
};
//
Object.defineProperty(_instance, 'getPersistentChatLabel', {
value: function (_initSetting) {
if (isDTCApplicableOnPage()) {
return _instance.data.dtcLabel;
} else {
return getInitPersistentChatLabel(_initSetting);
}
}
});
//
const stateMap = {
offered: 'chatImpression',
clicked: 'chatClicked',
declined: 'chatDeclined',
started: 'chatStarted',
ended: 'chatEnded',
suppressed: 'chatCampaignSuppression'
};
//
const setupStats = function () {
if (
window.omnitureData &&
window.omnitureData.dl &&
window.omnitureData.dl.trackingInfo
) {
if (
window.omnitureData.dl.trackingInfo.launchMigrationTrafficPercentage
) {
statType = 'STRATEGIC';
} else {
statType = 'LEGACY';
}
}
};
//
const sendLegacyStats = function (statParams) {
switch (statParams.provider) {
case 'abc':
omnitureData.dl.chatCoreInfo = {
intId: statParams['biz-intent-id'],
grpId: statParams['biz-group-id']
};
break;
default:
omnitureData.dl.chatCoreInfo = {
engName: statParams.engagementName,
convType: statParams.isProactive
? 'Proactive Web Messaging'
: /^(auth-)?web-msg/.test(statParams.engagementName)
? 'Web Messaging'
: 'Live Chat',
convId: statParams.conversationId
};
let state = stateMap[statParams.state];
window.analyticsToolkit.common.beacon('link', {
linkTrackEvents: state,
linkName: state
});
break;
}
};
//
const sendStrategicStats = function (statParams) {
switch (statParams.provider) {
case 'abc':
window.digitalData.event.push({
eventInfo: {
eventAction: stateMap[statParams.state],
eventType: 'chatCore',
eventCategory: '',
eventName: ''
},
attributes: {
intId: statParams['biz-intent-id'],
grpId: statParams['biz-group-id']
}
});
break;
default:
let event = {
eventInfo: {
eventAction: stateMap[statParams.state],
eventType:
cBlocking && statParams.state === 'clicked'
? 'chatCore - cookie blocked'
: 'chatCore',
eventCategory: '',
eventName: ''
},
attributes: {
engName: statParams.engagementName,
convType: statParams.isProactive
? 'Proactive Web Messaging'
: /^(auth-)?web-msg/.test(statParams.engagementName)
? 'Web Messaging'
: 'Live Chat',
convId: statParams.conversationId
}
};
if (statParams.isProactive && trComponentInfo) {
event.attributes.component = [
{
category: {
primaryCategory: 'proactive-messaging'
},
componentInfo: trComponentInfo
}
];
} else if (statParams.isReactive && reactiveTRComponentInfo) {
event.attributes.component = [
{
category: {
primaryCategory: 'reactive-messaging'
},
componentInfo: reactiveTRComponentInfo
}
];
}
window.digitalData.event.push(event);
}
};
//
const sendStats = function (statParams) {
try {
setupStats();
switch (statType) {
case 'STRATEGIC':
sendStrategicStats(statParams);
break;
case 'LEGACY':
sendLegacyStats(statParams);
break;
}
} catch (e) {
sendNRPageAction('__lp__stats', {
_err: e.message || JSON.stringify(e),
_stack: e.stack || 'N/A'
});
}
};
//
const getInitPersistentChatToggle = function (_initSetting) {
return (
_instance.data.persistentChat &&
_initSetting &&
_initSetting.persistentChat &&
_instance.data.persistentSection &&
_instance.data.persistentSection.length > 0
);
};
//
Object.defineProperty(_instance, 'isInitialized', {
value: function () {
return _initCalled;
}
});
//
const calculateMTRedirectFlag = function (preferAppLinks) {
if (!_globalMTRedirectEnabled) {
return false;
}
if (preferAppLinks === false) {
return false;
}
if (_appVersion) {
if (
_appPlatform === 'ios' &&
compareVersion(_appVersion, minIOSAppVerForMTRedirect) >= 0
) {
return true;
}
if (
_appPlatform === 'android' &&
compareVersion(_appVersion, minAndroidAppVerForMTRedirect) >= 0
) {
return true;
}
}
return false;
};
//
Object.defineProperty(_instance, 'setPreferAppLinks', {
value: function (flag) {
calculatedMTRedirect = calculateMTRedirectFlag(flag === true);
}
});
//
Object.defineProperty(_instance, 'setMinimizedFocusQuerySelector', {
value: function (querySelector) {
if (!_initCalled) {
return;
}
minimizedFocusQuerySelector = querySelector;
}
});
//
Object.defineProperty(_instance, 'setClosedFocusQuerySelector', {
value: function (querySelector) {
if (!_initCalled) {
return;
}
closedFocusQuerySelector = querySelector;
}
});
//
Object.defineProperty(_instance, 'setOnChatWindowClosed', {
value: function (handler) {
if (!_initCalled) {
return;
}
onChatWindowClosed = handler;
}
});
//
Object.defineProperty(_instance, 'setOnChatWindowMinimized', {
value: function (handler) {
if (!_initCalled) {
return;
}
onChatWindowMinimized = handler;
}
});
//
const getABCPageConfig = function (jabuka, defaultEnabled) {
let _abcConfig = { enabled: defaultEnabled };
if (jabuka.pageRules[thisPage]) {
_abcConfig = jabuka.pageRules[thisPage];
} else {
var patternList = Object.keys(jabuka.patternRules);
for (var i = 0; i < patternList.length; i++) {
var r = new RegExp(patternList[i]);
if (r.test(thisPage)) {
_abcConfig = jabuka.patternRules[patternList[i]];
break;
}
}
}
return _abcConfig;
};
//
const getABCConfig = function (callback) {
if (abcConfigLoaded) {
if (_loadedAbcConfig) {
callback(null, _loadedAbcConfig);
return;
}
}
var abcXHR = new XMLHttpRequest();
abcXHR.onreadystatechange = function () {
if (this.readyState == 4) {
abcConfigLoaded = true;
if (this.status == 200) {
try {
var _resp = JSON.parse(this.responseText);
_loadedAbcConfig = _resp;
callback(null, _resp);
} catch (e) {
callback(new Error('failed to parse jabuka response'));
}
} else {
callback(new Error('could not load ABC Config'));
}
}
};
abcXHR.open('GET', _instance.jabukaUrl, true);
abcXHR.send();
};
//
const constructABCUrl = function (pageABCConfig) {
if (!pageABCConfig.queryParams) {
// if no query params available, use all defaults
pageABCConfig.queryParams = {
'biz-intent-id': _instance.data.bizIntentId,
'biz-group-id': _instance.data.bizGroupId,
body: _instance.data.body
};
} else {
// use defaults for params that are not available
if (!pageABCConfig.queryParams['biz-intent-id']) {
pageABCConfig.queryParams['biz-intent-id'] =
_instance.data.bizIntentId;
}
if (!pageABCConfig.queryParams['biz-group-id']) {
pageABCConfig.queryParams['biz-group-id'] =
_instance.data.bizGroupId;
}
if (!pageABCConfig.queryParams['body']) {
pageABCConfig.queryParams['body'] = _instance.data.body;
}
}
let _abcUrl = abcUrlPrefix + '?';
Object.keys(pageABCConfig.queryParams).forEach(function (queryParam) {
_abcUrl +=
queryParam + '=' + pageABCConfig.queryParams[queryParam] + '&';
});
if (_abcUrl.substring(_abcUrl.length - 1) == '&') {
_abcUrl = _abcUrl.substring(0, _abcUrl.length - 1);
}
if (_abcUrl.substring(_abcUrl.length - 1) == '?') {
_abcUrl = _abcUrl.substring(0, _abcUrl.length - 1);
}
if (pageABCConfig['biz-intent-id']) {
_intent_id = pageABCConfig['biz-intent-id'];
}
if (pageABCConfig['biz-group-id']) {
_group_id = pageABCConfig['biz-group-id'];
}
return _abcUrl;
};
//
const constructABCButton = function (pageABCConfig) {
let _abcUrl = constructABCUrl(pageABCConfig);
// create abc button only if it doesn't exist
if (!_instance.abcButtonLink) {
_instance.abcButtonLink = document.createElement('div');
_instance.abcButtonLink.setAttribute('class', 'abcButtonLink');
_instance.abcButtonLink.setAttribute('id', 'abcButtonLink');
_instance.abcButtonLink.setAttribute('role', 'navigation');
_instance.abcButtonLink.setAttribute(
'aria-label',
'Message Us via Apple iMessage'
);
_instance.abcButtonLink.setAttribute('tabindex', '0');
_instance.abcButtonLink.onclick = function () {
window.open(_abcUrl);
let statParams = {
provider: 'abc',
state: 'started',
'biz-intent-id': _intent_id || 'N/A',
'biz-group-id': _group_id || ''
};
sendStats(statParams);
};
_instance.abcButtonImage = document.createElement('img');
_instance.abcButtonImage.setAttribute(
'src',
'https://www.telstra.com.au/content/dam/tcom/virtualassistant/abc/abc-floating-button.png'
);
_instance.abcButtonImage.setAttribute(
'alt',
'apple business chat icon'
);
if (_instance.appleDeviceType === 'tablet') {
_instance.persistentChatContainer.classList.add(
'abcChatContainerTablet'
);
_instance.abcButtonImage.classList.add('abcIconTablet');
} else {
_instance.persistentChatContainer.classList.add(
'abcChatContainerMobile'
);
_instance.abcButtonImage.classList.add('abcIconMobile');
}
_instance.abcButtonLink.appendChild(_instance.abcButtonImage);
_instance.persistentChatContainer.classList.add('fadein');
_instance.persistentChatContainer.appendChild(
_instance.abcButtonLink
);
_instance.abcTimeoutHandle = setTimeout(function () {
if (!proactiveExists()) {
showPersistentChatButton();
}
}, pageABCConfig.delay || _instance.data.abcButtonDelay);
}
};
//
const getTacticalABCURL = function () {
if (!abcConfigLoaded) {
return null;
}
let _cfg = getABCPageConfig(_loadedAbcConfig, false);
if (_cfg.enabled) {
return constructABCUrl(_cfg);
}
return null;
};
//
const updateSection = function (tag) {
const s = new Set(_instance.section);
s.add(tag);
_instance.section = Array.from(s);
};
//
const removeSection = function (tag) {
const s = new Set(_instance.section);
s.delete(tag);
_instance.section = Array.from(s);
};
//
const updateLPSection = function (tag) {
const s = new Set(window.lpTag.section);
s.add(tag);
window.lpTag.section = Array.from(s);
};
//
const removeLPSection = function (tag) {
const s = new Set(window.lpTag.section);
s.delete(tag);
window.lpTag.section = Array.from(s);
};
//
const hidePersistentChatButton = function () {
if (_instance.persistentChatToggle) {
if (!_instance.persistentChatContainer.classList.contains('hide')) {
sendNRPageAction(MESSAGING_ACTION, { _action: 'HideButton' });
}
_instance.persistentChatContainer.classList.add('hide');
}
};
//
const appendPersistentChatContainer = function () {
try {
document.body.removeChild(_instance.persistentChatContainer);
} catch (e) {}
const btt = document.querySelector('div.parsys>div.backtoTop');
const preferredLocation =
(btt && btt.parentElement) ||
document.querySelector('footer') ||
document.querySelector(
'div.mytelstra-container div.footer-container'
) ||
document.querySelector('div.globalFooter');
if (preferredLocation) {
preferredLocation.insertAdjacentElement(
'beforeBegin',
_instance.persistentChatContainer
);
} else {
document
.getElementsByTagName('body')[0]
.appendChild(_instance.persistentChatContainer);
}
};
//
const showPersistentChatButton = function () {
appendPersistentChatContainer();
if (_instance.persistentChatToggle) {
if (_instance.persistentChatContainer.classList.contains('hide')) {
sendNRPageAction(MESSAGING_ACTION, { _action: 'ShowButton' });
}
_instance.persistentChatContainer.classList.remove('hide');
}
};
//
const hideLPM = function () {
Array.from(document.getElementsByClassName('LPMcontainer')).forEach(
function (e) {
e.style.display = 'none';
}
);
};
//
const showLPM = function () {
const c = document.getElementsByClassName('LPMcontainer');
if (c.length > 0) {
c[0].style.display = 'block';
}
};
//
const proactiveExists = function () {
var c = document.getElementsByClassName('proactive-msg-container');
return c.length > 0;
};
//
const addCloseEventForProactiveButton = function () {
if (proactiveExists()) {
try {
let declineButton = document.querySelector(
'button[data-proactive-decline]'
);
let proactiveText = document.querySelector(
'p[data-proactive-decline]'
);
// If proactive button doesnt have the close event tagged. Update with custom close
if (declineButton && !declineButton.getAttribute('data-LP-event')) {
declineButton.addEventListener('click', function () {
declineButton.style.display = 'none';
proactiveText.style.display = 'none';
});
}
const e3 = Array.from(
document.querySelectorAll('button[data-proactive-decline-v2]')
).filter((e) => !e.getAttribute('data-LP-event'))[0];
e3 &&
e3.addEventListener('click', () => {
let e1 = document.querySelector(
'button.proactive-msg-button-v2'
);
let e2 = document.querySelector('div.proactive-cta-v2-wrapper');
e3.style.display = 'none';
e2.style.maxHeight = '20px';
e2.style.visibility = 'hidden';
setTimeout(() => {
e2.style.display = 'none';
e1.style.marginTop = '0px';
}, 1000);
});
} catch (e) {}
}
};
//
const constructChatEverywhereButton = function (persistentChatLabel) {
// create elements only if they don't exist
if (!_instance.persistentChatBtnContainer) {
_instance.persistentChatBtnContainer = document.createElement('DIV');
}
if (!_instance.persistentChatBtn) {
_instance.persistentChatBtn = document.createElement('BUTTON');
}
if (!_instance.persistentChatIcon) {
_instance.persistentChatIcon = document.createElement('IMG');
}
if (!_instance.persistentChatLabel) {
_instance.persistentChatLabel = document.createElement('SPAN');
}
_instance.persistentChatBtnContainer.setAttribute(
'class',
'persistentChatBtnContainer'
);
_instance.persistentChatBtnContainer.setAttribute(
'aria-labelledby',
'persistentChatLabel'
);
_instance.persistentChatBtn.setAttribute('class', 'persistentChatBtn');
// _instance.persistentChatBtn.setAttribute("role", "button");
_instance.persistentChatBtn.setAttribute(
'aria-labelledby',
'persistentChatLabel'
);
// _instance.persistentChatBtn.setAttribute("tabindex", "0");
_instance.persistentChatIcon.setAttribute(
'class',
'persistentChatIcon'
);
_instance.persistentChatIcon.setAttribute('alt', persistentChatLabel);
_instance.persistentChatIcon.src =
'https://www.telstra.com.au/content/dam/tcom/virtualassistant/icons/chat-icon-54px.svg';
_instance.persistentChatLabel.setAttribute('id', 'persistentChatLabel');
_instance.persistentChatLabel.setAttribute(
'class',
'persistentChatLabel'
);
_instance.persistentChatLabel.innerText = persistentChatLabel;
_instance.persistentChatBtn.onclick = function () {
isChatEverywhereClick = true;
isReactive = false;
if (
!_instance.data.persistentSection ||
_instance.data.persistentSection.length === 0
) {
_instance.show();
} else {
_instance.show({
isDirect: true,
section: _instance.data.persistentSection
});
}
//}
};
//_instance.persistentChatBtn.href = "#";
_instance.persistentChatBtn.setAttribute('title', persistentChatLabel);
_instance.persistentChatBtn.setAttribute('id', 'persistentChatBtnId'); //used for omniture tracking
// append only if not already appended
// can rely on outermost parent check
if (
_instance.persistentChatContainer.childElementCount === 0 ||
_instance.persistentChatContainer.children.length === 0
) {
_instance.persistentChatBtn.appendChild(_instance.persistentChatIcon);
_instance.persistentChatBtn.appendChild(
_instance.persistentChatLabel
);
_instance.persistentChatBtnContainer.appendChild(
_instance.persistentChatBtn
);
_instance.persistentChatContainer.appendChild(
_instance.persistentChatBtnContainer
);
}
appendPersistentChatContainer();
};
//
const stopMonitorForMessage = function () {
clearInterval(messageMonitorHandle);
};
//
const monitorForMessage = function () {
if (messageUpdated) {
stopMonitorForMessage();
return;
}
const msgDiv = document.getElementById('lp_alert_message');
if (
msgDiv &&
msgDiv.innerText ===
'Go back to the previous page or log in to continue your conversation.'
) {
msgDiv.classList.forEach(function (cls) {
msgDiv.classList.remove(cls);
});
if (!stylesAdded) {
stylesAdded = true;
const _fonts = document.createElement('link');
_fonts.setAttribute('rel', 'stylesheet');
_fonts.setAttribute(
'href',
'https://' +
_tcomPrefix +
'.telstra.com.au/content/dam/tcom/virtualassistant/css/lp-override.css'
);
document.head.appendChild(_fonts);
}
stopMonitorForMessage();
messageUpdated = true;
const count = msgDiv.childElementCount;
let i;
for (i = 0; i < count; i++) {
try {
msgDiv.firstElementChild.remove();
} catch (e) {}
}
msgDiv.innerHTML = '';
let linkData;
if (authIsEnabled) {
linkData = _mySignInUrl || defaultSignInUrl;
} else {
linkData = defaultAuthDisabledUrl;
}
const errMsgDiv = document.createElement('div');
errMsgDiv.setAttribute('class', 'tlpErrMsg');
errMsgDiv.innerHTML = linkData.msg;
msgDiv.appendChild(errMsgDiv);
msgDiv.appendChild(document.createElement('br'));
if (linkData.action && linkData.action !== 'none') {
const linkButtonWrapper = document.createElement('div');
const link = document.createElement('a');
linkButtonWrapper.setAttribute('class', 'tlpLinkWrapper');
link.setAttribute('class', 'tlpLink');
if (linkData.action === 'navigate') {
link.setAttribute('href', linkData.url);
} else if (linkData.action === 'refresh') {
link.addEventListener('click', function () {
try {
window.location.reload(true);
} catch (e) {}
return false;
});
}
link.innerText = linkData.label;
linkButtonWrapper.appendChild(link);
msgDiv.appendChild(linkButtonWrapper);
}
}
};
//
const startMonitorForMessage = function () {
stopMonitorForMessage();
messageUpdated = false;
messageMonitorHandle = setInterval(monitorForMessage, 500);
};
//
const _triggerLiveChat = function () {
authForClick = false;
if (_instance.lead) {
lpTag.sdes.push({
type: 'lead', //MANDATORY
lead: {
topic: _instance.lead + ''
}
});
}
if (window.__disableBusinessVA || !_instance.isBusinessVAActive()) {
// remove VA section
removeSection(_businessVaSection);
}
window.engagementsOffered = [];
clicked = true;
if (proactiveSuppressionCheck) {
setTimeout(function () {
if (proactiveSuppressionCheck && !_instance.chatWindowOpen) {
sendStats({
conversationId: '',
state: 'suppressed',
engagementName: '',
isProactive: true
});
}
proactiveSuppressionCheck = false;
}, 10000);
}
convoTriggerStartTime = new Date().getTime();
monitorId = generateCorrelationId();
window.lpTag.newPage(document.URL, {
section: _instance.section //REFER TO TAB3 COLUMN I
});
_instance.section = JSON.parse(JSON.stringify(_instance.sourceSection));
if (isChatEverywhereClick) {
sendNRPageAction(MESSAGING_ACTION, {
_action: 'MessageUsButtonClick'
});
} else {
sendNRPageAction(MESSAGING_ACTION, { _action: 'MessageUsCTAClick' });
}
clearTimeout(windowOpenMonitorHandle);
windowOpenMonitorHandle = setTimeout(() => {
if (!_instance.chatWindowOpen && convoTriggerStartTime > 0) {
sendNRPageAction(MESSAGING_ACTION, {
_action: 'WindowNotOpened',
section: (lpTag.section && lpTag.section.join(',')) || '--n/a--'
});
}
}, 10000);
};
//
const callLPGATCallback = function () {
if (authForClick) {
authForClick = false;
}
if (lpCallback) {
if (!_token) {
startMonitorForMessage();
lpCallback(null, 'Error');
} else {
stopMonitorForMessage();
lpCallback(_token);
_token = null;
}
}
};
//
const nextStepAfterAuth = function () {
authInProgress = false;
if (authForClick) {
_triggerLiveChat();
} else {
callLPGATCallback();
}
};
//
const retrieveObjects = function () {
if (retrievalXHR) {
retrievalXHR.abort();
}
retrievalXHR = new XMLHttpRequest();
retrievalXHR.onreadystatechange = function () {
if (retrievalXHR.readyState === retrievalXHR.DONE) {
clearTimeout(retrievalTimeoutHandle);
retrievalTimeoutHandle = null;
if (retrievalXHR.status === 200) {
let o = JSON.parse(
atob(decodeURIComponent(retrievalXHR.responseText))
);
_token = o.lpJWE;
_id = o.lpIdentity;
} else {
_id = _token = null;
}
nextStepAfterAuth();
}
};
retrievalXHR.open('GET', retrieveUrl + '?cid=' + cid, true);
retrievalXHR.withCredentials = true;
retrievalXHR.send();
retrievalTimeoutHandle = setTimeout(function () {
retrievalTimeoutHandle = null;
retrievalXHR.abort();
_id = _token = null;
nextStepAfterAuth();
}, retrieveTimeout);
};
//
const retrieveV2Objects = function (at) {
if (retrievalV2XHR) {
retrievalV2XHR.abort();
}
retrievalV2XHR = new XMLHttpRequest();
retrievalV2XHR.onreadystatechange = function () {
if (retrievalV2XHR.readyState === retrievalV2XHR.DONE) {
clearTimeout(retrievalTimeoutHandle);
retrievalTimeoutHandle = null;
if (retrievalV2XHR.status === 200) {
const o = JSON.parse(retrievalV2XHR.responseText);
_token = o.lpJWE;
_id = o.lpIdentity;
} else {
_id = _token = null;
}
nextStepAfterAuth();
}
};
retrievalV2XHR.open(
'GET',
retrieveV2Url + '?cid=' + generateCorrelationId(),
true
);
retrievalV2XHR.withCredentials = true;
retrievalV2XHR.setRequestHeader('Authorization', 'Bearer ' + at);
retrievalV2XHR.send();
retrievalTimeoutHandle = setTimeout(function () {
retrievalTimeoutHandle = null;
retrievalV2XHR.abort();
_id = _token = null;
nextStepAfterAuth();
}, retrieveTimeout);
};
//
const clearSSOTimer = function () {
if (ssoTimeoutHandle) {
clearTimeout(ssoTimeoutHandle);
}
ssoTimeoutHandle = null;
};
//
const removeSSOFrame = function () {
if (ssoFrame && document.body.contains(ssoFrame)) {
document.body.removeChild(ssoFrame);
}
ssoFrame = null;
ssoFrameContentWindow = null;
};
//
const onMessage = function (event) {
if (event.source !== ssoFrameContentWindow) {
return;
}
clearSSOTimer();
removeSSOFrame();
if (event.data && event.data.errCode === 'e5') {
cBlocking = true;
}
if (event.data && event.data.status === 'success') {
retrieveObjects();
} else {
_id = _token = null;
nextStepAfterAuth();
}
};
//
const triggerAuth = function () {
if (authInProgress) {
return;
}
authInProgress = true;
removeSSOFrame();
cid = generateCorrelationId();
ssoFrame = document.createElement('iframe');
ssoFrame.src =
ssoUrl + '?cid=' + cid + '&m=' + (authForClick ? 'c' : 'f');
ssoFrame.style.display = 'none';
document.body.appendChild(ssoFrame);
ssoFrameContentWindow = ssoFrame.contentWindow;
ssoTimeoutHandle = setTimeout(function () {
ssoTimeoutHandle = null;
removeSSOFrame();
nextStepAfterAuth();
}, ssoTimeout);
};
//
const lpGAT = function (callback) {
lpCallback = callback;
if (!authIsEnabled || cBlocking) {
_token = null;
callLPGATCallback();
} else if (_token) {
callLPGATCallback();
} else {
cid = '';
_getToken();
}
};
//
const lpIdFn = function (callback) {
if (!authIsEnabled || cBlocking) {
_id = null;
}
return callback(_id);
};
//
const setupAuthSupport = function () {
if (authIsEnabled) {
if (window.addEventListener) {
window.addEventListener('message', onMessage);
} else {
window.attachEvent('onmessage', onMessage);
}
window.lpTag.identities = window.lpTag.identities || [];
window.lpTag.identities.push(lpIdFn);
window.lpMethods = window.lpMethods || {};
Object.defineProperty(window.lpMethods, 'lpGetAuthenticationToken', {
value: lpGAT
});
}
};
let _getToken = function () {
triggerAuth();
};
// run live chat wrapper
const _runLiveChat = function () {
cid = '';
if (authIsEnabled && !cBlocking) {
authForClick = true;
_getToken();
} else {
_triggerLiveChat();
}
};
// _instance.show
Object.defineProperty(_instance, 'show', {
value: function (_showConfig) {
if (
!isChatEverywhereClick &&
!processingTrigger &&
!_instance.data.abcEnabled &&
tacticalAbcEnabled &&
_instance.isABCCompatibleDevice
) {
let _tacticalAbcUrl = getTacticalABCURL();
if (_tacticalAbcUrl) {
window.open(_tacticalAbcUrl);
let statParams = {
provider: 'abc',
state: 'started',
'biz-intent-id': _intent_id || 'N/A',
'biz-group-id': _group_id || ''
};
sendStats(statParams);
return;
}
}
processingTrigger = false;
var _computedShowConfig = _showConfig || {};
if (
_computedShowConfig.section &&
_computedShowConfig.section.length &&
_computedShowConfig.section.length > 0
) {
_computedShowConfig.section.forEach((s) => updateSection(s));
}
if (_computedShowConfig.authToken) {
updateSection('auth-tdi');
removeSection('non-auth');
} else {
updateSection('non-auth');
removeSection('auth-tdi');
}
if (_computedShowConfig.lead) {
_instance.lead = _computedShowConfig.lead;
}
// DTC override
if (!_computedShowConfig.isDirect && isDTCApplicableOnPage()) {
// for 2way routing link, convert it to DTCC/DTCB
_computedShowConfig.isDirect = true;
if (
_isUnderSmallBusiness &&
_instance.data.dtcBusinessSection != ''
) {
_instance.section = _instance.data.dtcBusinessSection.split(',');
} else if (
!_isUnderSmallBusiness &&
_instance.data.dtcSection != ''
) {
_instance.section = _instance.data.dtcSection.split(',');
} else {
_computedShowConfig.isDirect = _showConfig.isDirect;
}
}
if (_instance.isDirect || _computedShowConfig.isDirect) {
let mtrRedirect = isChatEverywhereClick
? preferMTRForMessageUs
: calculatedMTRedirect;
let opened = false;
if (mtrRedirect) {
if (_appPlatform === 'ios') {
opened = window.open(
_mtwIOSHostName +
'/messaging?tags=' +
_instance.section.join(',')
);
} else {
opened = window.open(
_mtwAndroidHostName +
'/messaging?tags=' +
_instance.section.join(',')
);
}
sendNRPageAction(MESSAGING_ACTION, {
_action: 'MTRedirectInitiated',
_appPlatform: _appPlatform,
_appVersion: _appVersion
});
if (!opened) {
_runLiveChat();
sendNRPageAction(MESSAGING_ACTION, {
_action: 'MTRedirectFailed',
_appPlatform: _appPlatform,
_appVersion: _appVersion
});
}
} else {
_runLiveChat();
}
} else {
//add exclude
updateLPSection('exclude');
_instance.backMask.classList.remove('hide');
_instance.containerBox.classList.remove('hide');
hidePersistentChatButton();
}
}
});
//
const processTriggers = function () {
if (triggers.length === 0) {
return;
}
let trigger;
do {
trigger = triggers.shift();
if (trigger.type === 'proactive') {
proactiveAutoClick =
trigger.features && trigger.features.autoClick === true;
trComponentInfo = trigger.componentInfo;
agentCtxInfo = trigger.agentCtxInfo;
proactiveSuppressionCheck = true;
processingTrigger = true;
impressionStatSent = false;
declinedStatSent = false;
_instance.show({ isDirect: true, section: trigger.section });
}
} while (triggers.length > 0);
};
//
Object.defineProperty(_instance, 'triggerReactive', {
value: function (settings) {
if (settings.section && settings.section.length > 0) {
isReactive = true;
reactiveAgentCtxInfo = settings.agentCtxInfo || [];
reactiveTRComponentInfo = settings.componentInfo || null;
_instance.show({ isDirect: true, section: settings.section });
}
}
});
//
Object.defineProperty(_instance, 'triggerProactive', {
value: function (settings) {
if (settings.section && settings.section.length > 0) {
triggers.push({
type: 'proactive',
section: settings.section,
componentInfo: settings.componentInfo,
features: settings.features,
agentCtxInfo: settings.agentCtxInfo || []
});
}
if (lpTagInitialized) {
processTriggers();
}
}
});
//
Object.defineProperty(_instance, 'hide', {
value: function () {
//Remove exclude
removeLPSection('exclude');
_instance.backMask.classList.add('hide');
_instance.containerBox.classList.add('hide');
_instance.childElements['routeLevel1Select'].value = '0';
_instance.onSelectRouter1(
_instance.childElements['routeLevel1Select'].value
);
hideLPM();
showPersistentChatButton();
}
});
//
Object.defineProperty(_instance, 'initChat', {
value: function (args) {
for (var _i = 0; _i < args.length; _i++) {
if (args[_i].indexOf(',') === -1) {
updateSection(args[_i]);
} else {
var _localArgs = args[_i].split(',');
for (var _j = 0; _j < _localArgs.length; _j++) {
updateSection(_localArgs[_j]);
}
}
}
_runLiveChat();
_instance.hide();
}
});
//
Object.defineProperty(_instance, 'showChatNow', {
value: function (_parentObject, _childObject) {
var _showableObj = _childObject || _parentObject;
//clear child
while (_instance.childElements['chatNow'].firstChild) {
_instance.childElements['chatNow'].removeChild(
_instance.childElements['chatNow'].firstChild
);
}
if (!_showableObj) {
return;
}
if (_showableObj.lead) {
_instance.lead = _showableObj.lead;
} else {
_instance.lead = false;
}
var _infoArray = [];
_infoArray[0] = _parentObject.section;
if (_childObject) {
_infoArray[1] = _childObject.section;
}
_instance.childElements['chatNowDesc'] =
document.createElement('DIV');
_instance.childElements['chatNowDesc'].setAttribute(
'class',
'telstra_live_person_container_chatNow_desc'
);
_instance.childElements['chatNow'].appendChild(
_instance.childElements['chatNowDesc']
);
if (_showableObj.help && _showableObj.help != '') {
_instance.childElements['chatNowDesc'].innerHTML =
_showableObj.help;
}
_instance.childElements['chatNowBt'] = document.createElement('A');
_instance.childElements['chatNowBt'].setAttribute(
'class',
'telstra_live_person_container_chatNow_bt btn primary'
);
_instance.childElements['chatNowBt'].innerHTML = 'Chat now';
_instance.childElements['chatNowBt'].setAttribute(
'href',
'javascript:void(0);'
);
// Adding Chat initialisation
_instance.childElements['chatNowBt'].onclick = function () {
_instance.initChat(_infoArray);
};
_instance.childElements['chatNow'].appendChild(
_instance.childElements['chatNowBt']
);
var _clearDiv = document.createElement('DIV');
_clearDiv.style.clear = 'both';
_instance.childElements['chatNow'].appendChild(_clearDiv);
}
});
//
Object.defineProperty(_instance, 'render', {
value: function () {
_instance.childElements['header'] = document.createElement('DIV');
_instance.childElements['header'].setAttribute(
'class',
'telstra_live_person_container_header'
);
_instance.childElements['header'].setAttribute('role', 'region');
_instance.childElements['header'].setAttribute(
'aria-labelledby',
'telstra_lp_container_description'
);
_instance.childElements['header'].innerHTML = _instance.data.heading;
_instance.container.appendChild(_instance.childElements['header']);
_instance.childElements['description'] =
document.createElement('DIV');
_instance.childElements['description'].setAttribute(
'id',
'telstra_lp_container_description'
);
_instance.childElements['description'].setAttribute(
'class',
'telstra_live_person_container_description'
);
_instance.childElements['description'].setAttribute('role', 'region');
_instance.childElements['description'].setAttribute(
'aria-labelledby',
'telstra_lp_container_description'
);
_instance.childElements['description'].innerHTML =
_instance.data.description;
_instance.container.appendChild(
_instance.childElements['description']
);
_instance.childElements['routeLevel1'] =
document.createElement('DIV');
_instance.childElements['routeLevel1'].setAttribute(
'id',
'category_selection'
);
_instance.childElements['routeLevel1'].setAttribute(
'role',
'navigation'
);
_instance.childElements['routeLevel1'].setAttribute(
'aria-label',
'Product Selection'
);
_instance.childElements['routeLevel1Select'] =
document.createElement('SELECT');
_instance.childElements['routeLevel1Select'].setAttribute(
'id',
'routeLevel1Select'
);
_instance.childElements['routeLevel1Select'].setAttribute(
'title',
'Category Selection'
);
const _defaultOption = document.createElement('OPTION');
_defaultOption.value = '0';
_defaultOption.innerHTML = 'Choose a category';
_instance.childElements['routeLevel1Select'].appendChild(
_defaultOption
);
for (var _option in _instance.data.options) {
var _localOption = document.createElement('OPTION');
_localOption.value = _option;
_localOption.innerHTML = _instance.data.options[_option].label;
_instance.childElements['routeLevel1Select'].appendChild(
_localOption
);
}
_instance.childElements['routeLevel1Select'].onchange = function (e) {
_instance.onSelectRouter1(e.target.value);
};
_instance.childElements['routeLevel1'].setAttribute(
'class',
'telstra_live_person_container_routeLevel1'
);
_instance.childElements['routeLevel1'].appendChild(
_instance.childElements['routeLevel1Select']
);
_instance.container.appendChild(
_instance.childElements['routeLevel1']
);
//_instance.container.innerHTML = "Popup";
_instance.childElements['routeLevel2'] =
document.createElement('DIV');
_instance.childElements['routeLevel2'].setAttribute(
'class',
'telstra_live_person_container_routeLevel2'
);
_instance.childElements['routeLevel2'].setAttribute(
'id',
'subcategory_selection'
);
_instance.childElements['routeLevel2'].setAttribute(
'role',
'navigation'
);
_instance.childElements['routeLevel2'].setAttribute(
'aria-label',
'Area of Inquiry'
);
_instance.container.appendChild(
_instance.childElements['routeLevel2']
);
// Chat now component
_instance.childElements['chatNow'] = document.createElement('DIV');
_instance.childElements['chatNow'].setAttribute(
'class',
'telstra_live_person_container_chatNow'
);
_instance.container.appendChild(_instance.childElements['chatNow']);
}
});
//
Object.defineProperty(_instance, 'onSelectRouter1', {
value: function (_id) {
//clear child
while (_instance.childElements['routeLevel2'].firstChild) {
_instance.childElements['routeLevel2'].removeChild(
_instance.childElements['routeLevel2'].firstChild
);
}
if (_id + '' != '0') {
if (
_instance.data.options[_id].childs &&
JSON.stringify(_instance.data.options[_id].childs) !=
JSON.stringify({})
) {
var _dataOptions = _instance.data.options[_id].childs;
_instance.childElements['routeLevel2Select'] =
document.createElement('SELECT');
_instance.childElements['routeLevel2Select'].setAttribute(
'title',
'Subcategory Selection'
);
_instance.childElements['routeLevel2Select'].setAttribute(
'id',
'routeLevel2Select'
);
_instance.childElements['routeLevel2'].appendChild(
_instance.childElements['routeLevel2Select']
);
var _defaultOption = document.createElement('OPTION');
_defaultOption.value = '0';
_defaultOption.innerHTML = 'Choose a category';
_instance.childElements['routeLevel2Select'].appendChild(
_defaultOption
);
for (let _option in _dataOptions) {
var _localOption = document.createElement('OPTION');
_localOption.value = _option;
_localOption.innerHTML = _dataOptions[_option].label;
_instance.childElements['routeLevel2Select'].appendChild(
_localOption
);
}
_instance.childElements['routeLevel2Select'].onchange = function (
e
) {
_instance.onSelectRouter2(e.target.value);
};
_instance.showChatNow(false, false);
} else {
_instance.childElements['routeLevel2Select'] = false;
var _parentObject = false;
for (let _option in _instance.data.options) {
if (_option === _id) {
_parentObject = _instance.data.options[_option];
_parentObject.id = _id;
}
}
_instance.showChatNow(_parentObject, false);
}
} else {
_instance.showChatNow(false, false);
}
}
});
//
Object.defineProperty(_instance, 'onSelectRouter2', {
value: function (_id) {
var _ParentRouteId =
_instance.childElements['routeLevel1Select'].value;
var _ChildRouteId = _instance.childElements['routeLevel2Select'];
if (_ChildRouteId) {
_ChildRouteId = _ChildRouteId.value;
}
var _parentObject = false;
var _childObject = false;
for (var _option in _instance.data.options) {
if (_option === _ParentRouteId) {
_parentObject = _instance.data.options[_option];
_parentObject.id = _ParentRouteId;
for (var _childOption in _instance.data.options[_option].childs) {
if (_childOption === _ChildRouteId) {
_childObject =
_instance.data.options[_option].childs[_childOption];
_childObject.id = _ChildRouteId;
}
}
}
}
if (_id + '' == '0') {
_instance.showChatNow(false, false);
} else {
_instance.showChatNow(_parentObject, _childObject);
}
}
});
//
const handleOfferImpression = function () {
stopCollectingEngagements = true;
impressionsTimeoutHandle = null;
let authEngagements = window.engagementsOffered.filter(function (v) {
return v.engagementName.indexOf('auth-web-msg') === 0;
});
if (proactiveSuppressionCheck && proactiveExists()) {
proactiveSuppressionCheck = false;
}
let data;
if (authEngagements.length > 0) {
data = authEngagements[0];
} else {
data = window.engagementsOffered[0];
}
if (data) {
if (!_instance.chatWindowOpen && proactiveExists()) {
showLPM();
} else {
hideLPM();
}
if (data.engagementType === 1) {
stopCollectingEngagements = false;
setTimeout(addCloseEventForProactiveButton, 1000);
hidePersistentChatButton();
if (!impressionStatSent) {
impressionStatSent = true;
isProactive = true;
sendStats({
state: 'offered',
engagementName: data.engagementName,
isProactive: isProactive,
isReactive: isReactive
});
}
if (proactiveAutoClick) {
proactiveAutoClick = false;
try {
window.lpTag.taglets.rendererStub.click(data.engagementId);
} catch (e) {}
}
} else if (data.engagementType === 6) {
isProactive = false;
if (!clicked) {
stopCollectingEngagements = false;
window.engagementsOffered = [];
return;
}
// The ignoreOffer flag is added for the workaround, if it's true we don't execute the auto click code
if (!ignoreOffer) {
engagementId = data.engagementId;
let checkForChat = null;
//
function checkRendererStubReady() {
if (
window.lpTag &&
window.lpTag.taglets &&
window.lpTag.taglets.rendererStub
) {
let info =
window.lpTag.taglets.rendererStub.getEngagementInfo(
engagementId
);
if (
info.state !== 'undefined' &&
(info.state === 1 || info.state === 2)
) {
sendUrlSDE();
window.lpTag.taglets.rendererStub.click(engagementId);
clearInterval(checkForChat);
}
}
}
checkForChat = setInterval(checkRendererStubReady, 500);
} else {
// Turn the flag off for the next engagement impression
ignoreOffer = false;
stopCollectingEngagements = false;
window.engagementsOffered = [];
}
}
} else {
stopCollectingEngagements = false;
}
};
//
const disableEvent = function (event) {
event.stopPropagation();
event.preventDefault();
};
//
const bindWebTagEvents = function () {
window.lpTag.events.bind({
appName: 'lp_SMT',
eventName: 'MONITORING_STATE',
func: function (data) {
if (data.active === true && !lpTagInitialized) {
lpTagInitialized = true;
processTriggers();
}
}
});
window.lpTag.events.bind(
'lpUnifiedWindow',
'conversationInfo',
function (data) {
if (
convoStartedOnPage &&
data.conversationId &&
data.conversationId !== statConvoId &&
!startStatSent
) {
statConvoId = data.conversationId;
sendStats({
engagementName: engagementName,
state: 'started',
conversationId: statConvoId,
isProactive: isProactive,
isReactive: isReactive
});
startStatSent = true;
sendNRPageAction(MESSAGING_ACTION, {
_action: 'ConversationStarted',
_conversationId: data.conversationId,
duration: new Date().getTime() - convoTriggerStartTime
});
}
}
);
window.lpTag.events.bind(
'lpUnifiedWindow',
'minimized',
function (_data) {
doAssetFocus(
'minimized',
onChatWindowMinimized,
minimizedFocusQuerySelector
);
}
);
window.lpTag.events.bind(
'lpUnifiedWindow',
'windowClosed',
function (_data) {
_instance.chatWindowOpen = false;
sendNRPageAction(MESSAGING_ACTION, { _action: 'ChatWindowClosed' });
convoTriggerStartTime = 0;
_inputBoxFocus = false;
window.engagementsOffered = [];
reactiveTRComponentInfo = null;
reactiveAgentCtxInfo = [];
stopCollectingEngagements = false;
convoStartedOnPage = false;
isProactive = false;
isReactive = false;
const _ceClick = isChatEverywhereClick;
setTimeout(function () {
if (proactiveExists()) {
showLPM();
hidePersistentChatButton();
} else {
hideLPM();
showPersistentChatButton();
}
doAssetFocus(
'closed',
onChatWindowClosed,
closedFocusQuerySelector,
_ceClick
);
}, 1000);
isChatEverywhereClick = false;
}
);
window.lpTag.events.bind(
'LP_OFFERS',
'OFFER_IMPRESSION',
function (data) {
//This is triggered when the engagement has been displayed on the page.
if (
window.engagementsOffered.length === 0 &&
!impressionsTimeoutHandle
) {
impressionsTimeoutHandle = setTimeout(
handleOfferImpression,
engCollectTimeout
);
}
if (!stopCollectingEngagements) {
window.engagementsOffered.push(data);
}
}
);
// Bind to another event which triggers when the chat window state changes
window.lpTag.events.bind({
appName: 'API',
eventName: 'state',
func: function (data) {
// If received window init state, which means chat window is going to open
// We set the flag to true to ignore next impress which will be delivered immediately after window close.
// Adding 'ended' and 'applicationEnded' state for fallback
if (
data === 'init' ||
data === 'ended' ||
data === 'applicationEnded'
) {
if (previousEngagementType === 6) {
ignoreOffer = true;
}
if (data === 'init') {
hideLPM();
hidePersistentChatButton();
if (!_instance.chatWindowOpen && convoTriggerStartTime > 0) {
sendNRPageAction(MESSAGING_ACTION, {
_action: 'ChatWindowOpen',
_duration: new Date().getTime() - convoTriggerStartTime
});
}
_instance.chatWindowOpen = true;
if (!_inputBoxFocus) {
doInputBoxFocus();
}
if (_instance.abcTimeoutHandle) {
clearTimeout(_instance.abcTimeoutHandle);
}
} else {
setTimeout(function () {
if (proactiveExists()) {
showLPM();
hidePersistentChatButton();
} else {
hideLPM();
showPersistentChatButton();
}
}, 1000);
_instance.chatWindowOpen = false;
_inputBoxFocus = false;
window.engagementsOffered = [];
if (startStatSent && convoStartedOnPage) {
sendStats({
engagementName: engagementName,
state: 'ended',
conversationId: statConvoId,
isProactive: isProactive,
isReactive: isReactive
});
startStatSent = false;
sendNRPageAction(MESSAGING_ACTION, {
_action: 'ConversationEnded',
_conversationId: statConvoId,
duration: new Date().getTime() - convoTriggerStartTime
});
convoTriggerStartTime = 0;
}
}
} else if (data === 'postChat') {
if (!_instance.chatWindowOpen && convoTriggerStartTime > 0) {
sendNRPageAction(MESSAGING_ACTION, {
_action: 'ChatWindowOpen',
_conversationId: statConvoId,
_duration: new Date().getTime() - convoTriggerStartTime
});
}
_instance.chatWindowOpen = true;
if (!_inputBoxFocus) {
doInputBoxFocus();
}
if (_instance.abcTimeoutHandle) {
clearTimeout(_instance.abcTimeoutHandle);
}
// ignore postChat event for persistentChat Container show/hide to avoid flickering
} else {
hideLPM();
hidePersistentChatButton();
if (!_instance.chatWindowOpen && convoTriggerStartTime > 0) {
sendNRPageAction(MESSAGING_ACTION, {
_action: 'ChatWindowOpen',
_conversationId: statConvoId,
_duration: new Date().getTime() - convoTriggerStartTime
});
}
_instance.chatWindowOpen = true;
if (!_inputBoxFocus) {
doInputBoxFocus();
}
if (_instance.abcTimeoutHandle) {
clearTimeout(_instance.abcTimeoutHandle);
}
}
}
});
window.lpTag.events.bind('LP_OFFERS', 'OFFER_CLICK', function (data) {
_dragDropOverridden = false;
convoStartedOnPage = true;
statConvoId = '';
previousEngagementType = data.engagementType;
engagementName = data.engagementName;
stopMonitorForMessage();
if (data.engagementType === 1) {
sendUrlSDE();
isReactive = false;
isProactive = true;
} else {
isProactive = false;
isReactive = true;
}
sendAgentCtxInfo();
if (!isChatEverywhereClick) {
sendStats({
state: 'clicked',
engagementName: engagementName,
isProactive: isProactive,
isReactive: isReactive
});
}
});
window.lpTag.events.bind(
'LP_OFFERS',
'OFFER_DECLINED',
function (data) {
if (data.engagementType === 1) {
hideLPM();
showPersistentChatButton();
if (!declinedStatSent) {
declinedStatSent = true;
sendStats({
state: 'declined',
engagementName: engagementName,
isProactive: true
});
}
}
}
);
window.lpTag.events.bind('lpUnifiedWindow', 'state', function (_data) {
// when resume;
if (
_data &&
(_data.state === 'waiting' || _data.state === 'resume')
) {
if (_instance.callBackTread) {
clearInterval(_instance.callBackTread);
_instance.callBackTread = false;
} else if (_instance.callBack) {
_instance.callBackTread = setInterval(function () {
_instance.callBack();
}, _instance.callBackInterval * 1000);
}
} else if (_data && _data.state === 'ended') {
stopCollectingEngagements = false;
// when ended;
if (_instance.callBackTread) {
clearInterval(_instance.callBackTread);
_instance.callBackTread = false;
}
}
if (
_data &&
(_data.state === 'init' ||
_data.state === 'waiting' ||
_data.state === 'preChat' ||
_data.state === 'chatting' ||
_data.state === 'offline')
) {
if (!_instance.chatWindowOpen && convoTriggerStartTime > 0) {
sendNRPageAction(MESSAGING_ACTION, {
_action: 'ChatWindowOpen',
_conversationId: statConvoId,
_duration: new Date().getTime() - convoTriggerStartTime
});
}
_instance.chatWindowOpen = true;
if (!_inputBoxFocus) {
doInputBoxFocus();
}
hideLPM();
hidePersistentChatButton();
if (_instance.abcTimeoutHandle) {
clearTimeout(_instance.abcTimeoutHandle);
}
}
if (
disableDragDropFileUpload &&
!_dragDropOverridden &&
_data &&
_data.state === 'waiting'
) {
let e = document.querySelector('div.lp_main.lpc_body.lpc_desktop');
if (e) {
e.addEventListener('drop', disableEvent, true);
e.addEventListener('dragover', disableEvent, true);
e.addEventListener('dragenter', disableEvent, true);
e.addEventListener('dragleave', disableEvent, true);
_dragDropOverridden = true;
}
}
});
};
//
Object.defineProperty(_instance, 'init', {
value: function (_initSetting) {
// store initSettings so we can use them later
initParams = _initSetting;
if(
authV2IsEnabled &&
_config.tacticalTCOMAuthEnabled &&
!_initSetting.getToken &&
document.location.hostname === _tcomPrefix+'.telstra.com.au'
){
_getToken = function () {
const u =
(window.authCaiman &&
window.authCaiman.getUser &&
window.authCaiman.getUser()) ||
{};
if (
window.authCaiman &&
window.authCaiman.isLoggedIn &&
window.authCaiman.isLoggedIn() &&
u.access_token
) {
retrieveV2Objects(u.access_token);
} else {
_id = _token = null;
nextStepAfterAuth();
}
};
}
if (
authV2IsEnabled &&
initParams.getToken &&
typeof initParams.getToken === 'function'
) {
_getToken = function () {
const token = initParams.getToken();
if (token) {
retrieveV2Objects(token);
} else {
_id = _token = null;
nextStepAfterAuth();
}
};
}
_instance.persistentChatToggle =
getInitPersistentChatToggle(_initSetting);
_instance.data.persistentSection =
getInitPersistentSection(_initSetting);
_instance.setupPersistentChat(
_instance.persistentChatToggle,
getInitPersistentChatLabel(_initSetting)
);
setupStats();
_instance.section = _initSetting.section || [];
_instance.sourceSection = _initSetting.sourceSection || [];
_instance.callBack = _initSetting.callBack || false;
_instance.callBackInterval =
_initSetting.callBackInterval || _instance.callBackInterval;
/*Initializing TP TAG*/
window.lpTag = window.lpTag || {};
window.lpTag.section = _instance.section;
setupAuthSupport();
if (window.__loadLivePersonSrc) {
window.__loadLivePersonSrc();
// incase if lp overwrite sections
window.lpTag.section = _instance.section;
}
_instance.section = JSON.parse(
JSON.stringify(_instance.sourceSection)
);
window.lpTag.sdes = lpTag.sdes || [];
_instance.isDirect = _initSetting.isDirect;
var _styleLocal = '';
if (!_initSetting.onlyTcomCSS) {
_styleLocal +=
'.telstra_live_person_container>.close {float: right;display: block;height: 26px;width: 26px;border: 0;padding: 0;cursor: pointer;background-color: #00aaf3;}';
_styleLocal +=
'.close:after {display: inline-block;content: "x";font-size: 18px !important;color: #fff !important;font-weight: normal !important;line-height: 26px;}';
if (_initSetting.forceButtonCss) {
_styleLocal +=
'.button,.btn {padding: 14px 20px 14px 20px;border: none;text-decoration: none;display: inline-block;white-space: nowrap;position: relative;outline: none;line-height: normal;max-width: 100%;background-color: #1964c8;color: #fff;}';
}
} else {
//Tcom Specific css
}
var _styleLocalElement = document.createElement('STYLE');
_styleLocalElement.innerHTML = _styleLocal;
document
.getElementsByTagName('head')[0]
.appendChild(_styleLocalElement);
// Add event Listener
bindWebTagEvents();
_appPlatform =
(_initSetting.appPlatform &&
_initSetting.appPlatform.toLowerCase()) ||
'';
_appVersion = _initSetting.appVersion;
if (_appPlatform === 'ios') {
_globalMTRedirectEnabled =
_config.enableMTRedirection &&
APP_VER_REGEX.test(minIOSAppVerForMTRedirect);
} else if (_appPlatform === 'android') {
_globalMTRedirectEnabled =
_config.enableMTRedirection &&
APP_VER_REGEX.test(minAndroidAppVerForMTRedirect);
} else {
_globalMTRedirectEnabled = false;
}
calculatedMTRedirect = calculateMTRedirectFlag(
_initSetting.preferAppLinks
);
preferMTRForMessageUs =
calculatedMTRedirect && _initSetting.preferAppLinks === true;
if (typeof _initSetting.onChatWindowClosed === 'function') {
_defaultClosedCallback = _initSetting.onChatWindowClosed;
onChatWindowClosed = _initSetting.onChatWindowClosed;
}
if (typeof _initSetting.onChatWindowMinimized === 'function') {
_defaultMinimizedCallback = _initSetting.onChatWindowMinimized;
onChatWindowMinimized = _initSetting.onChatWindowMinimized;
}
closedFocusQuerySelector = _initSetting.closedFocusQuerySelector;
minimizedFocusQuerySelector =
_initSetting.minimizedFocusQuerySelector;
_defaultClosedSelector = _initSetting.closedFocusQuerySelector;
_defaultMinimizedSelector = _initSetting.minimizedFocusQuerySelector;
_initCalled = true;
}
});
//
Object.defineProperty(_instance, 'setupPersistentChat', {
value: function (persistentChatToggle, persistentChatLabel) {
if (_instance.persistentChatContainer === false) {
// create container only if not already created
_instance.persistentChatContainer = document.createElement('DIV');
_instance.persistentChatContainer.setAttribute(
'class',
'persistentChatContainer'
);
_instance.persistentChatContainer.setAttribute(
'id',
'persistentChatContainer'
);
_instance.persistentChatContainer.setAttribute(
'role',
'navigation'
);
_instance.persistentChatContainer.setAttribute(
'aria-label',
'Message Us'
);
// delay showing chat everywhere button until either:
// abc chat button delay amount of time has elapsed for ABC Compatible pages
// or
// VA health check has completed
hidePersistentChatButton();
appendPersistentChatContainer();
}
if (persistentChatToggle) {
if (_instance.isABCCompatibleDevice && _instance.data.abcEnabled) {
// for ABC, get config and use that config to determine what needs to be done for that specific page
getABCConfig(function (err, jabuka) {
let _abcConfig = { enabled: true };
if (err) {
// assume abc enabled with defaults. if required, special error handling can be done in future
} else {
// got abc config. check this page specific config
_abcConfig = getABCPageConfig(jabuka, true);
}
if (_abcConfig.enabled) {
constructABCButton(_abcConfig);
} else {
constructChatEverywhereButton(persistentChatLabel);
}
});
} else {
constructChatEverywhereButton(persistentChatLabel);
}
}
}
});
// Set Persistent Parameters
Object.defineProperty(_instance, 'setPersistentParameters', {
value: function (persistentSection, persistentChat) {
_instance.data.persistentSection = persistentSection || [];
if (!persistentChat) {
persistentChat = false;
}
if (
_instance.persistentChatContainer !== false &&
persistentChat === false
) {
hidePersistentChatButton();
}
if (persistentChat === true) {
if (
!_initCalled ||
(_instance.persistentChatContainer !== false &&
(_instance.persistentChatContainer.childElementCount === 0 ||
_instance.persistentChatContainer.children.length === 0))
) {
// if init method was not called or if it was called but persistentChatContainer and its children were not created due to toggle being false, create the container again
_instance.setupPersistentChat(
persistentChat,
_instance.getPersistentChatLabel(initParams)
);
} else {
_instance.persistentChatToggle = persistentChat;
if (!_instance.chatWindowOpen) {
hideLPM();
showPersistentChatButton();
}
}
}
_instance.persistentChatToggle = persistentChat;
}
});
//
const updateDtcChatEverywhere = function () {
// show chat everywhere button based on DTC, bot availability and global persistent chat toggle
if (_instance.persistentChatLabel) {
_instance.persistentChatLabel.innerHTML =
_instance.getPersistentChatLabel(initParams);
}
_instance.setPersistentParameters(
_instance.getPersistentSection(initParams),
getInitPersistentChatToggle(initParams)
);
};
//
const _loadBusinessWatchDog = function (callback) {
var bxhttp = new XMLHttpRequest();
bxhttp.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
_businessWatchDog = JSON.parse(this.responseText);
}
callback();
}
};
bxhttp.open('GET', _businessWatchDogURL, true);
bxhttp.send();
};
//
const postVAStatusLoad = function (vaName) {
loadedVA.push(vaName);
if (loadedVA.length == totalVA && !postVALoadDone) {
postVALoadDone = true;
// delay updating chat everywhere button so that init call can finish creating dom elements
setTimeout(updateDtcChatEverywhere, 5000);
}
};
// statements
if (!window.__disableBusinessVA) {
_loadBusinessWatchDog(function () {
postVAStatusLoad('bus');
});
}
convertChatButtonToMessaging();
if (tacticalAbcEnabled && !_instance.data.abcEnabled) {
getABCConfig(function (err, data) {
if (err) {
sendNRPageAction('__lp__abc', {
_err: e.message || JSON.stringify(e),
_stack: e.stack || 'N/A'
});
}
});
}
// END OF TELSTRA LIVEPERSON CLASS CONSTRUCTOR
}
});
Object.freeze(window.TelstraLivePerson);
if (window.livePerson) {
throw new Error('Can not redefine this object');
} else {
window.lpSettings = window.lpSettings || {};
Object.defineProperty(window, 'livePerson', {
value: new window.TelstraLivePerson(window.lpSettings)
});
}
} catch (e) {
Object.defineProperty(window, 'disableAuthConversations', { value: true });
if (newrelic && newrelic.addPageAction) {
newrelic.addPageAction('__lp__init__error', {
_error: e.message || e,
_stack: e.stack || 'N/A'
});
}
}