// GLOBAL VARS
// globally define adobe object
let s = null;
// create dataprops object for adobe
let dataProps = {};

// BEGIN general Functions
function isEmpty(value) {
    return (value == undefined || value == null || value == "");
}

function isCrawlerBot() {
    const botPattern = "(Googlebot|Googlebot-Mobile|Googlebot-Image|Google favicon|Mediapartners-Google|bingbot|slurp|java|wget|curl|Commons-HttpClient|Python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|jyxobot|FAST-WebCrawler|FAST Enterprise Crawler|biglotron|teoma|convera|seekbot|gigablast|exabot|ngbot|ia_archiver|GingerCrawler|webmon |httrack|webcrawler|grub.org|UsineNouvelleCrawler|antibot|netresearchserver|speedy|fluffy|bibnum.bnf|findlink|msrbot|panscient|yacybot|AISearchBot|IOI|ips-agent|tagoobot|MJ12bot|dotbot|woriobot|yanga|buzzbot|mlbot|yandexbot|purebot|Linguee Bot|Voyager|CyberPatrol|voilabot|baiduspider|citeseerxbot|spbot|twengabot|postrank|turnitinbot|scribdbot|page2rss|sitebot|linkdex|Adidxbot|blekkobot|ezooms|dotbot|Mail.RU_Bot|discobot|heritrix|findthatfile|europarchive.org|NerdByNature.Bot|sistrix crawler|ahrefsbot|Aboundex|domaincrawler|wbsearchbot|summify|ccbot|edisterbot|seznambot|ec2linkfinder|gslfbot|aihitbot|intelium_bot|facebookexternalhit|yeti|RetrevoPageAnalyzer|lb-spider|sogou|lssbot|careerbot|wotbox|wocbot|ichiro|DuckDuckBot|lssrocketcrawler|drupact|webcompanycrawler|acoonbot|openindexspider|gnam gnam spider|web-archive-net.com.bot|backlinkcrawler|coccoc|integromedb|content crawler spider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler.com|siteexplorer.info|elisabot|proximic|changedetection|blexbot|arabot|WeSEE:Search|niki-bot|CrystalSemanticsBot|rogerbot|360Spider|psbot|InterfaxScanBot|Lipperhey SEO Service|CC Metadata Scaper|g00g1e.net|GrapeshotCrawler|urlappendbot|brainobot|fr-crawler|binlar|SimpleCrawler|Livelapbot|Twitterbot|cXensebot|smtbot|bnf.fr_bot|A6-Indexer|ADmantX|Facebot|Twitterbot|OrangeBot|memorybot|AdvBot|MegaIndex|SemanticScholarBot|ltx71|nerdybot|xovibot|BUbiNG|Qwantify|archive.org_bot|Applebot|TweetmemeBot|crawler4j|findxbot|SemrushBot|yoozBot|lipperhey|y!j-asr|Domain Re-Animator Bot|AddThis|prerender)";
    //const botPattern = "(Googlebot|AdsBot-Google|Bingbot|adidxbot|Slurp|DuckDuckBot|Yeti|twitterbot|SEMrushbot|GTmetrix|Exabot|facebot|facebookexternalhit|Applebot|prerender)";
    let re = new RegExp(botPattern, 'i');
    let userAgent = navigator.userAgent;
    if (re.test(userAgent)) {
        return true;
    } else {
        return false;
    }
}

function getLocale() {
    let urlPath = document.URL;
    let locale = '';
    if (document.URL.indexOf('disneyplushelpcenter') != -1) {
        urlPath = document.URL.substring(document.URL.indexOf('disneyplushelpcenter')+21);
        locale = urlPath.substring(0, urlPath.indexOf('/'));
    } else {
        urlPath = document.URL.substring(document.URL.indexOf('.com')+5);
        locale = urlPath.substring(0, urlPath.indexOf('/'));
    }
    return locale;
}

function isActiveSession() {
    //check for an active session
    let currentStatus = "";
    let language = window.sessionStorage.getItem("LSKey[c]language");
    // add any checks if necessary
    let storageKey = "-" + language + "___chat";    
    for (i = 0; i < localStorage.length; i++)   {

        if (localStorage.key(i).includes(storageKey)) {
            let sessionStatus = JSON.parse(localStorage.getItem(localStorage.key(i)));
            currentStatus = sessionStatus.session.status;
            break;
        }

    };
    return (currentStatus == "OPEN" || currentStatus == "ASSIGNING" || currentStatus == "CLOSED");
}
// END functions


