(function () {
    var updateAccountUrl = l.UrlUtility.getFullPath("api/contactus/UpdateAccount");
    var trackUrl = l.UrlUtility.getFullPath("api/contactus/track");
    $.extend(window, { AccountFields: ['firstname', 'lastname', 'city', 'state', 'zip', 'phone', 'address'], AccountLock: { defaultChecked: true, disabled: false } });
    var mapFunction = {
        defaultMap: function (data) {
            var mapData = {};
            for (var key in data) {
                if (!data.hasOwnProperty(key))
                    continue;
                if (key == "FirstName") {
                    mapData[key] = data[key];
                    continue;
                }
                if (key == "LastName") {
                    mapData[key] = data[key];
                    continue;
                }
                if (key == "Email") {
                    mapData[key] = data[key];
                    continue;
                }
                if (key == "CompanyName" || key == "Company") {
                    mapData["Company"] = data[key];
                    continue;
                }
                if (key == "Telephone") {
                    mapData["MobilePhone"] = data[key];
                    continue;
                }
                if (key == "City") {
                    mapData[key] = data[key];
                    continue;
                }
                if (key == "PostalCode") {
                    mapData["Zip"] = data[key];
                    continue;
                }
                if (key == "Region") {
                    mapData["Region"] = data[key];
                    continue;
               }
            }
            return mapData;
        },
        callback: function (data) {
            var mapData = mapFunction.defaultMap(data);
            if (data.hasOwnProperty("phone_number") && data["phone_number"]) {
                mapData["MobilePhone"] = data["phone_number"];
            }
            if (data.hasOwnProperty("EMailAddress") && data["EMailAddress"]) {
                mapData["Email"] = data["EMailAddress"];
            }
            return mapData;
        },
        regemail: function (data) {
            var mapData = mapFunction.defaultMap(data);
            if (data.hasOwnProperty("CompleteAddress") && data["CompleteAddress"]) {
                mapData["Address1"] = data["CompleteAddress"];
            }
            return mapData;
        },
        emailwithservice: function (data) {
            var mapData = mapFunction.defaultMap(data);
            if (data.hasOwnProperty("Street2") && data["Street2"]) {
                mapData["Address2"] = data["Street2"];
            }
            if (data.hasOwnProperty("CompleteAddress") && data["CompleteAddress"]) {
                mapData["Address1"] = data["CompleteAddress"];
            }
            if (data.hasOwnProperty("Street") && data["Street"]) {
                mapData["Address1"] = data["Street"];
            }
            return mapData;
        },
        livechat: function (data) {
            var mapData = mapFunction.defaultMap(data);
            if (data.hasOwnProperty("Contact.Name.First") && data["Contact.Name.First"]) {
                mapData["FirstName"] = data["Contact.Name.First"];
            }
            if (data.hasOwnProperty("Contact.Name.Last") && data["Contact.Name.Last"]) {
                mapData["LastName"] = data["Contact.Name.Last"];
            }
            if (data.hasOwnProperty("Incident.CustomFields.c.mobilephone") && data["Incident.CustomFields.c.mobilephone"]) {
                mapData["MobilePhone"] = data["Incident.CustomFields.c.mobilephone"];
            }
            if (data.hasOwnProperty("Incident.CustomFields.c.postcode") && data["Incident.CustomFields.c.postcode"]) {
                mapData["Zip"] = data["Incident.CustomFields.c.postcode"];
            }
            if (data.hasOwnProperty("Incident.CustomFields.c.street2") && data["Incident.CustomFields.c.street2"]) {
                mapData["Address2"] = data["Incident.CustomFields.c.street2"];
            }
            if (data.hasOwnProperty("Incident.CustomFields.c.completeaddress") && data["Incident.CustomFields.c.completeaddress"]) {
                mapData["Address1"] = data["Incident.CustomFields.c.completeaddress"];
            }
            if (data.hasOwnProperty("Incident.CustomFields.c.companyname") && data["Incident.CustomFields.c.companyname"]) {
                mapData["Company"] = data["Incident.CustomFields.c.companyname"];
            }
            if (data.hasOwnProperty("Contact.Emails.PRIMARY.Address") && data["Contact.Emails.PRIMARY.Address"]) {
                mapData["Email"] = data["Contact.Emails.PRIMARY.Address"];
            }
            return mapData;
        },
        repairstatuschat: function (data) {
            var mapData = mapFunction.defaultMap(data);
            if (data.hasOwnProperty("tsAddress1") && data["tsAddress1"]) {
                mapData["Address1"] = data["Contact.Name.tsAddress1"];
                if (typeof (data["Contact.Name.tsAddress1"]) == "undefined") {
                    mapData["Address1"] = data["tsAddress1"]
                }
            }
            if (data.hasOwnProperty("tsAddress2") && data["tsAddress2"]) {
                mapData["Address2"] = data["tsAddress2"];
            }
            if (data.hasOwnProperty("tsZip") && data["tsZip"]) {
                mapData["Zip"] = data["tsZip"];
            }
            if (data.hasOwnProperty("tsCompany") && data["tsCompany"]) {
                mapData["Company"] = data["tsCompany"];
            }
            if (data.hasOwnProperty("tsPhoneNumber") && data["tsPhoneNumber"]) {
                mapData["MobilePhone"] = data["tsPhoneNumber"];
            }
            return mapData;

        },
        eticketwithservice: function (data) {
            var mapData = mapFunction.defaultMap(data);
            if (data.hasOwnProperty("Street1") && data["Street1"]) {
                mapData["Address1"] = data["Street1"];
            }
            if (data.hasOwnProperty("Street2") && data["Street2"]) {
                mapData["Address2"] = data["Street2"];
            }
            if (data.hasOwnProperty("EMailAddress") && data["EMailAddress"]) {
                mapData["Email"] = data["EMailAddress"];
            }
            return mapData;
        },
        ibmcallback: function (data) {
            var mapData = mapFunction.defaultMap(data);
            if (data.hasOwnProperty("ClientName") && data["ClientName"]) {
                mapData["FirstName"] = data["ClientName"];
            }
            if (data.hasOwnProperty("ClientPhone") && data["ClientPhone"]) {
                mapData["MobilePhone"] = data["ClientPhone"];
            }
            if (data.hasOwnProperty("Address") && data["Address"]) {
              mapData["Address1"] = data["Address"];
           }
           if (data.hasOwnProperty("EmailAddress") && data["EmailAddress"]) {
               mapData["Email"] = data["EmailAddress"];
           }
            return mapData;
        },
        ibmschedulecallback: function (data) {
            var mapData = mapFunction.defaultMap(data);
            if (data.hasOwnProperty("ClientBusinessName") && data["ClientBusinessName"]) {
                mapData["FirstName"] = data["ClientBusinessName"];
            }
            if (data.hasOwnProperty("ClientBusinessPhone") && data["ClientBusinessPhone"]) {
                mapData["MobilePhone"] = data["ClientBusinessPhone"];
            }
            if (data.hasOwnProperty("EmailAddress") && data["EmailAddress"]) {
                mapData["Email"] = data["EmailAddress"];
            }
            if (data.hasOwnProperty("Address") && data["Address"]) {
                mapData["Address1"] = data["Address"];
            }
            return mapData;
        },
        warrantysupport: function (data) {
            var mapData = mapFunction.defaultMap(data);
            if (data.hasOwnProperty("Phone") && data["Phone"]) {
                mapData["MobilePhone"] = data["Phone"];
            }
            if (data.hasOwnProperty("Address") && data["Address"]) {
                mapData["Address1"] = data["Address"];
            }
            return mapData;
        },
    };
    var methods = {
        mapData: function (data, name) {
            if (mapFunction.hasOwnProperty(name) && typeof (mapFunction[name]) == "function")
                return mapFunction[name](data);
            return mapFunction.defaultMap(data);
        },

        updateAccount: function (event, data, name) {
            if (["repairstatuschat", "livechat"].includes(name)) {
                var trackUrl = l.UrlUtility.getFullPath('api/contactus/track/' + name);
                $.post(trackUrl, data);
            }
            var checked = $("input[name='UpdateAccount']").prop("checked");
            if (typeof _satellite === 'object' && _satellite && _satellite.track) {
                let obj = {
                    type: "eSupportProcess_Complete",
                    name: "Contact Center " + name + " Form",
                    action: "Click",
                };
                l.DTM.Lmd.push(obj);
            }
            if (checked) {
                var userAccount = methods.mapData(data, name);
                $.ajax(updateAccountUrl, { type: "POST", data: userAccount })
            }
            return false;
        }
    };
    $(window.document).on("updateAccount", methods.updateAccount);
})();