﻿var hintmsgClass		= "hintmsg";
var okmsgClass    	    = "okmsg";
var infomsgClass    	= "infomsg";
var errormsgClass   	= "errmsg";
var msgArray = new Array();
var preusrname = "";
msgArray[0] = "5-20个字符(可以是中文、字母、数字、下划线，一个中文占两个字符)，一旦注册成功会员名不能修改。";
msgArray[1] = "&nbsp;";
msgArray[2] = "密码由6-16个字符组成，请使用英文字母加数字或符号的组合密码。";
msgArray[3] = "请再输入一遍您上面输入的密码。";
msgArray[4] = "范例： myname@tom.com";
msgArray[5] = "为确保电子邮件地址正确，请再输一遍电子邮件.";
msgArray[6] = "&nbsp;";
msgArray[7] = "请输入有效的MSN，范例：abc@hotmail.com。";
msgArray[8] = "请输入有效的QQ号码。";
msgArray[9] = "请输入有效的手机号码";
msgArray[10] = "请在此框中输入图片中的字符。";
var blankerrmsgArray = new Array();
blankerrmsgArray[0] = "此项为必填项。<br>5-20个字符(可以是中文、字母、数字、下划线，一个中文占两个字符)，一旦注册成功会员名不能修改。";
blankerrmsgArray[1] = "&nbsp;";
blankerrmsgArray[2] = "此项为必填项。<br>密码由6-16个字符组成，请使用英文字母加数字或符号的组合密码。";
blankerrmsgArray[3] = "此项为必填项。<br>请再输入一遍您上面输入的密码。";
blankerrmsgArray[4] = "此项为必填项。<br>请输入正确的电子邮件。";
blankerrmsgArray[5] = "此项为必填项。<br>请再输入一遍上面输入的电子邮件地址。";
blankerrmsgArray[6] = "&nbsp;";
blankerrmsgArray[7] = "&nbsp;";
blankerrmsgArray[8] = "&nbsp;";
blankerrmsgArray[9] = "&nbsp;";
blankerrmsgArray[10] = "此项为必填项。<br>请在此框中输入图片中的字符。";
var errmsgArray = new Array();
errmsgArray[0] = "您填写的会员名有误。会员名应该由5-20个字符(可以是中文、字母、数字、下划线，一个中文占两个字符)组成，不要使用特殊符号。";
errmsgArray[1] = "该会员名已经存在，请重新输入";
errmsgArray[2] = "您设置的密码有误，密码应该由5-16个英文字母、数字或符号组成。";
errmsgArray[3] = "两次输入的密码不一致，请重新输入。";
errmsgArray[4] = "电子邮件格式有误,请输入正确的电子邮件地址。";
errmsgArray[5] = "两次输入的电子邮件不一致。请再输入一遍上面的电子邮件地址。";
errmsgArray[6] = "";
errmsgArray[7] = "MSN格式不正确。";
errmsgArray[8] = "QQ号码不正确";
errmsgArray[9] = "手机号码不正确";
errmsgArray[10] = "你输入的验证码有误。";
var derrmsgArray = new Array();
derrmsgArray[1] = "";
derrmsgArray[2] = "";
derrmsgArray[3] = "";
derrmsgArray[4] = "电子邮件已经被注册，请重新输入";
derrmsgArray[5] = "";
derrmsgArray[6] = "";
derrmsgArray[7] = "MSN已经被注册，请重新输入";
derrmsgArray[8] = "QQ已经被注册，请重新输入";
derrmsgArray[9] = "手机号已经被注册，请重新输入";
derrmsgArray[10] = "";
var okmessage = "填写正确";
var statusArray = new Array(0,0,0,0,0,0,0,0,0,0,0);
var divarray = new Array("txtUsername","","txtPassword","txtConfirmPassword","txtEmail","txtConfirmEmail","","txtMsn","txtQq","txtMobile","txtCheckcode");

var tmpmsgs = new Array(msgArray[0],msgArray[1],msgArray[2],msgArray[3],msgArray[4],msgArray[5],msgArray[6],msgArray[7],msgArray[8],msgArray[9],msgArray[10]);

function initForm(frmid){
	var frmobj = document.getElementById(frmid);
	if(!frmobj) return;
	var frminput = frmobj.getElementsByTagName("input");
	if (!frminput||!frminput.length) return;
	for (var i=0;i<frminput.length;i++){
		if (frminput[i].getAttribute("hintidx")){
		    if (frminput[i].type == 'text' || frminput[i].type == 'password'){
		        //frminput[i].onchange= changeInput;
		        var hv = parseInt(frminput[i].getAttribute("hintidx"));
				if(hv!=8&&hv!=9&&hv!=10){
				  frminput[i].onfocus	= getFocus;
		          frminput[i].onblur	= lostFocus;
		        //frminput[i].onkeyup= keyUpInput;
				}
		    }
			showInfo(frminput[i].getAttribute("hintidx"),-1);
		}
	}
}