// BEGIN nice script
const BOT_ALLOWED_COUNTRIES = ['US', 'UK', 'AR', 'BR', 'CL', 'CO', 'CR', 'EC', 'MX', 'PA', 'PE', 'UY', 'AU', 'NZ', 'SG'];
const BRAND_DISNEY = 'Disney';
const TIER = 'Tier1';
const SF_BOT_LANGUAGES = [
    {"sfLanguage": "es-AR", "botLanguage" : "es-LA"},
    {"sfLanguage": "es-CL", "botLanguage" : "es-LA"},
    {"sfLanguage": "es-CO", "botLanguage" : "es-LA"},
    {"sfLanguage": "es-CR", "botLanguage" : "es-LA"},
    {"sfLanguage": "es-EC", "botLanguage" : "es-LA"},
    {"sfLanguage": "es-MX", "botLanguage" : "es-LA"},
    {"sfLanguage": "es-PA", "botLanguage" : "es-LA"},
    {"sfLanguage": "es-PE", "botLanguage" : "es-LA"},
    {"sfLanguage": "es-UY", "botLanguage" : "es-LA"},
    {"sfLanguage": "es-US", "botLanguage" : "es-LA"}
];

function getBotLanguage(sfLanguage) {
    let botLanguage = sfLanguage;
    let filteredValues = SF_BOT_LANGUAGES.filter(item => {
        return item.sfLanguage == sfLanguage;
    });
    return (filteredValues.length > 0) ? filteredValues[0].botLanguage : botLanguage;
}

function isBotEnabled() {
    const countryValue = window.sessionStorage.getItem('LSKey[c]country');
    console.log('page-init: chat-log: isBotEnabled: ' + countryValue);
    return countryValue && BOT_ALLOWED_COUNTRIES.includes(countryValue);
}

function initiateNice() {
    if (isBotEnabled()) {
        console.log('page-init: chat-log: bot enabled... load nice chat');
        (function (i, s, o, r, g, v, a, m) {
            g = v ? g + '?v=' + v : g; i['BrandEmbassy'] = r;
            i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }; i[r].l = +new Date();
            a = s.createElement(o); m = s.getElementsByTagName(o)[0]; a.async = 1;
            a.src = g + '?' + Math.round(Date.now() / 1000 / 3600); m.parentNode.insertBefore(a, m)
        }) (window, document, 'script', 'brandembassy', BRAND_EMBASSY_JS);

        let language = window.sessionStorage.getItem("LSKey[c]language");
        brandembassy('init', 3717, BRAND_EMBASSY_ID, language);

        brandembassy('setWindowWidth', '320px');
        brandembassy('setWindowHeight', '610px');
        brandembassy('setCustomCss', '[data-selector="Header"] {margin-bottom: 18px;}');
        brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: none;}');

        //hide the precontact survey form */
        brandembassy('hidePreSurvey');
        //brandembassy('openChatWindow');
        brandembassy('sendFirstMessageAutomatically', 'Hello');
        //brandembassy('autoStartSession');

        //Displays the chat window as if there are agents available*/
        brandembassy('enableChatAlwaysOnline');

        //SHOW SEND BUTTON*/
        brandembassy('showSendButton');

        //sets default width to 400px
        document.onreadystatechange = (event) => {

            if (document.readyState === 'complete') {
                brandembassy('setWindowWidth', '400px');
            }
        };

        document.addEventListener('chatBotStatusChange', showHideBot);

        document.addEventListener('setnicefields', function () {
            console.log('page-init: chat-log: call setBrandEmbassyFields (setnicefields event listener) : ' + event.detail.country + ', ' + event.detail.language);
            setBrandEmbassyFields(event.detail.country, event.detail.language);
        });

        brandembassy('onPushUpdate', ['CaseStatusChanged'], pushUpdatePayload => {

            if (typeof pushUpdatePayload === 'undefined' || typeof pushUpdatePayload.data === 'undefined') {
                return;
            }
            const { status } = pushUpdatePayload.data.case || {};

            if (typeof status === 'undefined') {
                return;
            }
            // When a previous case has been closed, this will set the custom fields again.

            if (status === 'closed') {
                let country = window.sessionStorage.getItem("LSKey[c]country");
                let language = window.sessionStorage.getItem("LSKey[c]language");

                console.log('page-init: chat-log: call setBrandEmbassyFields (onPushUpdate listener) : ' + country + ', ' + language);
                setBrandEmbassyFields(country, language);
            }

        });

    } 
}

//show/hide bot
function showHideBot() {
    let documentURL = document.URL;

    let chatbotActive = window.sessionStorage.getItem("LSKey[c]isChatBotActive");
    if (chatbotActive == "true" &&(documentURL.indexOf('/contact-us') == -1 || (isActiveSession()))) {
        brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: initial};');
    } else {
        console.log("hide the bot");
        brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: none};');
    }

}

