﻿getCK = function(sName){	    
    var aCookie = document.cookie.split("; ");
    var lastMatch = null;
    for (var i=0; i < aCookie.length; i++)
    {	    
        var aCrumb = aCookie[i].split("=");
        if (sName == aCrumb[0]){
            lastMatch = aCrumb;                
        }
    }
    if(lastMatch){
        var v = lastMatch[1];
        if(v === undefined) return v;
        try{
            return decodeURI(v);
        }catch(e){
            return unescape(v);
        }            
    }	            
    return null;	
}  
Expo.User = {
    /*
        注册
name:
passwd:
code:
nick:
qq:
gender:
from:
age:
job:
faceurl:        
    */
    regist: function(o, success, fail){
        if(!o.name){
            //fail("用户名不能为空"); return;
            fail(LOCAL.yhmhmmwk); return;
        }
        if(!o.passwd){
            //fail("密码不能为空"); return;
            fail(LOCAL.mmbnwk); return;
        }
        if(!o.code){
            //fail("验证码不能为空"); return;
            fail(LOCAL.yzmbnwk); return;
            
        }
        if(!isPasswd(o.passwd)){
            //fail("密码不符合要求，只能输入5~20个字母、数字、下划线。");return;
            fail(LOCAL.mmbfhyq); return;
        }    
	    o.passwd = hex_md5(o.passwd);
        var url = Expo.dataUrl+'register';
        new Expo.DataServer().build(url, o, success, fail);
    },
    /*
        登录
uin:
passwd:
code:
    */    
    login: function(o, success, fail){
        if(!o.uin || !o.passwd || !o.code){
	        fail("error!!!");
	        return;
	    }
	    o.passwd = hex_md5(o.passwd);
        var url = Expo.dataUrl+'login';
        
        user = o;
        new Expo.DataServer().build(url, o, function(o){
            if(success) success(o);
            Expo.User.fireEvent('login', o);            
        }, fail);
    },
    //退出
    logout: function(success, fail){        
        var url = Expo.dataUrl+'logout';
        new Expo.DataServer().build(url, null, function(o){
        
            Expo.util.Cookie.del('uin');
            Expo.util.Cookie.del('nick');
            Expo.util.Cookie.del('skey');
            Expo.util.Cookie.del('user');
            Expo.util.Cookie.del('pw');
            if(success) success(o);
            Expo.User.fireEvent('logout', o);            
        }, fail);
    },
    getprofile:function(o,success, fail){
        Expo.User.__connection('getprofile',o,success, fail);
    },
    updateprofile:function(o,success, fail){
        if(o.nick){
		    if(isHasSpeStr(o.nick)==false){
		        //fail("昵称不能包含特殊字符");
		        fail(LOCAL.ncbnbhtszf);
			    return;
		    }
	    }
        Expo.User.__connection('updateprofile',o,success, fail);
    },
    changepass:function(o,success, fail){
        if(!o.newpasswd||!o.oldpasswd){
            //fail("密码不能为空"); return;
            fail(LOCAL.mmbnwk); return;
        }
        if(!isPasswd(o.newpasswd)){
            //fail("密码不符合要求，只能输入5~20个字母、数字、下划线。");return;
            fail(LOCAL.mmbfhyq); return;
        }    
        o.newpasswd = hex_md5(o.newpasswd);
        o.oldpasswd = hex_md5(o.oldpasswd);
        Expo.User.__connection('changepass',o,success, fail);
   
    },
    __connection:function(connectpath,o,success, fail){
        var url = Expo.dataUrl+connectpath;
        new Expo.DataServer({method: 'post'}).build(url, o, function(o){        
            if(success) success(o);          
        }, fail);
    },
    //获得本地存储的用户
    getLocalUser: function(){    
	    if(!Expo.util.Cookie.get("uin")){
		    return null;
	    }else{
		    return {
		        uin:Expo.util.Cookie.get("uin"),
		        nick: getCK("nick"),
		        roles: this.purseRole((Expo.util.Cookie.get("admin")==null)?"0":Expo.util.Cookie.get("admin"))
		    };
	    }
    },
	//获得本地存储的用户Nick
    getLocalUserNick: function(){    
	    if(!Expo.util.Cookie.get("uin")){
		    return null;
	    }else{
		    return Expo.util.Cookie.get("nick");
	    }
    },
    //获得所有注册用户
    getAllUserCount: function(success, fail){
        var url = Expo.dataUrl+'getusercount';
        new Expo.DataServer().build(url, null, success, fail);
    },
    purseRole: function(str){
	    var roleArray = str.split("#");
	    var cr = {roles:[]};
	    for(var i=0;i<roleArray.length;i++){
		    var tmprolestr = roleArray[i];
		    var tmprole = {roles:[]};
		    var ta = tmprolestr.split(":");
		    for(var j=0;j<ta.length;j++){
			    if(j==0){tmprole.roleid=ta[0]}else if(j==1){tmprole.scope = ta[1]}
		    }
		    cr.roles.push(tmprole);
	    }
	    return cr;
    }
}
Expo.apply(Expo.User, new Expo.util.Observable);
Expo.User.addEvents('login', 'logout');

function isPasswd(s)
{
    var patrn=/^(\w){5,20}$/;
    if (!patrn.exec(s)) return false
    return true
}
function isHasSpeStr(str){
var SPECIAL_STR = "~!@%^&*();'\"?><[]{}\\|,:/=+—“”‘ ";
for(var i=0;i<str.length;i++){
	if (SPECIAL_STR.indexOf(str.charAt(i)) !=-1) return false;
}
return true;
}/*  |xGv00|04ab81ed79223ecd0500dad4b284714a */