var uscc = uscc || {};
uscc.authentication = uscc.authentication || {};
/**
 * @class USCC Login From
 *
 *
 * @depends newbay.pva.widget.Form
 * @extends newbay.pva.widget.Form
*/
uscc.authentication.UsccLoginForm = (function(containerSelector, options){

    var _options = $.extend({}, {}, options),
        _cookie = new newbay.util.Cookie(),
        _dialog = newbay.widget.OKDialog(),
        _containerSelector = containerSelector,
        _formElements = {
            NKN: {
                    id: "uscc-nkn",
                    validationType:"mandatory_text",
                    localizedError:"Please enter a valid phone number"
                 },
            PWD: {
                    id: "uscc-pwd",
                    validationType:"mandatory_text",
                    localizedError:"Please enter in a Password"
                }
        },
        _super = new newbay.pva.widget.Form ({containerSelector: containerSelector, formElements: _formElements});

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


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

            _super.setLoading(true);

            var loginData = {
                    client_id : $.trim($containerSelector.find("#uscc-nkn").val()),
                    client_secret : $containerSelector.find("#uscc-pwd").val(),
                    grant_type  : "client_credentials"
                };

            //this will call the atp login service
            $.ajax({
                   url          :   "/atpbridge?operationName=login",
                   type         :   "POST",
                   contentType  :   "application/x-www-form-urlencoded",
                   data         :   loginData,
                   beforeSend   :   function(xhr){
                        xhr.setRequestHeader("X-Service-Identifier", "USC");
                   },
                   complete     :   function(response,status){
                       var responseStr;
                       try {
                            responseStr = $.parseJSON(response.responseText);
                       } catch(e) {
                            responseStr = {};
                       }
                       if(responseStr.accountType === "1"){
                                _loginLegacyUser(responseStr);
                       } else if (response.status === 401){
                                if(responseStr.errors[0].code === "2011"){
                                    _self.setLoading(false);
                                    $('div.validationFormError').html("Invalid account.").show();
                                }else{
                                    _self.setLoading(false);
                                    $('div.validationFormError').html("Incorrect Password given. Please try again.").show();
                                }
                        //check for account type | 0 = regular | 1 =  Legacy .... accountStatus == 4 means migrated user
                        }else if(response.status === 409 && parseInt(responseStr.accountStatus,10) == 1){        //suspended user!
                            _self.setLoading(false);
                            $('div.validationFormError').html("Account suspended.").show();
                        }else if(response.status === 409 && responseStr.accountType === "0" && parseInt(responseStr.accountStatus,10) == 4){
                                location.href = newbay.authentication.systemSettings.context+"/web/ext/"+ responseStr.lcid +"/register/activateLegacy?mdn=" + loginData.client_id;
                        }else if(response.status === 409 && responseStr.accountType === "0"){//error.account.not.verified | code : 2022
                                location.href = newbay.authentication.systemSettings.context+"/web/ext/"+ responseStr.lcid +"/register/activate?pn="+ loginData.client_id +"&ac="+ responseStr.accountType;
                        } else if (status == "success") {
                           _handleLoginSuccess(responseStr);
                        } else {
                           _handleLoginFailure(responseStr);
                       }
                   }
            });
        }
    };

    var _loginLegacyUser = function(resObj){
        //login legacy user
        var expiresDays = null;

        _cookie.createCookie('NWB', resObj.access_token);
        _cookie.createCookie('NWB_NS', resObj.lcid);
        _cookie.createCookie('NWB_LCID', resObj.lcid);
        _cookie.createCookie('NWB_LEGACY', "1");
        location.href = newbay.authentication.systemSettings.context + "/web/ext/" + resObj.lcid + "/legacy/index";
    };


    var _handleLoginSuccess = function(response){
        var loggedInUser = response,
            expiresDays = null;

        if (typeof loggedInUser.lcid === "undefined") {
            //Sanity check on returned data
            _handleLoginFailure(response);
            return;
        }

        _cookie.createCookie('NWB', loggedInUser.access_token);
        _cookie.createCookie('NWB_NS', loggedInUser.lcid);
        _cookie.createCookie('NWB_LCID', loggedInUser.lcid);
        _cookie.createCookie('NWB_LEGACY', "0");

        //check URL for "nexturl" param, if defined, use it as redir URL, else default PVA welcome URL
        var params = location.href.split("?")[1],
            nextUrl = null;

        if (params) {
            $.each(params.split("&"), function (inx, element) {
                if (element.split("=")[0] == "nexturl") {
                    nextUrl = element.split("=")[1];
                    return false;
                }
            });
        }

        location.href = ((nextUrl) ? decodeURIComponent(nextUrl) : ("http://" + location.host + newbay.authentication.systemSettings.context+"/web/"+loggedInUser.lcid+"/welcome"));
    };

    var _handleLoginFailure = function(response){
        _dialog.setText("An error occurred when trying to process your request.")
               .open()
               .setDialogOption("title", "Error");
        _super.setLoading(false);
    };

     var _init = function () {
        $(_containerSelector).delegate ("#uscc-authlogin-btn", "click", function (event) {
            event.preventDefault(); //stop hash being added to URL
            _loginToUSCC ();
         });

         $(_containerSelector).delegate ("#uscc-auth-form", "keyup", function (event) {
            if (event.keyCode == 13){
                _loginToUSCC ();
            }
         });

         $(document).ready(function() {
             $("#uscc-nkn").focus();
         });
     };

    _init ();

    return _self;
});