function setBrandEmbassyFields(country, language) {
    console.log('page-init: chat-log: inside setBrandEmbassyFields : ' + country + ', ' + language);
    brandembassy('setCaseCustomField', 'brand', BRAND_DISNEY);
    brandembassy('setCaseCustomField', 'tier', TIER);
    brandembassy('setCaseCustomField', 'authenticated', "false");
    brandembassy('setCaseCustomField', 'user_id', "N/A");
    
    if (isEmpty(country)) {
        country = window.localStorage.getItem("LSKey[c]country");
    }
    //Rohit - 12/7/23 - if local storage is also empty
    if (isEmpty(country)) {
        country = "NO_COUNTRY_FOUND";
    }        
    brandembassy('setCaseCustomField', 'country', country);

    if (isEmpty(language)) {
        language = window.localStorage.getItem("LSKey[c]language");
    }
    //Rohit - 12/7/23 - if local storage is also empty
    if (isEmpty(language)) {
        language = "NO_LANGUAGE_FOUND";
    }        
    let botLanguage = getBotLanguage(language);
    console.log('page-init: chat-log: ' + language + " => botLanguage: " + botLanguage);

    brandembassy('setCaseCustomField', 'language', language);
    brandembassy('setCaseCustomField', 'locale', language.replace('-','_'));
    brandembassy('setCaseCustomField', 'botlanguage', botLanguage);
}

/**stop body scrolling when feedback form is displayed**/
document.addEventListener('feedback', function (event) {
    //console.log("Received feedback event.", event.detail.status);
    let body = document.getElementsByTagName("body");
    if (body && body.length > 0) {
        let overflowValue = (event.detail.status == "open") ? "hidden" : "auto";
        body[0].style.overflow = overflowValue;
    }
});

document.addEventListener('startnicechat', function (event) {
    var top = screen.height-660;//20px margin
    var left=screen.width-375;

    let language = event.detail.language;
    let country = event.detail.country;
    let brand = BRAND_DISNEY;

    if (isBotEnabled()) {
        brandembassy('hideChatWindow');
    }

    let options = "width=375,height=640,toolbar=no,scrollbars=no,resizable=no,titlebar=no,left=" + left + ",top=" + top;
    window.open(LIVE_AGENT_URL + "?language=" + language + "&country=" + country + "&product=" + brand, "chatwindow", options);

});

document.addEventListener('startnicebot', function () {

    // send adobe chat initiation event
    let chatDataProps = {}
    chatDataProps.prop5 = 'Contact Button';
    chatDataProps.evar5 = 'Contact Button';
    chatDataProps.prop6 = 'N/A';
    chatDataProps.evar6 = 'N/A';
    chatDataProps.prop7 = 'FAB';
    chatDataProps.evar35 = 'FAB';
    chatDataProps.event7 = 1;
    handleAdobeData(chatDataProps, 'event');

    console.log('page-init: chat-log: startnicebot event');
    brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: initial};');
    brandembassy('hidePreSurvey');
    brandembassy('openChatWindow');
    brandembassy('sendFirstMessageAutomatically', 'Hello');

    if (!isActiveSession()) {
        brandembassy('hideAssignedAgent');
        brandembassy('autoStartSession');
    }

});

window.addEventListener("message", receiveMessage, false);

function receiveMessage(event) {
    console.log("page-init: chat-log: chat method in parent page");
    
    try{
        var jsonObject = "";
        if (event && event.data && typeof event.data === "string") {

            console.log("page-init: chat-log: data received :" + event.data);

            if (event.data.startsWith("loadSalesForceLiveChat")) {
                const delimiter = "#sep#";
                const splitArray = event.data.split(delimiter);
                try {
                    jsonObject = JSON.parse(splitArray[1]);
                } catch (error) {
                    console.error("page-init: chat-log: Error parsing JSON:", error);
                }

                //minimize the VA chat
                let country = window.sessionStorage.getItem("LSKey[c]country");
                let language = window.sessionStorage.getItem("LSKey[c]language");
                let product = BRAND_DISNEY;
                let tier = TIER;

                if (isBotEnabled()) {
                    brandembassy('hideChatWindow');
                }

                let w = 375;
                let h = 650;
                let l = window.innerWidth - w;
                let t = window.innerHeight - h;
                let options = "width=" + w + ",height=" + h + ",toolbar=no,scrollbars=no,resizable=no,titlebar=no,left=" + l + ",top=" + t;

                window.open(LIVE_AGENT_URL + '?language=' + language + '&country=' + country + '&product=' + product + '&ameliaconvid=' + jsonObject.ameliaconvid + '&tier=' + tier, "chatwindow", options);
            }

            if (event.data.startsWith("setnicefields")) {

                try {
                    let country = window.sessionStorage.getItem("LSKey[c]country");
                    let language = window.sessionStorage.getItem("LSKey[c]language");

                    console.log('page-init: chat-log: call setBrandEmbassyFields (receiveMessage event listener) : ' + country + ', ' + language);
                    setBrandEmbassyFields(country, language);

                    brandembassy('hidePreSurvey');
                    brandembassy('sendFirstMessageAutomatically', 'Hello');
                    if (!isActiveSession()) {
                        brandembassy('hideAssignedAgent');
                        brandembassy('autoStartSession');
                    }

                } catch (error) {
                    console.error("page-init: chat-log: Error parsing JSON:", error);
                }
            }

            if (event.data.startsWith("startnicebot")) {

                // send adobe chat initiation event
                let chatDataProps = {}
                chatDataProps.prop5 = 'Contact Button';
                chatDataProps.evar5 = 'Contact Button';
                chatDataProps.prop6 = 'N/A';
                chatDataProps.evar6 = 'N/A';
                chatDataProps.prop7 = 'FAB';
                chatDataProps.evar35 = 'FAB';
                chatDataProps.event7 = 1;
                handleAdobeData(chatDataProps, 'event');
                
                brandembassy('setCustomCss', '[data-selector="MESSENGER"] {display: initial};');
                brandembassy('hidePreSurvey');
                brandembassy('openChatWindow');
                brandembassy('sendFirstMessageAutomatically', 'Hello');

                if (!isActiveSession()) {
                    brandembassy('hideAssignedAgent');
                    brandembassy('autoStartSession');
                }
            }         
            
            if (event.data.startsWith("{")) {

                let eventData = JSON.parse(event.data);
                if (eventData.event && eventData.event == 'play') {
                    console.log("adobe: video play event: " + eventData.event);

                    const eventProps = {
                        'event17': 1,
                    };
                    handleAdobeData(eventProps, 'event');
                }
            }
        } 

    } catch(err) {
        console.error("page-init: chat-log: Error in receiveMessage broadcast:", err);
    }        
}
// END Nice chat

