var uscc = uscc || {};
uscc.settings = uscc.settings || {};

/**
 * @class USCC Account Info Form
 *
 *
 * @depends newbay.pva.widget.Form
 * @extends newbay.pva.widget.Form
*/
uscc.settings.AccountInfo= (function(containerSelector, options){

    var _options = $.extend({}, {}, options),
        _containerSelector = containerSelector,
        _confirmTerminateAccDialog = null,
        _errorMsgs = newbay.pva.locale,
        _formElements = {
            FNAME: {
                    id: "fname",
                    validationType:"mandatory_text",
                    localizedError:"Please enter your first name"
            },
            LNAME:{
                    id: "lname",
                    validationType:"mandatory_text",
                    localizedError:"Please enter your last name"
            },
            EMAIL:{
                    id: "email",
                    validationType:"mandatory_email",
                    localizedError:"Please enter in a valid email address" 
            }
    },

    _super = new newbay.pva.widget.Form ({containerSelector: containerSelector, formElements: _formElements});

    //extend the Form Widget
    var _self = $.extend({}, _super, {});


    var getAccountInfo = function(){
        PvaAPI.getUserProfile({}, {}, {
            onSuccess: function(response){
                addInfoToForm(response.responseObject);
            },
            onFailure: function(){

            },
            onResponse: function() {
                _accountLoading(false);
            }
        });
        _accountLoading(true);
    };

    var saveAccountInfo = function(){
        if(_super.validate()){
            var $containerSelector = $(_containerSelector);


            var profile = {
                "profile" :{
                "fn" : $containerSelector.find("#fname").val() + " " + $containerSelector.find("#lname").val(),
                "givenName" : $containerSelector.find("#fname").val(),
                "additionalName" :  $containerSelector.find("#lname").val(),
                "emailAddress" :   $containerSelector.find("#email").val(),
                "confirmEmailAddress" :   $containerSelector.find("#email").val()
                }
            }

            _self.setLoading(true);

            PvaAPI.updateUserProfile( profile,{},{
                onSuccess: function(){
                    _self.setLoading(false);
                    newbay.pva.widget.OKDialog.setText("Your account information has been updated.").open().setDialogOption("title", "Account Info Updated");
                },
                onFailure: function(xhr){
                    var ro = xhr.responseObject,
                        msg = "An Error occurred while trying to update your account information. Please try again.";
                    if ($.isArray(ro.errors) && ro.errors.length > 0 && newbay.pva.locale.hasOwnProperty(ro.errors[0].message)) {
                        msg = newbay.pva.locale[ro.errors[0].message];
                    }
                    _self.setLoading(false);
                    newbay.pva.widget.OKDialog.setText(msg).open().setDialogOption("title", "Update Error");
                },
                onResponse: function() {
                    _accountLoading(false);
                }
            });
            _accountLoading(true);
        }

    };

    var _accountLoading = function(load) {
        $(_containerSelector).toggleClass("loading", load);
    }


    var addInfoToForm = function(response){
        var $containerSelector = $(_containerSelector);
        $containerSelector.find("#mobile").val(response.profile.tel);
        $containerSelector.find('#fname').val(response.profile.givenName);
        $containerSelector.find('#lname').val(response.profile.additionalName);
        $containerSelector.find('#email').val(response.profile.emailAddress);
    };

    var _confirmTerminateAccount = function(event) {
        event.preventDefault();
        if(_confirmTerminateAccDialog === null){
            _confirmTerminateAccDialog = newbay.widget.ConfirmDialog("uscTerminateAccDialog", {
                title               : "Terminate Account",
                text                : "By terminating your account, all information and content (pictures, etc) will immediately be deleted and cannot be recovered. If you do not want to delete all information and content, select Cancel below. If you want to delete your account and all information and content, select Accept below.",
                confirmButtonText   : "Accept",
                width               : "300px"
            });


            _confirmTerminateAccDialog.subscribe("okclick", function(){
                _self.setLoading(true);
                _terminateAccount(function() {
                    newbay.pva.widget.OKDialog.setText("Your account and all contents have been deleted. Thanks for using Online Album.").open().setDialogOption("title", "Account Deleted.");
                    //delete session cookies so as not to confuse anything.
                    newbay.pva.widget.OKDialog.subscribe("okclick", function() {
                        var cookie = new newbay.util.Cookie();
                        cookie.deleteCookie('NWB');
                        cookie.deleteCookie('NWB_NS');
                        cookie.deleteCookie('NWB_REMEMBERME');
                        cookie.deleteCookie('NWB_LCID');
                        cookie.deleteCookie('fpusername');
                        //redirect to default page
                        location.href = newbay.pva.systemSettings.context;
                    });
                });
            });
        }
        _confirmTerminateAccDialog.open();
    };

    var _terminateAccount = function(callbackFunc) {
        var deleteData = {
            "lcid":newbay.pva.systemSettings.lcid,
            "reason":11 //terminate account
        };

        $.ajax({
               type         :   "POST",
               url          :   "/atpbridge?operationName=userDelete",
               data         :   deleteData,
               contentType  :   "application/x-www-form-urlencoded",
               beforeSend   :   function(xhr){
                    xhr.setRequestHeader("X-Service-Identifier", "USC");
               },
               complete:   callbackFunc
            });
    };


    var init = function(){
        getAccountInfo();

        $(_containerSelector).delegate("#update-acc-info", "click", function(event){
            event.preventDefault();
            saveAccountInfo();
        });
        $(_containerSelector).delegate("#terminate-account", "click", _confirmTerminateAccount);
    };


    $(document).ready(function(){
        init();
    });

    return _self;
});