/////////////////////////////////////////////////////////////
//                Behavior Functions
/////////////////////////////////////////////////////////////
function getFocus(evnt){
	var obj;
	if (isIE()) {
		obj = event.srcElement;
	}else {
		obj = evnt.target;
	}
	if (obj && obj.getAttribute("hintidx")){
	    var idx = parseInt(obj.getAttribute("hintidx"));
	    if (idx && idx>0 && idx<=statusArray.length)
	        showInfo(obj.getAttribute("hintidx"),statusArray[idx-1]);
	    else
	        showInfo(obj.getAttribute("hintidx"),0);
	}
}
function lostFocus(evnt){
	var obj;
	if (isIE()) {
		obj = event.srcElement;
	}else {
		obj = evnt.target;
	}
	if (obj && obj.getAttribute("hintidx")){
	    var idx = parseInt(obj.getAttribute("hintidx"));
	    if (idx && idx>0 && idx<=statusArray.length)
	        checkObjInput(idx);
      //showInfo(obj.getAttribute("hintidx"),-1);
	}
}
function keyUpInput(evnt){
	var obj;
	var key;
	if (isIE()) {
		obj = event.srcElement;
	  key = event.keyCode;
	}else {
		obj = evnt.target;
	  key = evnt.keyCode;
	}
	if (obj && obj.getAttribute("hintidx")){
	    var idx = parseInt(obj.getAttribute("hintidx"));
	    if (idx && idx>0 && idx<=statusArray.length){
	        var spidx = obj.value.indexOf(' ');
	        //while (spidx>=0){
	        // obj.value=obj.value.substr(0,spidx)+(spidx!=obj.value.length?obj.value.substr(spidx+1,obj.value.length):"");
	        //  spidx = obj.value.indexOf(' ');
	        //}
	    }else{
	    }
	}
}


function showInfo(hintidx,errorCode,msg,forcible){
//Show Information in Infobox
//errorCode==0 for hint message
//if forcible==true, no matter what the status of infobox now, change it,
//otherwise,if the status of infobox is "Error", do not change it forever.
	var infobox = geInfobox(hintidx);
	if (infobox){
		if(infobox.className != errormsgClass || forcible){
		    var hintmsg = "";
		    if (msg && msg!="") hintmsg = msg;
		    else hintmsg = getHintMessage(hintidx,errorCode);
			infobox.innerHTML	= hintmsg;
			if(errorCode == 0)
			    infobox.className	= infomsgClass;
			else if (errorCode == 10)
			    infobox.className   = okmsgClass;
			else if(errorCode >0)
				infobox.className	= errormsgClass;
			else if(errorCode <0)
				infobox.className	= hintmsgClass;
		}
	}
}

function showMessage(hintidx,errorcode){
    var errcode = parseInt(errorcode.trim());
    if (isNaN(errcode)) errcode = -1;
    if (errcode==10) showOkHint(hintidx);
    else showInfo(hintidx,errcode,getHintMessage(hintidx,errcode));
}

function showHintMsg(hintidx,msg){
    if (msg && msg!="")
        showInfo(hintidx,0,msg,true);
    else
        showInfo(hintidx,0,getHintMessage(hintidx,-1),true);
}

function showBlankErrMsg(hintidx,msg){
    if (msg && msg!="")
        showInfo(hintidx,2,msg,true);
    else
        showInfo(hintidx,2,getHintMessage(hintidx,2),true);
}

function showErrMsg(hintidx,msg){
    if (msg && msg!="")
        showInfo(hintidx,1,msg,true);
    else
        showInfo(hintidx,1,getHintMessage(hintidx,1),true);
}

function showOkMsg(hintidx,msg){
    if (msg && msg!="")
        showInfo(hintidx,10,msg,true);
    else
        showInfo(hintidx,10,getHintMessage(hintidx,10),true);
}

function showOkHint(hintidx){
    if (hintidx>0 && hintidx<=statusArray.length)
        statusArray[hintidx-1] = 10;
    tmpmsgs[hintidx-1] = getHintMessage(hintidx,10);
    showInfo(hintidx,-1,"",true);
}

function geInfobox(hintidx){
    return document.getElementById("divinfo_"+hintidx);
}

function getInputObject(hintidx){
	if (hintidx>0 && hintidx<=divarray.length)
	    return document.getElementById(divarray[hintidx-1]);
	else return null;
}

function resetHintMsg(hintidx){
    if (hintidx>0&&hintidx<=tmpmsgs.length&&hintidx<=msgArray.length)
        tmpmsgs[hintidx-1] = msgArray[hintidx-1];
    showInfo(hintidx,-1,"",true);
}