// BEGIN primary Salesforce events pageref and writemeta 
document.addEventListener('pagerefchange', function (event) {
    console.log("page-init: pagerefchange event start.");
    if (isBotEnabled()) {
        showHideBot();
    }

    let documentURL = document.URL;

    if (documentURL.indexOf('/article') == -1 || documentURL.indexOf('/category')) {
        let elements = document.querySelectorAll("[data-src='js']");
        if (elements) {
            elements.forEach(e => {
                e.remove();
            });
        }
    }

    console.log('page-init: pagerefchange: adobe: set analytics props');
    if (event.detail.isGuest == true) {
        // login status
        dataProps.prop39 = 'Unauthenticated';
        dataProps.evar74 = 'Unauthenticated';
    } else {
        // login status
        dataProps.prop39 = 'Authenticated';
        dataProps.evar74 = 'Authenticated';
    }
    
    if (document.title == 'Error') {
        dataProps.pageName = '404 Error Page';
        dataProps.prop13 = document.title;
        dataProps.prop14 = '404 Error Page';
        handleAdobeData(dataProps, 'page');
    } else {
        if (document.URL.indexOf('/article') === -1 && document.URL.indexOf('/category') === -1) {
            // delay the check for the title tag and event send to allow time for SF JS to "settle"
            setTimeout(() => {
                dataProps.prop13 = document.title;
                // "Parent Page Title" - English version of title for non-article pages.  article version in writemetatags event
                if (document.URL.indexOf('/contact-us') !== -1) {
                    dataProps.pageName = 'Contact Us';
                    dataProps.prop14 = 'Contact Us';
                } else if (document.URL.indexOf('/global-search') !== -1) {
                    dataProps.pageName = 'Global Search';
                    dataProps.prop14 = 'Search Results';
                } else if (document.URL.endsWith('.com') !== -1 || document.URL.endsWith('.com/') !== -1) {
                    dataProps.pageName = 'Home';
                    dataProps.prop14 = 'Home';
                }
                console.log('page-init: pagerefchange: adobe: was not an article/cat page: ', dataProps);
                handleAdobeData(dataProps, 'page');
            }, 100);
        }
    }
        
});

