﻿var RegisterUser = {
    flag: 0,
    sName: false,
    sPswd: false,
    sPswd2: false,
    sEmail: false,
    controlUrl: 'member/control.aspx',
    
    CheckUsername: function(){
        var username = $("M_Name").value;
        if (username == "") {
            this.sName = false;
            $("errname").style.display = "block";
            $("errnameMsg").innerHTML = "用户名不能为空";
            return;
        }
        
        var userReg = /^[a-zA-Z0-9_]{4,16}$/;
        if (!userReg.test(username)) {
            this.sName = false;
            $("errname").style.display = "block";
            $("errnameMsg").innerHTML = "用户名格式有误,只能4-16个字母、数字和下划线";
            return;
        }
        
        var params = "oper=checkname&par=" + username;
        new Ajax.Request(RegisterUser.controlUrl,
        {
            method: 'get', 
            parameters: params,
            evalJSON : true,
            onSuccess: RegisterUser.doCheckName.bind(this)
        });
    },
    
    doCheckName: function(response) {
        var ret = response.responseJSON;
        if (ret.state != 0) {
            this.sName = false;
            $("errname").style.display = "block";
            $("errnameMsg").innerHTML = "用户名已被注册";
        }
        else {
            this.sName = true;
            $("errname").style.display = "none";
        }
    },
    
    CharMode: function(iN) { 
        if (iN >= 48 && iN <= 57) 
            return 1; 
        if (iN >= 65 && iN <= 90)
            return 2; 
        if (iN >= 97 && iN <= 122)
            return 4; 
        else return 8;
    },
    
    bitTotal: function(num) { 
        var modes=0; 
        for (var i = 0; i < 4; i++){ 
            if (num & 1) modes++; 
            num >>>= 1; 
        } 
        return modes; 
    },
    
    checkStrong: function(sPW) { 
        if (sPW.length <= 4) 
            return 0; 
            
        var Modes=0; 
        for (var i = 0; i < sPW.length; i++){ 
            Modes |= this.CharMode(sPW.charCodeAt(i)); 
        }
        
        return this.bitTotal(Modes); 
    }, 


    CheckPswd: function() {
        var pswd = $("M_Password").value;
        if (pswd == "") {
            this.sPswd = false;
            $("errpswd").style.display = "block";
            $("pwd_status").className = "";
            $("errpswdMsg").innerHTML = "密码不能为空";
            return;
        }
        
        if (pswd.length < 6 || pswd.length > 16) {
            this.sPswd = false;
            $("errpswd").style.display = "block";
            $("pwd_status").className = "";
            $("errpswdMsg").innerHTML = "密码长度为6-16个字符";
            return;
        }
        
        var pwdReg = /(^\d+\D+){1,}|(^\D+\d*){1,}/;
        if (!pwdReg.test(pswd)) {
            this.sPswd = false;
            $("errpswd").style.display = "block";
            $("pwd_status").className = "";
            $("errpswdMsg").innerHTML = "密码不能为纯数字";
            return;
        }

        var s_level = this.checkStrong(pswd);
        switch(s_level) {
            case 0:
                $("pwd_status").className = "ys1";
            break;
            
            case 1:
                $("pwd_status").className = "ys2";
            break;
            
            case 2:
            default:
                $("pwd_status").className = "ys3";
            break;
        }
        
        var pswd2 = $("M_Password2").value;
        if (pswd2 != "" && pswd2 != pswd) {
            this.sPswd = false;
            $("errpswd").style.display = "block";
            $("errpswdMsg").innerHTML = "密码不一致";
            return ;
        }
        
        this.sPswd = true;
        $("errpswd").style.display = "none";
    },
    
    CheckPswd2: function() {
        var pswd = $("M_Password").value;
        var pswd2 = $("M_Password2").value;
        if (pswd != pswd2) {
            this.sPswd2 = false;
            $("errpswd2").style.display = "block";
            $("errpswd2Msg").innerHTML = "密码不一致";
            return;
        }
        
        this.sPswd2 = true;
        $("errpswd2").style.display = "none";
    },
    
    CheckEmail: function() {
        var email = $("M_Email").value;
        if (email == "") {
            this.sEmail = false;
            $("erremail").style.display = "block";
            $("erremailMsg").innerHTML = "E-mail不能为空";
            return;
        }
        
        var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
        if (!reg.test(email)){
            this.sEmail = false;
            $("erremail").style.display = "block";
            $("erremailMsg").innerHTML = "E-mail格式不正确";
            return;
        }
        
        var params = "oper=checkemail&par=" + email;
        new Ajax.Request(RegisterUser.controlUrl,
        {
            method: 'get', 
            parameters: params,
            evalJSON : true,
            onSuccess: RegisterUser.doCheckEmail.bind(this)
        });
    },
    
    doCheckEmail: function(response) {
        var ret = response.responseJSON;
        if (ret.state != 0) {
            this.sEmail = false;
            $("erremail").style.display = "block";
            $("erremailMsg").innerHTML = "邮箱已被注册";
        }
        else {
            this.sEmail = true;
            $("erremail").style.display = "none";
        }
    },
    
    Submit: function(e) {
        var form = $("register");
        if (this.sName && this.sPswd && this.sPswd2 && this.sEmail) {
            return true
        }
        else {
            e.stop();
            return false;
        }
    },
    
    Promt: function() {
        var input = $("invite_code").value;
        if (input == "" || input == null) {
            alert("你没有输入验证码");
            return false;
        }
        
        input = input.strip();
        if (input != '银龙') {
            alert('您输入的验证码不正确');
            return false;
        }
        
        var params = "oper=gettoken&par=1";
        new Ajax.Request(RegisterUser.controlUrl,
        {
            method: 'get', 
            parameters: params,
            evalJSON : true,
            onSuccess: RegisterUser.doGetToken.bind(this)
        });
        
        return true;
    },
    
    doGetToken: function(response) {
        var ret = response.responseJSON;
        document.location.href = ret.url;
    },
    
    doFocus: function(id) {
        $("M_Name").className = "inputNormal";
        $("M_Password").className = "inputNormal";
        $("M_Password2").className = "inputNormal";
        $("M_Email").className = "inputNormal";
        
        $(id).className = "inputFocus";
    },
    
    getRegcode: function () {
        var params = "oper=getregcode&par=1";
        new Ajax.Request(RegisterUser.controlUrl,
        {
            method: 'get', 
            parameters: params,
            evalJSON : true,
            onSuccess: RegisterUser.doGetRegcode.bind(this)
        });
    },
    
    doGetRegcode:function(response) {
        var ret = response.responseJSON;
        $("reg_code").value = ret.regCode;
    }
};

