var AccountSettingsEditableField = function(forEdit, options) {
    var cls = 'hidden_element';
    function clearFields(obj) {
        for (var a = 0; a < obj.length; a++)
            $(obj[a].id).value = "";
    }
    function clearErrors(group) {
        for (var i = 0; i < Page_Validators.length; i++) {
            if (IsValidationGroupMatch(Page_Validators[i], group))
                Page_Validators[i].style.display = 'none';
        }
    }
    function showMessage(id, msg) {
        $(id).innerText = msg;
        $(id).setStyle('display', 'block');
        window.setTimeout(String.format("$('{0}').setStyle('display','none')", id), 2500);
    }
    function sendRequest(options) {
        $(options.id + "_Table").getElements('.save').addClass(cls);
        $(options.id + "_Table").getElements('.loading').removeClass(cls);
        options.json = fieldsToJson(options);
        SaveAccountSetting(options)
    }
    function fieldsToJson(options) {
        var str = "{";
        if (options.isMultiUpdate) {
            str += String.format('"{0}":"{1}"', "updateAll", true);
        }
        if (options.mailingAddress) {
            if (str != "{") str += ",";
            str += String.format('"{0}":"{1}"', "mailingAddress", true);
//            for (var a = 0; a < options.fields.length; a++) {
//                if (options.fields[a].name != "") {
//                    str += String.format(',"M{0}":"{1}"', options.fields[a].name, $(options.fields[a].id.replace(options.id, options.hookUpId)).value);
//                }
//            }
        }
        for (var a = 0; a < options.fields.length; a++) {
            if (options.fields[a].name != "") {
                if (str != "{") str += ",";
                str += String.format('"{0}":"{1}"', options.fields[a].name, $(options.fields[a].id).value);
            }
        }
        str += "}";
        return eval("(" + str + ")");
    }
    function SaveAccountSetting(obj) {
        var aConnection = new Ext.data.Connection();
        aConnection.request(
        {
            url: obj.URL,
            method: "POST",
            headers: { "Content-Type": "application/json" },
            scope: this,
            jsonData: { aAction: obj.action.toUpperCase(), aObj: obj.json },
            callback: function(options, success, response) {
                var temp = null;
                if (success) {
                    temp = Ext.util.JSON.decode(response.responseText).d;
                    obj.result = temp;
                    if (temp.Success) {
                        obj.SendRequest("done", obj);
                        return;
                    }
                }
                obj.SendRequest("error", obj);
            }
        });
    };
    switch (forEdit) {
        case "error":
            $(options.id + "_Table").getElements('.loading').addClass(cls);
            if (options.result.ErrorNo == '$$$$') {
                $('accInterSections').getElements('.sec').setStyle('display', 'none');
                $('AddressChangeMessage').innerHTML = options.result.Message;
                $('AddressChangeMessage').setStyle('display', 'block');
                linkAccPopUP.show();
                options.result.Message = "";
            }
            else if (options.result.Message == 'Request Failed') {
                options.result.Message = 'Request failed. Please contact client services.';
            }
            showMessage(options.id + "_Message", options.result.Message);
        case "edit":
            $(options.id + "_Fields").removeClass(cls);
            if (forEdit == 'edit') {
                clearFields(options.fields);
                if (options.onEdit != null) { options.onEdit(); }
            }
            if ($(options.id + "_FieldsDisplay") && forEdit == 'edit') {
                $(options.id + "_FieldsDisplay").addClass(cls);
                for (var i = 0; i < options.fields.length; i++) {
                    $(options.fields[i].id).value = $(options.fields[i].id + "D").innerText;
                }
            }
            if ($(options.id + "_Extra")) { $(options.id + "_Extra").removeClass(cls); }
            $(options.id + "_Table").getElements('.edit').addClass(cls);
            $(options.id + "_Table").getElements('.save').removeClass(cls);
            break;
        case "confirm":
            var isValidGroup = false;
            if (Page_ClientValidate(options.action)) {
                isValidGroup = true;
                if (options.action == 'Address' && $('mailAddrCheckBox').checked) {
                    isValidGroup = Page_ClientValidate('MAddress');
                }
            }
            if (isValidGroup) {
                if (forEdit == 'confirm') {
                    $('accInterSections').getElements('.sec').setStyle('display', 'none');
                    options.mailingAddress = false;
                    if (options.action == 'Address') {
                        options.mailingAddress = $('mailAddrCheckBox').checked;
                    }
                    //console.log(options.isMultiGrp)
                    if ((options.isMultiGrp && options.isMultiAccount)) {
                        if (options.isMultiAccount) {
                            $('accInterSections').getElements('#confirmMultiAccount').setStyle('display', 'block');
                        }
                        linkAccPopUP.confirmUpate = function(isMulti) {
                            if (options.isMultiAccount) {
                                options.isMultiUpdate = isMulti;
                            }
                            else {
                                options.isMultiUpdate = false;
                            }
                            sendRequest(options);
                            linkAccPopUP.hide();
                        }
                        linkAccPopUP.show();
                    }
                    else {
                        options.isMultiUpdate = false;
                        sendRequest(options);
                    }
                }
            }
            break
        case "cancel":
            $(options.id + "_Fields").addClass(cls);
            if ($(options.id + "_FieldsDisplay")) {
                $(options.id + "_FieldsDisplay").removeClass(cls);
            }
            if ($(options.id + "_Extra")) { $(options.id + "_Extra").addClass(cls); }
            $(options.id + "_Table").getElements('.edit').removeClass(cls);
            $(options.id + "_Table").getElements('.save').addClass(cls);
            clearErrors(options.action);

            if (options.onCancel != null) {
                options.onCancel(options);
            }
            break
        case "done":
            $(options.id + "_Fields").addClass(cls);
            if ($(options.id + "_FieldsDisplay")) {
                $(options.id + "_FieldsDisplay").removeClass(cls);
                for (var i = 0; i < options.fields.length; i++) {
                    $(options.fields[i].id + "D").innerText = $(options.fields[i].id).value;
                }
            }

            if ($(options.id + "_Extra")) { $(options.id + "_Extra").addClass(cls); }
            $(options.id + "_Table").getElements('.edit').removeClass(cls);
            $(options.id + "_Table").getElements('.loading').addClass(cls);

            if (options.successMessage)
                showMessage(options.id + "_Message", options.successMessage);
            else
                showMessage(options.id + "_Message", String.format("{0} Updated Successfully!", options.action));
            clearFields(options.fields);
            if (options.onSuccess != null) {
                options.onSuccess(options);
            }
            break;
    }
}