/**dynamically add metadata to article pages **/
document.addEventListener('writemetatags', function (event) {
    console.log("page-init: Received writemetatags event.");
    console.log("title: " + event.detail.title);
    console.log("summary: " + event.detail.summary);
    console.log("page:" + event.detail.page);

    let elements = document.querySelectorAll("[data-src='js']");
    if (elements) {
        elements.forEach(e => {
            e.remove();
        });
    }

    if (event.detail.page == "category") {

        // adobe code needed for article page.  need to wait for this meta before firing
        dataProps.pageName = 'Help Topic';
        dataProps.prop13 = document.title;
        dataProps.prop14 = event.detail.topic;
        handleAdobeData(dataProps, 'page');

        var link = document.createElement('meta');
        link.setAttribute('name', 'og:url');
        link.content = document.URL;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);

        link = document.createElement('link');
        link.setAttribute('rel', 'canonical');
        link.href = document.URL;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);
    } else {

        // adobe code needed for article page.  need to wait for this meta before firing
        dataProps.pageName = 'Article Detail';
        dataProps.prop13 = document.title;
        dataProps.prop14 = event.detail.parenttitleenglish;
        //Article Updated Date: prop15
        dataProps.prop15 = event.detail.lastpublished;
        //Article Version: prop16
        dataProps.prop16 = event.detail.articleversionnumber;
        //salesforce URLname: prop28
        dataProps.prop28 = event.detail.urlname;
        // category
        dataProps.prop34 = event.detail.category;
        handleAdobeData(dataProps, 'page');

        var link = document.createElement('meta');
        link.setAttribute('name', 'og:title');
        link.content = event.detail.title;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);

        link = document.createElement('meta');
        link.setAttribute('name', 'og:description');
        link.content = event.detail.summary;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);

        link = document.createElement('meta');
        link.setAttribute('name', 'description');
        link.content = event.detail.summary;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);

        //<meta name="robots" content="noindex">
        if (event.detail.suppress) {
            link = document.createElement('meta');
            link.setAttribute('name', 'robots');
            link.content = "noindex";
            link.setAttribute("data-src", "js");
            document.getElementsByTagName('head')[0].appendChild(link);
        }

        link = document.createElement('link');
        link.setAttribute('rel', 'canonical');
        link.href = document.URL;
        link.setAttribute("data-src", "js");
        document.getElementsByTagName('head')[0].appendChild(link);
    }
});
// END SF events

// BEGIN OneTrust related code
function deleteAdobeCookies() {
    let allCookies = document.cookie.split(';')

    allCookies.forEach(e => {
        if (e.trim().startsWith('s_')) {
            let cookieName = e.split('=')[0].trim();
            console.log(cookieName);
            deleteCookie(cookieName);
        }
    });

}

function getCookie(cookieName) {
    let allCookies = document.cookie.split(';');
    let cookieVal = '';
    for (var i = 0; i < allCookies.length; i++) {
        if (allCookies[i].trim().startsWith(cookieName)) {
            cookieVal = allCookies[i].split('=')[1].trim();
            console.log('found cookie: ' + cookieName + ' with val: ' + cookieVal);
            return cookieVal;
        }
    }
    return null;
}

// Delete a cookie, by name
function deleteCookie(cookieName) {
    let domainParts = window.location.origin.split('.');
    let domain = '.' + domainParts[domainParts.length-2] + '.' + domainParts[domainParts.length-1];
    document.cookie = cookieName + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain="+domain;
}

function getOneTrustGroupValue(group) {

    let OptOutStatus = decodeURIComponent(document.cookie)
        .split("; ")
        .find((e) => e.startsWith("OptanonConsent"))
        ?.split("&")
        .find((e) => e.startsWith("groups"))
        .split("=")[1]
        .split(",")
        .find((e) => e.startsWith(group))
        ?.split(":");
    
    return OptOutStatus[1];
}

function hasUserOptedOut() {
    
    let optOutValue = getOneTrustGroupValue("4"); // 4 is opt out flag
    
    console.log('page-init: onetrust: opt out value: ' + optOutValue);

    if (optOutValue === "1" || window.sessionStorage.getItem('LSKey[c]region') === 'APAC' || window.sessionStorage.getItem('LSKey[c]region') === 'LATAM') {
        console.log('page-init: onetrust: User has opted in. load adobe library');
        window.sessionStorage.setItem('LSKey[c]allowAdobe', 'allow');
        console.log('page-init: onetrust: are dataProps set? ', dataProps);
        handleAdobeData(dataProps, 'onetrust');
    } else {
        console.log('page-init: onetrust: User has opted out. ');
        window.sessionStorage.setItem('LSKey[c]allowAdobe', 'reject');
        deleteAdobeCookies();
    }         
}

function OptanonWrapper() { 
    console.log('page-init: onetrust: Onetrust OptanonWrapper');

    setTimeout(() => {
        hasUserOptedOut();
    }, 10);

    OneTrust.OnConsentChanged(hasUserOptedOut);
}

document.addEventListener('privacychoice', function () {
    console.log("onetrust: Received one trust event.");
    OneTrust.ToggleInfoDisplay();
});
// END OneTrust