function getHintMessage(hintidx,errorCode){
    if (errorCode==-1||errorCode==0){ // hint
	    if (!isNaN(hintidx) && hintidx>0 && hintidx<=tmpmsgs.length)
	        return tmpmsgs[hintidx-1];
	    else return "";
	}
    if (errorCode==10){ // ok
	    return okmessage;
	}
    if (errorCode>0 && errorCode==2){ // blank error
	    if (!isNaN(hintidx) && hintidx>0 && hintidx<=blankerrmsgArray.length)
	        return blankerrmsgArray[hintidx-1];
	    else return "";
	}
    if (errorCode>0 && errorCode==3){ // duplicated error
	    if (!isNaN(hintidx) && hintidx>0 && hintidx<=derrmsgArray.length)
	        return derrmsgArray[hintidx-1];
	    else return "";
	}
    if (errorCode>0){ // other error
	    if (!isNaN(hintidx) && hintidx>0 && hintidx<=errmsgArray.length)
	        return errmsgArray[hintidx-1];
	    else return "";
	}
	return "";
}

/////////////////////////////////////////////////////////////
//                CheckInput Functions
/////////////////////////////////////////////////////////////
function checkInput(frmobj){
    if (!frmobj) return false;
    var flag = true;
    var valid = true;
    valid = checkObjInput(1);
    flag = flag && valid;
    valid = checkObjInput(3);
    flag = flag && valid;
    valid = checkObjInput(4);
    flag = flag && valid;
    valid = checkObjInput(5);
    flag = flag && valid;
    valid = checkObjInput(6);
    flag = flag && valid;
    valid = checkObjInput(11);
    flag = flag && valid;
  	return flag;
}
function checkObjInput(idx){
	  var flag = false;
    var obj = getInputObject(idx);
    if (obj){ //obj && obj.value
        if (obj.value.trim()==""){
            showBlankErrMsg(idx);
        }else{
            var code = 0;
            if (idx==1){
                code = validateUsername(obj.value);
    	          if (preusrname.trim()!=""){
    	              if (obj.value.trim()!=preusrname){
    	                  resetHintMsg(2);
    	              }
    	          }
            }else if (idx==3){
                code = validatePassword(obj.value);
                if (code==0&&getInputObject(4).value==obj.value)
                    resetHintMsg(4);
            }else if (idx==4){
                code = (!getInputObject(3)||getInputObject(3).value!=obj.value)?-1:0;
            }else if (idx==5){
                code = validateEmail(obj.value);
                if (code==0&&getInputObject(6).value==obj.value)
                    resetHintMsg(6);
            }else if (idx==6){
                code = (!getInputObject(5)||getInputObject(5).value!=obj.value)?-1:0;
            }else if (idx==11){
                code = validateCheckcode(obj.value);
            }
            if (code!=0) showErrMsg(idx);
            else{
                flag = true;
                resetHintMsg(idx);
            }
        }
    }
    return flag;
}

var httpobj = XmlHttpObject();

function checkUsername(){
    var flag = false;
    var username = "";
    var obj = getInputObject(1);
    if (obj){
        if (obj.value.trim()==""){
            showBlankErrMsg(1);
        }else{
            var code = validateUsername(obj.value);
            if (code!=0) showErrMsg(1);
            else{
                flag = true;
                //showOkHint(1);
                resetHintMsg(1);
                username = obj.value;
            }
        }
    }
    if (flag && username.trim()!=""){
        if (httpobj){
            showHintMsg(2,"检测中，请稍候......");
            var str = encUserName(username);
            var url = "../register/register.do?action=checkuid&userid="+str;
            httpobj.open("GET", url, true);
            httpobj.onreadystatechange = showUsernameCheck;
            httpobj.send(null);
        }else{
            showErrMsg(2,"服务暂不可用");
        }
    }
}

function encUserName(username){
    var un = base64encode(escape(username));
    var out = "";
    var c;
    var i;
    for (i=0;i<un.length;i++){
        c = un.charAt(i);
        if (c=='+') out+="%2B"
        else if (c=='=') out+="%3D";
        else out+=c;
    }
    return out;
}

function showUsernameCheck(){
    if (httpobj.readyState == 4){
    	  preusrname = getInputObject(1).value;
        var code = httpobj.responseText;
        if (code==10){ // 可用
            showOkMsg(2,"此用户名可用。");
        }else if (code==11){ // 不可用
            showErrMsg(2,"此用户名已经被注册，请重新输入。");
        }else if (code==2){ // 未填写
            resetHintMsg(2);
            showBlankErrMsg(1);
        }else if (code==1){ // 格式错误
            resetHintMsg(2);
            showErrMsg(1);
        }else{
            showErrMsg(2,"服务状态无效");
        }
    }
}

/////////////////////////////////////////////////////////////
//                Validate Functions
/////////////////////////////////////////////////////////////
function validateUsername(str){
	if(checkStr4Name(str)){
		if(checkByteLength(str,5,20)) return 0;
		else return 1; // lenth error
	}else return 2;    // format error
}
function validatePassword(str){
	var patn = /.{6,16}/;
	return patn.test(str)?0:1;
}
function validateEmail(str){
	var patn = /^[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]*)*@[a-zA-Z0-9\-]+([\.][a-zA-Z0-9\-]+)+$/;
	if(patn.test(str)){
		return 0;
	}else{
		return 1;
	}
}
function validateCheckcode(str){
	var patn = /^[0-9a-zA-Z]{4}$/;
	if(patn.test(str)) return 0;
	return 1;
}