var availiabilityapi = "";
var loaded = 0;
var isConnected = false;
var isOnline = false;
var isHeaderClick = false;
var bannerConfig;
var analyticsSiteName;
var embeddedSericeDeploymentName;

function getKeyword(site_url){
    let key_value = '';
    const mapped_site_to_keyword = new Map();
    mapped_site_to_keyword.set('namrinfo'         ,'ELOQUA_NAMRINFO');
    mapped_site_to_keyword.set('eloqua'           ,'ELOQUAMSI');
    mapped_site_to_keyword.set('blog'             ,'NAMSI');
    mapped_site_to_keyword.set('content/static/sr','NAMSI');
    mapped_site_to_keyword.set('shop'             ,'SHOP');
    mapped_site_to_keyword.set('watchguard'       ,'WATCHGUARD');
    mapped_site_to_keyword.set('partner-central'  ,'NAPC');

    for (const ky of mapped_site_to_keyword.keys()) {
        if(site_url.includes(ky)){
            console.log(mapped_site_to_keyword.get(ky));
            key_value = mapped_site_to_keyword.get(ky);
            break;
        }
    }
    return key_value;
}

function getNormalizedUserType(user_type){
    const usertype_map = new Map();
    usertype_map.set('PARTNER'  ,'PARTNER');
    usertype_map.set('CONSUMER' ,'CONSUMER');
    usertype_map.set('DIRECT'   ,'CUSTOMER');
    usertype_map.set('SALES'    ,'EMPLOYEE');
    usertype_map.set('INTERNAL' ,'EMPLOYEE');
    usertype_map.set('DEFAULT'  ,'CONSUMER');
    return usertype_map.get(user_type);
}

function getNormalizedRegion(region){
    const region_map = new Map();
    region_map.set('NA'           ,'NA');
    region_map.set('NAMR'         ,'NA');
    region_map.set('NORTH AMERICA','NA');
    region_map.set('EA'           ,'EA');
    region_map.set('EMEA'         ,'EA');
    region_map.set('LA'           ,'LA');
    region_map.set('LACR'         ,'LA');
    region_map.set('AP'           ,'AP');
    region_map.set('APAC'         ,'AP');
    region_map.set('ANZ'          ,'AP');
    region_map.set('ASIA PACIFIC' ,'AP');
    region_map.set('EUROPE'       ,'EA');
    region_map.set('LATIN AMERICA','LA');
    region_map.set('MIDDLE EAST'  ,'EA');
    return region_map.get(region);
}