// BEGIN Adobe Related

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}
//instantiate tracking object with report suite ID and set global params in object
function handleAdobeData(localDataProps, type) {
    
    if (window.sessionStorage.getItem('LSKey[c]allowAdobe') == 'allow') {

        if (!isEmpty(localDataProps) && ((type=='onetrust' && localDataProps.pageName !== undefined) || type=='page' || type=='event')) {

            let aaPromise = new Promise(function (resolve, reject) {
            
                console.log('page-init: handleAdobeData: do we need to instantiate s object?', s === null);
    
                if (s === null) {
                    let aascripttag = document.createElement('script');
                    aascripttag.async = false;
                    aascripttag.src = SITE_DOMAIN + '/sfsites/c/resource/Adobe_AppMeasurement_Disney?s='+Date.now();
                    console.log('page-init: handleAdobeData: src: ' + aascripttag.src);
                    document.head.insertBefore(aascripttag, document.head.children[0]);
            
                    aascripttag.addEventListener('load', () => {
    
                        console.log('page-init: handleAdobeData: loaded. setting global props');
                        s = s_gi(SUITE_NAME);
                        //designate tracking server
                        s.trackingServer = TRACKING_SERVER;
    
                        s.registerPostTrackCallback(function(){
                            dataProps = {};
                            s.clearVars();
                            console.log('page-init: handleAdobeData: cleared data post s.t(): ', s);
                        });
                        
                        resolve();
                    });
                } else {
                    console.log('page-init: handleAdobeData: already loaded. resolve promise');
                    resolve();
                }
                
            });
    
            aaPromise.then(() => {
                console.log('page-init: handleAdobeData: promise resolved');
    
                //Previous Page URL: prop3
                let originalReferrer = window.sessionStorage.getItem('LSKey[c]originalReferrer');
                console.log('page-init: handleAdobeData: original referrer value: ', originalReferrer);
                if (originalReferrer) {
                    console.log('page-init: handleAdobeData: using original referrer after redirect : ', originalReferrer);
                    s.referrer = originalReferrer;
                    s.prop3 = originalReferrer;
                    window.sessionStorage.removeItem('LSKey[c]originalReferrer');
                } else {
                    let currentReferrer = window.sessionStorage.getItem('LSKey[c]currentReferrer');
                    if (currentReferrer) {
                        s.referrer = currentReferrer;
                        s.prop3 = currentReferrer;
                    } else {
                        s.referrer = document.referrer;
                        s.prop3 = document.referrer;
                    }
                    if (type == 'page') {
                        window.sessionStorage.setItem('LSKey[c]currentReferrer', window.location.href);
                    }
                    console.log('page-init: adobe: prop3/referrer: ' + s.prop3); 
                }
    
                //Adobe Suite Name: prop95, evar 95
                s.prop95 = SUITE_NAME;
                s.evar95 = SUITE_NAME;
    
                //Brand (Site Section): prop1, evar3, evar130
                var getdomain = location.host.split('.').reverse();
                var root_domain =  getdomain[1];
                s.prop1 = root_domain;
                s.evar3 = root_domain;
                s.evar130 = root_domain;
    
                //Visitor ID: prop 38
                //Visitor Type: Prop 4 and Evar4
                let visitorId = getCookie('s_fid');
                if (visitorId !== null) {
                    s.prop38 = visitorId;
                }
                let visitorType = getCookie('s_nr');
                if (visitorType !== null) {
                    s.prop4 = visitorType;
                    s.evar4 = visitorType;
                }
                
                // device type / user agent
                s.prop27 = navigator.userAgent;
                s.evar27 = navigator.userAgent;
                
                // always set these props when fired.
                s.prop2 = window.location.href;
                s.prop31 = window.sessionStorage.getItem('LSKey[c]language');
                s.prop32 = window.sessionStorage.getItem('LSKey[c]countryName');
    
                console.log('page-init: handleAdobeData: localDataProps are set: ', localDataProps);
                for (const [key, value] of Object.entries(localDataProps)) {
                    console.log('page-init: handleAdobeData: set s prop from dataProps: ' + key + ' - ' + value);
                    if (key.startsWith('event')) {
                        s.events = key;
                    } else {
                        s[key] = value;
                    }
                }
    
                console.log('page-init: handleAdobeData: data pre s.t(): ', s);
                s.t();
    
            }).catch(() => {
                console.log('page-init: handleAdobeData: promise rejected');
            });

        }
        
    }
}

function clearAdobeVars() {
    for (const [key, value] of Object.entries(dataProps)) {
        s[key] = undefined;
    }
    dataProps = {};
    console.log('page-init: handleAdobeData: cleared data post s.t(): ', s);
}

document.addEventListener('sendadobeevent', function (event) {

    let eventDataProps = {};

    console.log('adobe: event recieved from click: ', JSON.stringify(event.detail));
    for (const [key, value] of Object.entries(event.detail.params)) {
        eventDataProps[key] = value;
    }
    handleAdobeData(eventDataProps, 'event');

});
// END Adobe

