if (!window.wb) {
    window.wb = {};
}

wb.account = {};

(function(){

    var loggedIn;
    var tempAccount;
    var sessionId;
    var lastLogin;
    var accountId = false;
    var email;
    var superUser;
    var facebookUID;
    var myspaceUID;
    var token;
    
    //private
    var logout = function(callback){
        $.ajax({
            dataType: "json",
            type: "POST",
            url: '/transponder/auth/logout',
            success: function(json){
                $.cookie('token', null, {path:'/'});
                $.cookie('email', null, {path:'/'});
                $.cookie('accountId', null, {path:'/'});
                $.cookie('sessionId', null, {path:'/'});
                $.cookie('superUser', null, {path:'/'});
                $.cookie('facebookUID', null, {path:'/'});
                $.cookie('myspaceUID', null, {path:'/'});
                email = false;
                accountId = false;
                sessionId = false;
                superUser = false;
                loggedIn = false;
                tempAccount = false;
                facebookUID = false;
                myspaceUID = false;
                if (callback) callback();
                //if in wizard, login w/temp acct.
                window.location.href = "/";
            }
        });
    };
    
    var doLogin = function(params, callbackSuccess, callbackFailure) {
        $.ajax({
            dataType: "json",
            type: "POST",
            url: '/transponder/auth/login',
            data: params,
            async: false,
            success: function(json){
                var user = json.data;
                $.cookie('token', user.token, {path:'/'});
                $.cookie('email', user.email, {path:'/'});
                $.cookie('accountId', user.accountId, {path:'/'});
                $.cookie('sessionId', user.session, {path:'/'});
                $.cookie('superUser', user.superUser, {path:'/'});
                $.cookie('facebookUID', user.facebookUID, {path:'/'});
                $.cookie('myspaceUID', user.myspaceUID, {path:'/'});
                token = user.token;
                email = user.email;
                accountId = user.accountId;
                sessionId = user.session;
                superUser = user.superUser;
                facebookUID = user.facebookUID;
                myspaceUID = user.myspaceUID;
                if (callbackSuccess) callbackSuccess();
            },
            error: function(response) {
                if (!callbackFailure) return;
                try {
                    var data = JSON.parse(response.responseText);
                } catch (e) {
                    data = {
                        code: 666,
                        errorMsg: 'Malformed server response'
                    };
                }
                callbackFailure(data.errorMsg);
            }
        });
    };

    //public
    $.extend(wb.account, {
        init:function(useTempAccount){
            if(this.loggedIn) return;
            this.renewCredentials();
            if(!this.loggedIn && useTempAccount) {
                this.loginWithTempAccount();
            }
        },
        
        showLoginDialog: function() {
            // TODO: use blockUI to display new login dialog (different styling than current one, i presume)
        },
        
        login: function(email, pw, tempWidgetId, successFunc, errorFunc, type) {
            var params = { email: email, password: pw};
            if (!type) type = 'classic';
            params.type = type;
            if(tempWidgetId) {
                params.tempWidgetId = tempWidgetId;
            }
            doLogin(params,function() {
                loggedIn = true;
                tempAccount = false;
                if (successFunc) successFunc();
            }, function(msg) {
                if(errorFunc){
                    errorFunc(msg);
                }
                else{
                    alert('login failed');
                }
            });
        },

        loginWithTempAccount: function(callback) {
            doLogin({ email: 'guest@transpond.com' }, function() {
                loggedIn = true;
                tempAccount = true;
                if (callback) callback();
            }, function() {
                // no-op (dont display any messages here!)
            });
        },
        
        isUsingTempAccount: function() {
            if($.cookie('email') === 'guest@transpond.com') {
                return true;
            } else {
                return false;
            }
        },
        
        getSessionId:function(){return sessionId;},
        setSessionId:function(id){sessionId = id;},

        getEmail:function(){return email;},
        setEmail:function(em){email = em;},

        getToken:function(){return token;},
        setToken:function(t){token = t;},

        getAccountId:function(){return accountId;},
        setAccountId:function(accId){accountId = accId;},
        
        getLastLogin:function(){return lastLogin;},
        setLastLogin:function(login){lastLogin = login;},
        
        getSuperUser:function(){return superUser;},
        setSuperUser:function(isSuperUser){         
            if(typeof(isSuperUser == 'string') && isSuperUser == 'false') {
                superUser = false;
            } else {
                superUser = isSuperUser;
            }
        },

        getFacebookUID:function(){return facebookUID;},
        setFacebookUID:function(uid){facebookUID = uid; $.cookie('facebookUID', uid, {path:'/'}); },
        clearFacebookUID:function(){$.cookie('facebookUID', null, {path:'/'});},

        getMyspaceUID:function(){return myspaceUID;},
        setMyspaceUID:function(uid){myspaceUID = uid; $.cookie('myspaceUID', uid, {path:'/'}); },
        clearMyspaceUID:function(){$.cookie('myspaceUID', null, {path:'/'});},

        isLoggedIn:function(){
            // for now, simply check accountId
            return (accountId !== false);
        },
        
        isReallyLoggedIn: function() {
            return this.isLoggedIn() && !this.isUsingTempAccount();
        },
        
        renewCredentials:function(){
            var email = $.cookie('email');
            var token = $.cookie('token');
            var accountId = $.cookie('accountId');
            var sessionId = $.cookie('sessionId');
            var superUser = $.cookie('superUser');
            var facebookUID = $.cookie('facebookUID');
            var myspaceUID = $.cookie('myspaceUID');
            if(accountId){
                this.setToken(token);
                this.setEmail(email);
                this.setAccountId(accountId);
                this.setSessionId(sessionId);
                this.setSuperUser(superUser);
                this.setFacebookUID(facebookUID);
                this.setMyspaceUID(myspaceUID);
                this.loggedIn = true;
            }
        },
        
        logout: logout
    });  // end public
})();