function getCountryMapRegion(country){
    let country_region_map = new Map();
    country_region_map.set('AE', 'EA'); // UNITED ARAB EMIRATES
    country_region_map.set('AR', 'LA'); // ARGENTINA
    country_region_map.set('AU', 'AP'); // AUSTRALIA
    country_region_map.set('BR', 'LA'); // BRAZIL
    country_region_map.set('CA', 'NA'); // CANADA
    country_region_map.set('CL', 'LA'); // CHILE
    country_region_map.set('CN', 'AP'); // CHINA
    country_region_map.set('CO', 'LA'); // COLOMBIA
    country_region_map.set('DE', 'EA'); // GERMANY
    country_region_map.set('DK', 'EA'); // DENMARK
    country_region_map.set('EC', 'LA'); // ECUADOR
    country_region_map.set('ES', 'EA'); // SPAIN
    country_region_map.set('FR', 'EA'); // FRANCE
    country_region_map.set('GB', 'EA'); // UNITED KINGDOM
    country_region_map.set('ID', 'AP'); // INDONESIA
    country_region_map.set('IL', 'EA'); // ISRAEL
    country_region_map.set('IN', 'AP'); // INDIA
    country_region_map.set('IT', 'EA'); // ITALY
    country_region_map.set('JP', 'AP'); // JAPAN
    country_region_map.set('KP', 'AP'); // DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA
    country_region_map.set('KR', 'AP'); // REPUBLIC OF KOREA
    country_region_map.set('MX', 'LA'); // MEXICO
    country_region_map.set('MY', 'AP'); // MALAYSIA
    country_region_map.set('NL', 'EA'); // NETHERLANDS
    country_region_map.set('NO', 'EA'); // NORWAY
    country_region_map.set('PE', 'LA'); // PERU
    country_region_map.set('PH', 'AP'); // PHILIPPINES
    country_region_map.set('PL', 'EA'); // POLAND
    country_region_map.set('RU', 'EA'); // RUSSIAN FEDERATION
    country_region_map.set('SA', 'AP'); // SAUDI ARABIA
    country_region_map.set('SG', 'AP'); // SINGAPORE
    country_region_map.set('TW', 'AP'); // TAIWAN
    country_region_map.set('UA', 'EA'); // UKRAINE
    country_region_map.set('US', 'NA'); // UNITED STATES
    country_region_map.set('VN', 'AP'); // VIETNAM
    country_region_map.set('ZA', 'EA'); // SOUTH AFRICA

    country_region_map.set('419', 'LA'); // LOCALE CODE
    country_region_map.set('XA', 'AP'); // LOCALE CODE
    country_region_map.set('XC', 'EA'); // LOCALE CODE
    country_region_map.set('XL', 'LA'); // LOCALE CODE
    country_region_map.set('XP', 'AP'); // LOCALE CODE
    country_region_map.set('XU', 'EA'); // LOCALE CODE

    return country_region_map.get(country);
}

function setEmptyOrValue(field_value){
    field_value = (field_value == null || field_value == "null") ? "" : field_value;
    return field_value;
}

function getParameterValue(attribute_value){
    return Boolean(document.getElementById("msi-uinfo")) ? document.getElementById("msi-uinfo").getAttribute(attribute_value) : '';
}

function getLoginId(){
    let login_id = getParameterValue("data-ulogin");
    if(!Boolean(login_id)){
        login_id = getParameterValue("data-uid")
    }
    return setEmptyOrValue(login_id);
}

function getLocale(){
    var locale_value = getParameterValue("data-ulocale");
    if(!Boolean(locale_value)){
        locale_value = utag_data["locale"];
    }
    return setEmptyOrValue(locale_value);
}

function getFirstName(){
    let first_name = getParameterValue("data-ufirstname")
    if(!Boolean(first_name)){
        first_name = getCookie('first_name');
    }
    return setEmptyOrValue(first_name);
}

function getLastName(){
    let last_name = getParameterValue("data-ulastname");
    if(!Boolean(last_name)){
        last_name = getCookie('last_name');
    }
    return setEmptyOrValue(last_name);
}

function getEmail(){
    let emailVal = getParameterValue("data-uemail")
    return setEmptyOrValue(emailVal);
}

function getUserType(){
    let user_type = getParameterValue("data-utype");
    if(!Boolean(user_type)){
        user_type = getCookie('usertype');
    }

    if(Boolean(user_type)){
        user_type = getNormalizedUserType(user_type);
    }
    return setEmptyOrValue(user_type);
}

function getLandingAppName(){
    let landin_app_name = getParameterValue("data-ulandingapp");
    return setEmptyOrValue(landin_app_name);
}

function getCountry(){
	let country_value = getParameterValue("data-ucountry");
	if(!Boolean(country_value)){
		country_value = navigator.language.includes("-") ? navigator.language.split('-')[1] : '';
	}
	if(!Boolean(country_value)){
		country_value = navigator.language.includes("_") ? navigator.language.split('_')[1] : '';
	}
	return setEmptyOrValue(country_value.toUpperCase());
}