function verifySessionStorage() {
    let ipSession = window.sessionStorage.getItem('LSKey[c]ip');
    let countrySession = window.sessionStorage.getItem('LSKey[c]country');
    let countryNameSession = window.sessionStorage.getItem('LSKey[c]countryName');
    let langSession = window.sessionStorage.getItem('LSKey[c]language');
    let regionSession = window.sessionStorage.getItem('LSKey[c]region');
    let mdSession =  window.sessionStorage.getItem('LSKey[c]metadataName');

    let ipLocal = window.localStorage.getItem('LSKey[c]ip');
    let countryLocal = window.localStorage.getItem('LSKey[c]country');
    let countryNameLocal = window.localStorage.getItem('LSKey[c]countryName');
    let langLocal = window.localStorage.getItem('LSKey[c]language');
    let regionLocal = window.localStorage.getItem('LSKey[c]region');
    let mdLocal =  window.localStorage.getItem('LSKey[c]metadataName');

    if (ipSession && countrySession && countryNameSession && langSession && regionSession && mdSession) {
        return 'session-exists';
    }

    if (ipLocal && countryLocal && countryNameLocal && langLocal && regionLocal && mdLocal) {
        window.sessionStorage.setItem('LSKey[c]country', window.localStorage.getItem('LSKey[c]country'));
        window.sessionStorage.setItem('LSKey[c]countryName', window.localStorage.getItem('LSKey[c]countryName'));
        window.sessionStorage.setItem('LSKey[c]metadataName', window.localStorage.getItem('LSKey[c]metadataName'));
        window.sessionStorage.setItem('LSKey[c]language', window.localStorage.getItem('LSKey[c]language'));
        window.sessionStorage.setItem('LSKey[c]region', window.localStorage.getItem('LSKey[c]region'));
        window.sessionStorage.setItem('LSKey[c]ip', window.localStorage.getItem('LSKey[c]ip'));

        return 'local-exists';
    }

    return 'create-session';
}

function setSession(repos) {
    window.sessionStorage.setItem('LSKey[c]ip', repos.ipAddress);
    window.sessionStorage.setItem('LSKey[c]region', repos.region);
    window.sessionStorage.setItem('LSKey[c]country', repos.countryCode);
    window.sessionStorage.setItem('LSKey[c]countryName', repos.countryName);
    window.sessionStorage.setItem('LSKey[c]metadataName', repos.masterLabel);
    window.sessionStorage.setItem('LSKey[c]language', repos.languageCode);
    window.localStorage.setItem('LSKey[c]ip', repos.ipAddress);
    window.localStorage.setItem('LSKey[c]region', repos.region);
    window.localStorage.setItem('LSKey[c]country', repos.countryCode);
    window.localStorage.setItem('LSKey[c]countryName', repos.countryName);
    window.localStorage.setItem('LSKey[c]metadataName', repos.masterLabel);
    window.localStorage.setItem('LSKey[c]language', repos.languageCode);
}