var DefaultNav = {
    DoUpdateNav: function(id) {        $("news").className = "";        $("notice").className = "";        $("activity").className = "";        $("others").className = "";                $(id).className = "current";                var elements = $("updateList").select("li");        if (id == "news") {            for (var i = 0; i < elements.length; i++) {                elements[i].style.display = "block";            }        } else if (id == "notice") {            for (var i = 0; i < elements.length; i++) {                var temp = $(elements[i].firstDescendant());                if (!temp.hasClassName("newsNotices")) {                    elements[i].style.display = "none";                }                else {                    elements[i].style.display = "block";                }            }        } else if (id == "activity") {            for (var i = 0; i < elements.length; i++) {                var temp = $(elements[i].firstDescendant());                if (!temp.hasClassName("newsActivities")) {                    elements[i].style.display = "none";                }                else {                    elements[i].style.display = "block";                }            }        } else if (id == "others") {            for (var i = 0; i < elements.length; i++) {                var temp = $(elements[i].firstDescendant());                if (!temp.hasClassName("newsOthers")) {                    elements[i].style.display = "none";                }                else {                    elements[i].style.display = "block";                }            }        }    }
};

Event.observe(window, "load", function(event) {
    if ($("M_Name")) {
        $("M_Name").observe("blur", RegisterUser.CheckUsername.bind(RegisterUser));
        $("M_Password").observe("blur", RegisterUser.CheckPswd.bind(RegisterUser));
        $("M_Password2").observe("blur", RegisterUser.CheckPswd2.bind(RegisterUser));
        $("M_Email").observe("blur", RegisterUser.CheckEmail.bind(RegisterUser));
        
        $("M_Name").observe("focus", function(e) {
            RegisterUser.doFocus("M_Name");
        });
        $("M_Password").observe("focus", function(e) {
            RegisterUser.doFocus("M_Password");
        });
        $("M_Password2").observe("focus", function(e) {
            RegisterUser.doFocus("M_Password2");
        });
        $("M_Email").observe("focus", function(e) {
            RegisterUser.doFocus("M_Email");
        });
        
        $("register").observe("submit", function(e) {
            RegisterUser.Submit(e);
        });
        
        RegisterUser.getRegcode();
        
    } else {        $("news").observe("click", function(e) {            DefaultNav.DoUpdateNav("news");            e.stop();        });                $("notice").observe("click", function(e) {            DefaultNav.DoUpdateNav("notice");            e.stop();        });                $("activity").observe("click", function(e) {            DefaultNav.DoUpdateNav("activity");            e.stop();        });                $("others").observe("click", function(e) {            DefaultNav.DoUpdateNav("others");            e.stop();        });    }        Header.Init();})