function getRegion(){
	let region = getParameterValue("data-uregion");
	if(!Boolean(region)){
		region = getCookie('region');
	}
	if(!Boolean(region)){
		let locale = getLocale();
		if(Boolean(locale)){
			region = getCountryMapRegion(locale.substring(3).toUpperCase());
		}
	}
	if(!Boolean(region)){
		let country_value = getCountry();
		if(Boolean(country_value)){
			region = getCountryMapRegion(country_value);
		}
	}
	if(!Boolean(region)){
		region = 'NA';
	}
	return getNormalizedRegion(region.toUpperCase());
}

function getCookie(name) {
    let cookie = {};
    document.cookie.split(';').forEach(function(el) {
        let [k,v] = el.split('=');
        cookie[k.trim()] = v;
    })
    return cookie[name];
}

function eraseCookie(name) {
    document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

if(getCookie("IsBannerLoaded") == undefined){
    document.cookie = "IsBannerLoaded=1;Domain=motorolasolutions.com;";
}

/*** This is the animation function based on isConnected parameter it will apply or remove animation****/
function swapeAnimationClass(isConnected){
    if(Boolean(isConnected)){
        $(".embeddedServiceSidebar .embeddedServiceSidebarMinimizedDefaultUI").addClass("messageAnimation");
    }
    else{
        $(".embeddedServiceSidebar .embeddedServiceSidebarMinimizedDefaultUI").removeClass("messageAnimation");
        $("#new-message").hide();
    }
}

/*** show the banner after configure time once agent in online ***/
function openBannerPopup(bannerConfig){
    console.log('Banner Method Invoked');
    if (getCookie("IsBannerLoaded") === '1' && loaded == 0 && !$('.embeddedServiceSidebarMinimizedDefaultUI')[0]) {
        let site_user_type = Boolean(getUserType()) ? getUserType() : 'GUEST';
        bannerConfig = JSON.parse(bannerConfig);
        console.log('User Type :'+site_user_type);
        console.log(bannerConfig);
        for(let i = 0;i<bannerConfig.length;i++){
            if(Boolean(bannerConfig[i][site_user_type])){
                bannerConfig = bannerConfig[i][site_user_type];
            }
        }
        console.log(bannerConfig);
        if(Boolean(bannerConfig.enabled)){
            setTimeout(function () {
            //if (getCookie("IsBannerLoaded") === '1' && loaded == 0 && !$('.embeddedServiceSidebarMinimizedDefaultUI')[0]) {
                document.getElementById('sfchatbanner').classList.add('active');
                loaded = 1;
                //proactive chat event
                reusableAnalyticsEvent('view','chat','content impression','proactive chat','@proactive chat impression','1','public','','proactive chat popup','9');
                eraseCookie("IsBannerLoaded");
                document.cookie = "IsBannerLoaded=0;Domain=motorolasolutions.com;";
            //}
            },bannerConfig.start_delay_time_ms);
        }
    }
}

/* Description : onload call the rest service using endpoint  through ajax and get the response(respective locale specific custom meta data record) from rest service
*  endpoint  : endpoint url of salesforce instance
*  parameters : locale
*  reponse : respective locale specific custom meta data record (configResp)
*/
$(document).ready(function () {
    var siteUrl = window.location.href;
    var moca_keyword = getKeyword(siteUrl);
    var locale  = Boolean(getLocale()) ? getLocale() : '_DEFAULT';
    var country = Boolean(getCountry()) ? getCountry() : '_DEFAULT';
    var region  = Boolean(getRegion()) ? getRegion() : '';

    var site_end_point_url = "https://partnerapply.motorolasolutions.com/services/apexrest/einsteinconfigurl?localename="+locale+'&keyword='+moca_keyword+'&region='+region+'&country='+country;
    console.log('****************************************************Site parms start**************************************************************************');
    console.log('keyword=============>'+moca_keyword);
    console.log('locale==============>'+locale);
    console.log('country=============>'+country);
    console.log('region==============>'+region);
    console.log('getLoginId()========>'+getLoginId());
    console.log('getFirstName()======>'+getFirstName());
    console.log('getLastName()=======>'+getLastName());
    console.log('getEmail()==========>'+getEmail());
    console.log('getUserType()=======>'+getUserType());
    console.log('getLandingAppName()=>'+getLandingAppName());
    console.log('siteurl=============>'+site_end_point_url);
    console.log('***************************************************Site parms end***************************************************************************');

    function buildPrechatDataMap(){
        var dataMap = new Map();
        let queryString = new URLSearchParams(location.search);

        //search from URL parameters
        for (let pair of queryString.entries()) {
            var param = pair[0];
            var value = pair[1];
            //tn, fn, sc, sn
            if(param == 'tn'){
                dataMap.set('technologyName',value);
            }else if(param == 'fn'){
                dataMap.set('familyName',value);
            }else if(param == 'sc'){
                dataMap.set('serviceCode',value);
            }else if(param == 'sn'){
                dataMap.set('serialNumber',value);
            }
        }
        //search cookies
        dataMap = checkCookies(dataMap);

        //Search URL path
        dataMap = checkUrlPath(dataMap);
        return dataMap;
    }

    function checkUrlPath(dataMap){
        var urlSegment = location.pathname.split('getstarted/');
        if(urlSegment.length==1){
            return dataMap;
        }else{
            var pathArray = urlSegment[1].split('/');
            if(dataMap.get('technologyName') == null || dataMap.get('technologyName') == ''){
                dataMap.set('technologyName',pathArray[0]);
            }
            if(dataMap.get('familyName') == null || dataMap.get('familyName') == ''){
                dataMap.set('familyName',pathArray[1]);
            }
        }
        return dataMap;
    }

    function checkCookies(dataMap) {
        var cookieNames = [
            'prod_technology_name',
            'prod_family_name',
            'prod_service_code',
            'prod_serial_number'
        ];
        var cookieToPrechatMap = new Map();
        cookieToPrechatMap.set('prod_technology_name','technologyName');
        cookieToPrechatMap.set('prod_family_name','familyName');
        cookieToPrechatMap.set('prod_service_code','serviceCode');
        cookieToPrechatMap.set('prod_serial_number','serialNumber');

        let decodedCookie = decodeURIComponent(document.cookie);
        let ca = decodedCookie.split(';');

        for(let i = 0; i <ca.length; i++) {
            let c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            var pair = c.split('=');
            var name = pair[0];
            var val = pair[1];
            if(cookieNames.indexOf(name) >= 0){
                var prechatVarName = cookieToPrechatMap.get(name);
                if(dataMap.get(prechatVarName)){
                    if(dataMap.get(prechatVarName == '')){
                        dataMap.set(prechatVarName,val);
                    }
                }else{
                    dataMap.set(prechatVarName,val);
                }
            }
        }
        return dataMap;
    }

    $.ajax({
        url: site_end_point_url,
        context: document.body,
        success: function (configResp) {
            let bannerText = configResp.Banner_Text__c;
            bannerConfig = configResp.Popup_Banner_Config__c;
            embeddedSericeDeploymentName = configResp.Embedded_Service_Deployment_Name__c;
            $('#bannerId').html(bannerText);
            availiabilityapi = configResp.Live_Agent_Chat_Url__c + '/rest/Visitor/Availability.jsonp?Availability.prefix=Visitor&Availability.ids=[' + configResp.Button_Id__c + ']&callback=embedded_svc.liveAgentAPI.connection.handlePing&deployment_id=' + configResp.Deployment_Id__c + '&org_id=' + configResp.Org_Id__c + '&version='+configResp.Version__c;
            if (Boolean(configResp.isDebug__c)) {
                let entries = Object.entries(configResp);
                console.log(embeddedSericeDeploymentName);
                console.log('keyword=============>'+moca_keyword);
                console.log('locale==============>'+locale);
                console.log('country=============>'+country);
                console.log('region==============>'+region);
                console.log('getLoginId()========>'+getLoginId());
                console.log('getFirstName()======>'+getFirstName());
                console.log('getLastName()=======>'+getLastName());
                console.log('getEmail()==========>'+getEmail());
                console.log('getUserType()=======>'+getUserType());
                console.log('getLandingAppName()=>'+getLandingAppName());
                console.log('siteurl=============>'+site_end_point_url);
                console.log('rows count==========>'+entries.length);
                console.log(availiabilityapi);
                console.table(entries);
            }

            if(!Boolean(configResp.Id)){
                return;
            }

            var isAuthenticated = Boolean(getLoginId()) ? true : false;

            var gaClientId = '';
            if(Boolean(utag_data['cp._ga'])){
                let gaId = utag_data['cp._ga'];
                gaId = gaId.split(".");
                let size = gaId.length;
                if(size == 4){
                    gaClientId = gaId[size-2]+'.'+gaId[size-1];
                }
            }
            else{
                console.log('Not able to get GA ClientId');
            }

            var prechatDataMap = buildPrechatDataMap();
            console.log(prechatDataMap);
            var initESW = function (gslbBaseURL) {
                embedded_svc.settings.chatbotAvatarImgURL = 'https://www.motorolasolutions.com/content/dam/msi/sfchat/brand-mark@3x.png';
                embedded_svc.settings.displayHelpButton = configResp.Is_Display_Chat_Button__c;

                /***  update the below fields on chatTrascript record ***/
                embedded_svc.settings.extraPrechatFormDetails = [
                    {
                        "value": window.location.href,
                        "transcriptFields": ["Source_URL__c"]
                    },
                    {
                        "value": configResp.Site_Language__c,
                        "transcriptFields": ["Language__c"]
                    },
                    {
                        "label": configResp.Last_Name_ChatT__c,
                        "transcriptFields": ["Last_Name__c"]
                    },
                    {
                        "label": configResp.First_Name_ChatT__c,
                        "transcriptFields": ["First_Name__c"]
                    },
                    {
                        "label": configResp.Email_Address_ChatT__c,
                        "transcriptFields": ["Email_Address__c"]
                    },
                    {
                        "value": isAuthenticated,
                        "transcriptFields": ["Is_Authenticated__c"]
                    },
                    {
                        "value": gaClientId,
                        "transcriptFields": ["GA_Client_ID__c"]
                    }
                ];

                if(prechatDataMap.get('technologyName')){
                    embedded_svc.settings.extraPrechatFormDetails.push(
                        {
                            "transcriptFields": ["Product_Technology_Prechat__c"],
                            "value": prechatDataMap.get('technologyName').toUpperCase()
                        }
                    );
                }
                if(prechatDataMap.get('familyName')){
                    embedded_svc.settings.extraPrechatFormDetails.push(
                        {
                            "transcriptFields": ["Product_Family_Prechat__c"],
                            "value": prechatDataMap.get('familyName').capitalize()
                        }
                    );
                }
                if(prechatDataMap.get('serialNumber')){
                    embedded_svc.settings.extraPrechatFormDetails.push(
                        {
                            "transcriptFields": ["Serial_Number_Prechat__c"],
                            "value": prechatDataMap.get('serialNumber')
                        }
                    );
                }
                if(prechatDataMap.get('serviceCode')){
                    embedded_svc.settings.extraPrechatFormDetails.push(
                        {
                            "transcriptFields": ["Service_Code_Prechat__c"],
                            "value": prechatDataMap.get('serviceCode')
                        }
                    );
                }
                embedded_svc.settings.fallbackRouting = [configResp.Button_Id__c];
                embedded_svc.settings.extraPrechatInfo = [{
                    "entityFieldMaps": [{
                        "doCreate": true,
                        "doFind": true,
                        "fieldName": "LastName",
                        "isExactMatch": true,
                        "label": "Last Name"
                    },
                    {
                        "doCreate": true,
                        "doFind": true,
                        "fieldName": "FirstName",
                        "isExactMatch": true,
                        "label": "First Name"
                    },
                    {
                        "doCreate": true,
                        "doFind": true,
                        "fieldName": "Email",
                        "isExactMatch": true,
                        "label": "Email"
                    }],
                    "entityName": "Contact",
                    "showOnCreate": false
                }];

                /*** assign the configResp record field values to all the required parameters in embeded script ***/
                embedded_svc.settings.storageDomain = 'motorolasolutions.com';
                embedded_svc.settings.language = configResp.Site_Language__c;
                embedded_svc.settings.loadingText = configResp.Loading_Text__c;
                embedded_svc.settings.autoOpenPostChat = false;
                embedded_svc.settings.defaultMinimizedText = configResp.Default_Minimized_Text__c;
                embedded_svc.settings.disabledMinimizedText = configResp.Disabled_Minimized_Text__c;
                embedded_svc.settings.enabledFeatures = ['LiveAgent'];
                embedded_svc.settings.entryFeature = 'LiveAgent';

                /***  alternate routing script ***/
                let routingObj;
                if(Boolean(configResp.Url_Key_Set__c)){
                    routingObj = JSON.parse(configResp.Url_Key_Set__c);
                }
                else{
                    routingObj = {};
                }

                if(Object.keys(routingObj).length > 0){
                    let ents = Object.keys(routingObj);
                    let alterButtonId = '';
                    ents.forEach((key) => {
                        if(siteUrl.includes(key)){
                            alterButtonId = routingObj[key];
                        }
                    });

                    embedded_svc.settings.directToButtonRouting = function(dt) {
                        if(Boolean(alterButtonId)){
                            return alterButtonId;
                        }
                    }
                }

                /***  this event fired when agent message some thing to customer ***/
                embedded_svc.addEventHandler("onAgentMessage", function (data) {
                    if ($('#new-message').length === 0) {
                        var $div = $("<span>", {
                            id: "new-message"
                        });
                        $(".embeddedServiceSidebar").append($div);
                        $("#new-message").text(configResp.Display_Text__c);
                    }

                    $("#new-message").show();
                    $('.messageContent').hide();
                    swapeAnimationClass(true);
                });

                /***  this event fired when customer minimize the chat window ***/
                embedded_svc.addEventHandler("afterMinimize", function (data) {
                    swapeAnimationClass(isConnected);
                    $('.messageContent').show();
                });

                /***  this event fired when chat is connected with Agent ***/
                embedded_svc.addEventHandler("onChatEstablished", function (data) {
                    $("#new-message").hide();
                    swapeAnimationClass(true);
                    $('.messageContent').show();
                    isConnected = true;
                    embeddedSericeDeploymentName = 'Einstein';
                });

                embedded_svc.addEventHandler("onChatTransferSuccessful", function (data) {
                    embeddedSericeDeploymentName = 'Agent';
                });

                /***  this event fired when chat is ended by Agent ***/
                embedded_svc.addEventHandler("onChatEndedByAgent", function (data) {
                    swapeAnimationClass(false);
                    $("#new-message").hide();
                    isConnected = false;
                    embeddedSericeDeploymentName = '';
                });

                /***  this event fired when chat is ended by Customer ***/
                embedded_svc.addEventHandler("onChatEndedByChasitor", function (data) {
                    swapeAnimationClass(false);
                    $("#new-message").hide();
                    isConnected = false;
                    embeddedSericeDeploymentName = '';
                });

                /* this event fired when customer maximize the chat window*/
                embedded_svc.addEventHandler("afterMaximize", function (data) {
                    swapeAnimationClass(isConnected);
                    $("#new-message").hide();

                    /* added placeholders texts*/
                    $("#FirstName").attr("placeholder", configResp.First_Name_Place_Holder__c);
                    $("#LastName").attr("placeholder", configResp.Last_Name_Place_Holder__c);
                    $("#Email").attr("placeholder", configResp.Email_Place_Holder__c);

                    /* added privacy statement text, language banner*/
                    if ($('#policy-div').length === 0) {
                        var $div = $("<span>", {
                            id: "policy-div"
                        });
                        // banner code start
                        if (configResp.Is_Banner_Needed__c && $('#banner-div').length === 0) {
                            var $div1 = $("<span>", {
                                id: "banner-div"
                            });
                            $(".fieldList").append($div1);
                            var bannerString = '<div style="background:#fff2cc;border: solid 1px #ffd73a; text-align: center; width: auto; font-size: 12px; border-radius: 3px; color: #000; margin-bottom: 15px; margin-top: 20px; padding: 5px;"><img src="https://www.motorolasolutions.com/content/dam/msi/sfchat/warning-solid-24@3x.png" align="left" height="24px" width="24px" style="float:left;"><div id="languageBannerId">' + configResp.Supported_Language_Banner__c + '</div></div>';
                            $("#banner-div").html(bannerString);
                            $(".fieldList").append($div);
                            var policyUrl = '<a href="' + configResp.Policy_URL__c + '" target ="_blank" style="color:#005EB8;float:center;margin-top:5px;margin-right:10px;font-size:14px;cursor: pointer ;text-decoration: none;" >' + configResp.Privacy_Statement__c + '</a><br/><br/>';
                            $("#policy-div").html(policyUrl);
                        }
                        else {
                            $(".buttonWrapper").prepend($div);
                            var policyUrl = '<a href="' + configResp.Policy_URL__c + '" target ="_blank" style="color:#005EB8;float:center;margin-top:5px;margin-right:10px;font-size:14px;cursor: pointer ;text-decoration: none;" >' + configResp.Privacy_Statement__c + '</a><br/><br/>';
                            $("#policy-div").html(policyUrl);
                        }
                        //banner code end
                        if(isAuthenticated){
                            setTimeout(function () {
                                $("#FirstName").attr('disabled', 'true').css('background-color' , '#E6E9EC');
                                $("#LastName").attr('disabled', 'true').css('background-color' , '#E6E9EC');
                                $("#Email").attr('disabled', 'true').css('background-color' , '#E6E9EC');
                            },500);
                        }
                    }
                });

                embedded_svc.init(
                    configResp.First_Url__c,
                    configResp.Second_Url_Channel__c,
                    gslbBaseURL,
                    configResp.Org_Id__c,
                    configResp.Embedded_Service_Deployment_Name__c, {
                        baseLiveAgentContentURL: configResp.baseLiveAgentContentURL__c,
                        deploymentId: configResp.Deployment_Id__c,
                        buttonId: configResp.Button_Id__c,
                        baseLiveAgentURL: configResp.baseLiveAgentURL__c,
                        eswLiveAgentDevName: configResp.eswLiveAgentDevName__c,
                        isOfflineSupportEnabled: configResp.isOfflineSupportEnabled__c
                    }
                );
            };

            if (!window.embedded_svc) {
                var s = document.createElement('script');
                s.setAttribute('src', configResp.setAttribute_src__c);
                s.onload = function () {
                    initESW(null);
                };
                document.body.appendChild(s);
            }
            else {
                initESW('https://service.force.com');
                /*** once dom is modified from offline to online this method will invoke ***/
                $(document).on('DOMSubtreeModified', '.helpButtonEnabled', function () {
                    isOnline = true;
                    setTimeout(function () {
                        if ($("button").hasClass("helpButtonEnabled") && !($("div").hasClass("messageContent"))) {
                            if (loaded == 0) {
                                openBannerPopup(bannerConfig);
                            }
                        }
                        else {
                            document.getElementById('sfchatbanner').classList.remove('active');
                        }
                    }, 1000)
                })

                /*** once dom is modified from online  to offline this method will invoke ***/
                $(document).on('DOMSubtreeModified', '.helpButtonDisabled', function () {
                    isOnline = false;
                    $(".embeddedServiceHelpButton .helpButton .helpButtonDisabled ").removeClass("messageAnimation");
                    setTimeout(function () {
                        if ($("button").hasClass("helpButtonDisabled") && !($("div").hasClass("messageContent"))) {
                            document.getElementById('sfchatbanner').classList.remove('active');
                        }
                        else {
                            if (loaded == 0) {
                                openBannerPopup(bannerConfig);
                            }
                        }
                    }, 1000)
                })

                /*** added animation if dom contains new message ***/
                $(document).on('DOMSubtreeModified', '.message', function () {
                    var msgLength = $('.message:contains("' + configResp.Check_Text__c + '")').length;
                    if (msgLength == 0) {
                            swapeAnimationClass(false);
                            $("#new-message").hide();
                            $('.messageContent').show();
                    }

                    if ($('.chasitorText')[0]) {
                        swapeAnimationClass(true);
                    }
                    if ($("iframe").hasClass("snapins_postChat")) {
                        swapeAnimationClass(false);
                    }
                });

                $(document).on("click", ".helpButtonEnabled", function (e) {
                    document.getElementById('sfchatbanner').classList.remove('active');
                    var impressioned = "no";
                    if (loaded == 1)
                    impressioned = "yes"
                        if(!Boolean(isHeaderClick)){
                            /** chatFloaterEvent event ***/
                            let addDetails = 'proactive chat popup impressioned: ' + impressioned;
                            reusableAnalyticsEvent('click','chat','button','chat floater','@open chat window','1','public',addDetails,'chat widget','9')
                        }
                    isHeaderClick = false;
                    loaded = 1;

                    /***  get and prepopulate the authenticated site use details to pre chat form ***/
                    if(isAuthenticated){
                        console.log('###in isAuthenticated if statement');
                        let user_first_name = getFirstName();
                        let user_last_lname = getLastName();
                        let user_email = getEmail();

                        console.log('###user_first_name: ' + user_first_name);
                        console.log('###user_last_lname: ' + user_last_lname);
                        console.log('###user_email: ' + user_email);

                        embedded_svc.settings.prepopulatedPrechatFields = {
                            FirstName: user_first_name,
                            LastName: user_last_lname,
                            Email: user_email,
                            Subject: "Hello"
                        };
                    }
                    else{
                        console.log('Unable to get the name');
                    }
                });

                $(document).on("click", ".helpButtonDisabled", function (e) {
                        if (typeof contactUsUrl !== 'undefined') {
                            var contactUsFormUrl = contactUsUrl;
                        }
                        else {
                            var contactUsFormUrl = $(".navbar .ms-button-chat").attr("data-contact-form-url");
                        }
                    /***  offline support floater event ***/
                    reusableAnalyticsEvent('click','','button','offline support floater',contactUsFormUrl,'1','public','','chat widget','9');
                    window.open(contactUsFormUrl, "_self");
                });
            }
        },
        error: function (request, status, errorThrown) {
            console.log(status);
            console.log(errorThrown);
            console.log(request);
        }
    });
});

/*** Close button on Alert ***/
var sfclose = document.getElementById('sfclose');
var sfpop = document.getElementById('sfchatbanner');
if(sfclose){
    sfclose.addEventListener('click', function () {
    reusableAnalyticsEvent('click','chat','button','proactive chat close','@proactive chat close','1','public','','proactive chat popup','9');
    sfpop.classList.remove('active');
    });
}


/***  this is the generic function for all analytics events ***/
function reusableAnalyticsEvent(act,lkCatg,lkType,lkLabel,lkUrl,lkPlace,restr,addDetail,cn,parea){
    window.document.dispatchEvent(
        new CustomEvent(analyticsSiteName,{
            detail: {
                "action": act,
                "data-uet": {
                    "link-category": lkCatg,
                    "link-type": lkType,
                    "link-label": lkLabel,
                    "link-url": lkUrl,
                    "link-place": lkPlace,
                    "restriction": restr,
                    "add-detail": addDetail,
                    "cname": cn,
                    "page-area": parea
                }
            }
        })
    );
}