function initializeSession() {
    let documentURL = document.URL;
    let index = documentURL.indexOf('.com');
    let baseURL = documentURL.substring(0, index + 4);

    let communityName = 'disneyplushelpcenter';
    let communityNameVforce = 'disneyplushelpcentervforcesite';
    let serviceURL = SITE_DOMAIN + '/' + communityNameVforce;

    if(documentURL.indexOf(communityName) == -1) {
        communityName = "";
        communityNameVforce = "";
        serviceURL = baseURL;
    } else {
        baseURL += '/' + communityName;
    }
    
    //Rohit 12042023 - VXSS-370
    /*
    let articleIndex = documentURL.indexOf("article/");
    let storageLanguage = window.localStorage.getItem('LSKey[c]language');
    if (storageLanguage) {
        storageLanguage = storageLanguage.substring(0,2).toLowerCase();
    }
    let storageCountry = window.localStorage.getItem('LSKey[c]country');
    if (storageCountry) {
        storageCountry = storageCountry.toLowerCase();
    }
    console.log("pre storageLanguage = " + storageLanguage);
    console.log("pre storageCountry = " + storageCountry);
    
    let isArticle = false;
    if (articleIndex != -1) {
        const regex = /-[a-z]{2}-[a-z]{2}/gm;
        let urlName = documentURL.substring(articleIndex + 8);
        let result = urlName.match(regex);
        console.log(JSON.stringify(result));
        if (result) {
            if (storageLanguage != result[0].substring(1,3)) {
                console.log('page-init: article page: URL language doesnt match session: ' + storageLanguage);
                storageLanguage = result[0].substring(1,3);
                isArticle = true;
            }
            if (storageCountry != result[0].substring(4,6)) {
                console.log('page-init: article page: URL country doesnt match session: ' + storageCountry);
                storageCountry = result[0].substring(4,6);
                isArticle = true;
            }
        }
    }
    console.log("documentURL = " + documentURL);
    console.log("storageLanguage = " + storageLanguage);
    console.log("storageCountry = " + storageCountry);
    console.log("isArticle = " + isArticle);
    */
    // VXSS-370

    let ipPromise = new Promise(function(resolve, reject) {
        
       // if (!isArticle) {  // VXSS-370 - remove conditional if not using 370

            let response = verifySessionStorage();
            if(response == 'session-exists'){
                console.log('page-init: initializeSession: sessionStorage already set');
                return resolve();
            } else if (response == 'local-exists') {
                console.log('page-init: initializeSession: localStorage already set. copy to sessionStorage');
                return resolve();
            }
        //}

        let calloutURI = serviceURL + '/services/apexrest/IPService?brand=Disney';
        if(isCrawlerBot()) {
            // this version of the callout for bots only to get metadata record for locale
            calloutURI += '&iscrawlerbot=true&locale=' + getLocale();
            console.log('page-init: crawlerbot TRUE: ' + calloutURI);
            fetch(calloutURI, {
                method: "GET"
            })
            .then((response) => response.json())
                .then(repos => {
                    console.log("page-init: ip service callback json for bot: ", repos);
                    window.sessionStorage.setItem('LSKey[c]ip', repos.ipAddress);
                    window.localStorage.setItem('LSKey[c]ip', repos.ipAddress);
                    if (repos.isAvailable) {
                        setSession(repos);
                        console.log("page-init: reload page: ", document.URL);
                        window.open(document.URL, "_self");
                    } else {
                        window.sessionStorage.setItem('LSKey[c]country', 'US');
                        window.sessionStorage.setItem('LSKey[c]countryName', 'United States');
                        window.sessionStorage.setItem('LSKey[c]metadataName', 'United_States_English');
                        window.sessionStorage.setItem('LSKey[c]language', 'en-US');
                        window.sessionStorage.setItem('LSKey[c]region', 'NA');
                        window.localStorage.setItem('LSKey[c]country', 'US');
                        window.localStorage.setItem('LSKey[c]countryName', 'United States');
                        window.localStorage.setItem('LSKey[c]metadataName', 'United_States_English');
                        window.localStorage.setItem('LSKey[c]language', 'en-US');
                        window.localStorage.setItem('LSKey[c]region', 'NA');
                        console.log("page-init: reload page: ", document.URL);
                        window.open(document.URL, "_self");
                    }
                })
                .catch(error => {
                    reject();
                    console.error("error1:" + error);
                })
            .catch(error => {
                reject();
                console.error("error2:" + error);
            });
        } else {

            //VXSS-370
            /*
            if(isArticle) {
                calloutURI += '&isarticle=true&language=' + storageLanguage + '&country=' + storageCountry;
            } 
            */
            //VXSS-370
            
            console.log('page-init: crawlerbot FALSE: ' + calloutURI);
            fetch(calloutURI, {
                method: "GET"
            })
            .then((response) => response.json())
                .then(repos => {
                    console.log("page-init: ip service callback json: ", repos);

                    if(!repos.isAvailable){
                        console.log("page-init: not available");
                        window.open(repos.notAvailableURL, '_self');
                        return resolve();
                    }

                    // if allowAdobe doesn't already exist, create it as false
                    if (!window.sessionStorage.getItem('LSKey[c]allowAdobe')) {
                        if (repos.region == 'APAC' || repos.region == 'LATAM') {
                            window.sessionStorage.setItem('LSKey[c]allowAdobe', 'allow');
                        } else {
                            window.sessionStorage.setItem('LSKey[c]allowAdobe', 'reject');
                        }
                    }
                
                    setSession(repos);

                    let languageValue = repos.languageCode;
                    if (languageValue == "en-US") {
                        languageValue = "";
                        document.cookie = "PreferredLanguage0DM8L000000Gn4tWAC=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
                    } else {
                        languageValue = "/" + languageValue;
                    }

                    let pageName = documentURL.substring(documentURL.lastIndexOf('/'));
                    let subPath = documentURL.indexOf("article") != -1 ? "/article" : "";
                    //console.log('pagename: ' + pageName + ' subpath: ' + subPath);
                    if (documentURL.indexOf("contact-us") != -1 && pageName != '/contact-us') {
                        subPath = '/contact-us';
                    } else if (documentURL.indexOf("category") != -1 && pageName != '/category') {
                        subPath = '/category';
                    }
                    console.log('subPath updated: ' + subPath);
                    if (pageName == null) {
                        pageName = "";
                    }

                    var url = baseURL + languageValue + subPath + pageName ;
                    console.log("page-init: reload page: ", url);
                    window.sessionStorage.setItem('LSKey[c]originalReferrer', document.referrer);
                    console.log('page-init: reload page: original referrer value: ', document.referrer);
                    window.open(url, "_self");
                })
                .catch(error => {
                    reject();
                    console.error("page-init: error1:" + error);
                })
            .catch(error => {
                reject();
                console.error("page-init: error2:" + error);
            });
        } 
    });

    ipPromise.then(() => {
        console.log('page-init: initializeSession promise resolved');
        initiateNice();
    });
    ipPromise.catch(() => {
        console.log('page-init: initializeSession promise REJECTED');
    })
    
}

//this call kicks off everything needed on initial page load
console.log('page-init: call initializeSession');
initializeSession();