/* common functions for all DTCVX brand LWR sites */

function isEmpty(value) {
    if (value == undefined || value == null || value == "") {
        return true;
    }
    return false;
    //return (value == undefined || value == null || value == "");
}

function isObjectEmpty(obj) {
    return Object.keys(obj).length === 0;
}

function isCrawlerBot() {
    const botPattern = "(Googlebot|Googlebot-Mobile|Googlebot-Image|Google-InspectionTool|Google favicon|Mediapartners-Google|bingbot|Commons-HttpClient|Python-urllib|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|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|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|Facebot|OrangeBot|memorybot|AdvBot|BUbiNG|Qwantify|archive.org_bot|Applebot|TweetmemeBot|crawler4j|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 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 getNiceStatus() {
    //RECOVERING
    let storageKey = "-___chat";    
    for (i = 0; i < localStorage.length; i++)   {

        if (localStorage.key(i).includes(storageKey)) {

            let sessionStatus = JSON.parse(localStorage.getItem(localStorage.key(i)));
            console.log('page-init: chat-log: getNiceStatus = ' + sessionStatus.session.status);

            return sessionStatus.session.status;
        }

    };
}


function noPageView() {
    let val = false;
    const pageEvents = ['event32','event33','event34'];
    if (s.events !== undefined) {
        if (!pageEvents.includes(s.events)) {
            val = true;
        }
    }
    if (s.prop5 == 'Anchor Link' || s.prop21 != null) {
        val = true;
    }

    return val;
}

function suppressAdobe() {

    let suppressTag = document.querySelector('meta[name="suppressadobe"]');

    console.log('handleAdobe: SUPPRESS : ' + suppressTag);

    if (suppressTag != null && suppressTag.content == "true") {
        return true;
    } else {
        return false;
    }
}


function checkQueryParams() {
    
    const params = new URLSearchParams(window.location.search);
    // make all keys lowercase
    const searchParams = new URLSearchParams(
        Array.from(params, ([key, value]) => [key.toLowerCase(), value])
    );

    //VXSS-436 - campaign tracking
    if (searchParams.has('utm_campaign')) {
        dataProps.prop9 = searchParams.get('utm_campaign');
        dataProps.evar9 = searchParams.get('utm_campaign');
    }
    if (searchParams.has('utm_source')) {
        dataProps.prop23 = searchParams.get('utm_source');
        dataProps.evar23 = searchParams.get('utm_source');
    }
    if (searchParams.has('utm_medium')) {
        dataProps.prop24 = searchParams.get('utm_medium');
        dataProps.evar24 = searchParams.get('utm_medium');
    }
    if (searchParams.has('utm_content')) {
        dataProps.prop30 = searchParams.get('utm_content');
        dataProps.evar30 = searchParams.get('utm_content');
    }

    //VXSS-970 - chat link params
    if (searchParams.has('va_id')) {
        dataProps.prop8 = searchParams.get('va_id');
        dataProps.evar8 = searchParams.get('va_id');
    }
}

function clearAdobeVars() {

    // instead, lets clear dataProps and keep just those that should persist (and might not be getting set by events)
    let tempProps = dataProps;
    dataProps = {};
    dataProps.pageName = tempProps.pageName;
    dataProps.prop13 = tempProps.prop13;
    dataProps.prop14 = tempProps.prop14;
    dataProps.prop39 = tempProps.prop39;
    dataProps.evar74 = tempProps.evar74;
    dataProps.prop27 = tempProps.prop27;
    dataProps.evar27 = tempProps.evar27;

    console.log('page-init: handleAdobeData: custom adobe var clear');
}

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 primSession =  window.sessionStorage.getItem('LSKey[c]primaryLocale');

    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');
    let primLocal =  window.localStorage.getItem('LSKey[c]primaryLocale');

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

    if (ipLocal && countryLocal && countryNameLocal && langLocal && regionLocal && mdLocal && primLocal) {
        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'));
        window.sessionStorage.setItem('LSKey[c]primaryLocale', window.localStorage.getItem('LSKey[c]primaryLocale'));

        if (window.localStorage.getItem('LSKey[c]allowAdobe')) {
            window.sessionStorage.setItem('LSKey[c]allowAdobe', window.localStorage.getItem('LSKey[c]allowAdobe'));
        }

        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.sessionStorage.setItem('LSKey[c]primaryLocale', repos.primaryLocale);
    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);
    window.localStorage.setItem('LSKey[c]primaryLocale', repos.primaryLocale);
}

const getBrowserName = () => {
    let browserInfo = navigator.userAgent;
    let browser;
    if (browserInfo.includes('Opera') || browserInfo.includes('Opr')) {
      browser = 'Opera';
    } else if (browserInfo.includes('Edg')) {
      browser = 'Edge';
    } else if (browserInfo.includes('Chrome')) {
      browser = 'Chrome';
    } else if (browserInfo.includes('Safari')) {
      browser = 'Safari';
    } else if (browserInfo.includes('Firefox')) {
      browser = 'Firefox'
    } else {
      browser = 'unknown'
    }
    return browser;
}

const beforeUnloadHandler = (event) => {

    console.log('beforeunload handler fired - where does this happen compared to originalReferrer?');
    
    let eventDataProps = {};

    getPercentPageViewed();

    if (window.sessionStorage.getItem('LSKey[c]firstPage') == 'true'){
        eventDataProps.prop21 = window._ppvHighestPercentViewed;
        eventDataProps.evar21 = window._ppvHighestPercentViewed;
    } else {
        eventDataProps.prop40 = window._ppvHighestPercentViewed;
        eventDataProps.prop41 = window._ppvHighestPixelsSeen;
    }
    
    
    eventDataProps.pageName = dataProps.pageName;
    eventDataProps.prop13 = dataProps.prop13;
    eventDataProps.prop14 = dataProps.prop14;
    eventDataProps.prop39 = dataProps.prop39;
    eventDataProps.evar74 = dataProps.evar74;
    eventDataProps.prop27 = dataProps.prop27;
    eventDataProps.evar27 = dataProps.evar27;   

    console.log('handleAdobeData: beforeunload event');
    handleAdobeData(eventDataProps, 'event');
    
    // Recommended
    //event.preventDefault();
    // Included for legacy support, e.g. Chrome/Edge < 119
    //event.returnValue = true;    
};

function getPercentPageViewed() {
    //empty impl
}