﻿/////////////////////////////////////////////////////////////
//                Setup Class Names
/////////////////////////////////////////////////////////////
//default classes for infobox
var infoboxOkClass		= "OkMsg";
var infoboxWarningClass	= "WarningMsg";
var infoboxErrorClass	= "ErrorMsg";
var infoboxHintClass	= "HintMsg";
//default classes for input field
var inputWarningClass	= "Warning";
var inputErrorClass		= "Error";
var inputOkClass		= "Ok";
var inputNormalClass	= "Normal";


/////////////////////////////////////////////////////////////
//                Initialize Form
/////////////////////////////////////////////////////////////
function initForm(){
	//initialize form UI and add triggers
	var infobox;
	var x = document.getElementById("Content");
	if(!x) return;
	var y = x.getElementsByTagName("input");
	for (var i=0;i<y.length;i++){
		if(y[i].type == 'text' || y[i].type == 'password'){
			initStatus(y[i],true);
			//setFiledWidth(y[i]);
			y[i].onfocus	= getFocus;
			y[i].onblur		= lostFocus;
			y[i].onkeyup	= showMyStatus;
			
		}
		if(y[i].type == "checkbox" ){
			initStatus(y[i],false);
			y[i].onfocus	= getFocus;
			y[i].onblur		= lostFocus;
			y[i].onkeyup	= showMyStatus;
		}
	}
}
function initStatus(obj,isInput){
	if(isInput){
		if(isRequired(obj)) showStatus(obj,"Warning");
		else showStatus(obj,"Normal");
	}

	var infobox = getInfobox(obj);
	var errorCode = getInitStatus(obj);
	if(infobox && infobox.innerHTML == ""){
		if(!errorCode || errorCode == 0){
			infobox.className	= infoboxHintClass;
			infobox.innerHTML	= getErrorMsg(obj,0);
		}
		if(errorCode >0){
			infobox.className	= infoboxErrorClass;
			infobox.innerHTML	= getErrorMsg(obj,errorCode);
		}
	}
}
/////////////////////////////////////////////////////////////
//                Base Functions
/////////////////////////////////////////////////////////////
function isIE() {
	if(document.all) return true;
	return false;
}
function setFiledWidth(obj){
	obj.style.width=(19/3)*obj.size+11;
}
function formEle(required,datatype,parameter,infobox,errormsg,combine,status){
	this.r	= required;
	this.d	= datatype;
	this.p	= parameter;
	this.i	= infobox;
	this.e	= errormsg;
	this.c = combine;
	this.s = status;
}
function isRequired(obj){
	if(obj.id){
		if(eval(obj.id).r) return eval(obj.id).r;
	}
	return false;
}
function isCombine(obj){
	if(obj.id){
		if(eval(obj.id).c) return eval(obj.id).c;
	}
	return false;
}
function getDatatype(obj){
	if(obj.id){
		if(eval(obj.id).d) return eval(obj.id).d;
	}
	return false;
}
function getInfobox(obj){
	if(obj.id){
		if(eval(obj.id).i && document.getElementById(eval(obj.id).i)) return document.getElementById(eval(obj.id).i);
	}
	return;
}

function getErrorMsg(obj,errorCode){
	if(obj.id){
		if(eval(obj.id).e[errorCode]) return eval(obj.id).e[errorCode];
	}
	return;
}
function getHintMsg(obj){
	if(obj.id){
		if(eval(obj.id).e[0]) return eval(obj.id).e[0];
	}
	return;
}
function getInitStatus(obj){
	if(obj.id){
		if(eval(obj.id).s || eval(obj.id).s==0 ) return eval(obj.id).s;
	}
	return;
}
function getAttrName(str){
	var s=str.split("=");
	return s[0];
}
function getAttrValue(str){
	var s=str.split("=");
	return s[1];
}
function getAttrValueByName(obj,str){
	var para;
	if(obj.id){
		if(eval(obj.id).p) para=eval(obj.id).p;
		else return;
	}else{
		return;
	}
	var s = para.split(",");
	for(var i=0;i<s.length;i++){
		if(getAttrName(s[i]) == str){
			if(getAttrValue(s[i]))
				return getAttrValue(s[i]);
			else
				return;
		}
	}
	return;
}
function getMailServer(str){
	//be sure str is a correct email address
	str = str.trim();
	return str.substr(str.indexOf("@")+1);
}
function getMailAccount(str) {
	str = str.trim();
	return str.substr(0, str.indexOf("@"));
}
function isNumber(str) {
	var patn = new RegExp("^\\d{1,15}$");
	if (patn.test(str)) {
		return true;
	} else {
		return false;
	}
}

String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

/////////////////////////////////////////////////////////////
//                UI Functions
/////////////////////////////////////////////////////////////
function getFocus(evnt)
{
	var obj;
	if (isIE()) {
		obj = event.srcElement;
	}else {
		obj = evnt.target;
	}
	showInfo(obj,0);
}

function lostFocus(evnt)
{
	var obj;
	if (isIE()) {
		obj = event.srcElement;
	}else {
		obj = evnt.target;
	}
	showInfo(obj,-1);
}
function showInfo(obj,errorCode,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 = getInfobox(obj);
	if(infobox){
		if(infobox.className != infoboxErrorClass || forcible){
			if(errorCode == 0){
				infobox.className	= infoboxWarningClass;
				infobox.innerHTML	= getErrorMsg(obj,errorCode);
			}
			if(errorCode >0){
				infobox.className	= infoboxErrorClass;
				infobox.innerHTML	= getErrorMsg(obj,errorCode);
			}
			if(errorCode <0){
				infobox.className	= infoboxHintClass;
			}
		}
	}
}
function showMyStatus(evnt){
	var obj,errorCode;
	if (isIE()) {
		obj = event.srcElement;
	}else {
		obj = evnt.target;
	}
	errorCode = validateValue(obj);
	if(errorCode == 0){
		showStatus1(obj,errorCode);
	}
	if(errorCode >= 1){
		showStatus1(obj,errorCode);
	}
	if(errorCode < 0){
		showStatus1(obj,errorCode);
	}
}
function showStatus(obj,stat)
//Show the status of user currently inputting field
//3 Statuses: Warning|Error|Ok
{
	switch(stat){
		case "Warning":
			//obj.className = inputWarningClass;
			getInfobox(obj).innerHTML	= getErrorMsg(obj,0);
			break;
		case "Error":
			//obj.className = inputErrorClass;
			getInfobox(obj).className	= infoboxErrorClass;
			getInfobox(obj).innerHTML	= getErrorMsg(obj,0);
			break;
		case "Ok":

			//obj.className = inputOkClass;
			getInfobox(obj).className	= infoboxOkClass;
			getInfobox(obj).innerHTML	= getErrorMsg(obj,0);
			break;
		default:
			//obj.className = inputNormalClass;
			break;
	}
}

function showStatus1(obj,errorCode)
//Show the status of user currently inputting field
//3 Statuses: Warning|Error|Ok
{
	var stat;
	if(errorCode == 0){
		stat = "Ok";
	}
	if(errorCode >= 1){
		stat = "Error";		
	}
	if(errorCode < 0){
		stat = "Normal";		
	}
	
	switch(stat){
		case "Warning":
			//obj.className = inputWarningClass;
			getInfobox(obj).innerHTML	= getErrorMsg(obj,errorCode);
			break;
		case "Error":
			//obj.className = inputErrorClass;
			getInfobox(obj).className	= infoboxErrorClass;
			getInfobox(obj).innerHTML	= getErrorMsg(obj,errorCode);
			break;
		case "Ok":

			//obj.className = inputOkClass;
			getInfobox(obj).className	= infoboxOkClass;
			getInfobox(obj).innerHTML	= getErrorMsg(obj,errorCode);
			break;
		default:
			//obj.className = inputNormalClass;
			break;
	}
}
/////////////////////////////////////////////////////////////
//                Validator Functions
/////////////////////////////////////////////////////////////
function validateValue(obj){
	//trim
	var patn = /(^\s)|(\s$)/;
	if(patn.test(obj.value))	obj.value = obj.value.trim();
	//switcher
	var errorCode = -1;
	switch(getDatatype(obj)){
		case "username":
			errorCode = validateUsername(obj);
			break;
		case "nickname":
			errorCode = validateNickname(obj);
			break;			
		case "pwd":
			errorCode = validatePassword(obj);
			break;
		case "safepassword":
			errorCode = validateSafePassword(obj);
			break;
		case "mirror":
			errorCode = validateMirror(obj);
			break;
		case "ProtectCode":
			errorCode = validateProtectCode(obj);
			break;	
		case "ReProtectCode":
			errorCode = validateMirror(obj);
			break;			
		case "email":
			errorCode = validateEmail(obj);
			break;
		case "uname":
		  errorCode = validateRealName(obj);
		  break;
	        case "ssn":
	  	  errorCode = validateSsn(obj);
		  break;
		case "safecode":
	  	  errorCode = validateSafecode(obj);
		  break;		
		case "checkcode":
			errorCode = validateCheckCode(obj);
			break;
		case "mobile":
			errorCode = validateMobile(obj);
			break;

		default:
			errorCode = -1;
			break;
	}
	return errorCode;
}

function validateAll(formObj){
	var obj,infobox,pass;
	pass = true;
	var x = formObj;
	if(!x) return;
	var y = x.getElementsByTagName("input");

//	var keyselected;
//	var keyObj;
//	
//	for(i=0;i<document.formRegStep1Main.RadioGroup.length;i++){
//		if(document.formRegStep1Main.RadioGroup[i].checked){
//			keyselected = document.formRegStep1Main.RadioGroup[i].value;
//			break;
//		}
//	}

	
 for (var i=0;i<y.length;i++){
		obj = y[i];
		obj.value = obj.value.trim();
		infobox = getInfobox(y[i]);

		if(obj.type =='checkbox') {
				if(validateRule()>0){
					pass = false;
					obj.focus();
					infobox.className	= infoboxErrorClass;
					infobox.innerHTML	= getErrorMsg(obj,1);
					if(isCombine(obj)) break;
					continue;
				}
				if(validateRule(obj)==0){
					showStatus(obj,"Ok");
					infobox.className	= infoboxHintClass;
					infobox.innerHTML	= selectedInfo;
					continue;
				}
			}
		
		if((obj.type == 'text' || obj.type == 'password')){
//				if((eval(obj.id).d == 'ProtectCode' || eval(obj.id).d == 'ReProtectCode' )  && (keyselected == 'novalidate'))
//				{					
//					continue;
//				}
		
				if(!isRequired(obj) && obj.value == ""){
					continue;
				}
				if(isRequired(obj) && obj.value == ""){
					pass = false;
					obj.focus();
					showStatus(obj,"Error");
					infobox.className	= infoboxErrorClass;
					infobox.innerHTML	= requireErrorInfo + getErrorMsg(obj,0);
					if(isCombine(obj)) break;
					continue;
				}
				if(validateValue(obj)>0){
					pass = false;
					obj.focus();
					showStatus(obj,"Error");
					showInfo(obj,validateValue(obj),true);
					if(isCombine(obj)) break;
					continue;
				}
				if(validateValue(obj)==0){
					showStatus(obj,"Ok");
					infobox.className	= infoboxHintClass;
					infobox.innerHTML	= validatedInfo;
					continue;
				}
			}

	}

	return pass;
}


//functions for each particular datatype validation
// not _ at the start side or the end side
function validateUsername(obj){
	var str = obj.value;

	var check_username_info = document.getElementById("check_username_info");
	if (check_username_info != null) {
	    check_username_info.className = "";
	    check_username_info.innerHTML = "";
	}

	var patn = /^[a-zA-Z][0-9a-zA-Z]{5,16}$/;
	if(patn.test(str)){
		return 0;
	}
		
	return 1;
}
function validateCheckCode(obj){
	var str = obj.value;
	//var patn = /^[\u4E00-\u9FFF]{3}$/;
	var patn = /^[a-zA-Z0-9]{4,5}$/;
        if(patn.test(str)) return 0;
	return 1;
}

function validatePassword(obj){
	var str = obj.value;	
	//var patn = /^[0-9a-zA-Z]{4,16}$/;
	var patn = /^.{4,16}$/;
	if(patn.test(str)) return 0;
	return 1;
}

function validateProtectCode(obj){
	var str = obj.value;
	var patn = /^[0-9a-zA-Z]{10,16}$/;
	if(patn.test(str)) return 0;
	return 1;
}



function validateSafePassword(obj){
	var str = obj.value;
	//check length and alphabet
	if(validatePassword(obj)>0) return 1;
	//check if same as username
	//(str == document.getElementById("username").value) return 2;
	
	//check if all the characters are the same
	for(var i=0;i<str.length;i++){
		if(str.charAt(0)!=str.charAt(i)) break;
	}
	if(i == str.length) return 3;
	//check if is number sequence
	var seqStr="01234567890";
	if(seqStr.indexOf(str) != -1) return 4;
	//check if is lower alphabet sequence
	var seqStr="abcdefghijklmnopqrstuvwxyz";
	if(seqStr.indexOf(str) != -1) return 5;
	//check if is upper alphabet sequence
	var seqStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	if(seqStr.indexOf(str) != -1) return 6;

	//if validated
	return 0;
}

function validateEmail(obj){
	var str = obj.value;
	var patn = /^[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]*)*@[a-zA-Z0-9\-]+([\.][a-zA-Z0-9\-]+)+$/;
	//var patn = /^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]*[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{3}(\.[a-zA-Z]{2})?$/;
	if(patn.test(str)){
		return 0;
	}else{
		return 1; //incorrect format
	}
}
function validateNum(obj){
	var str = obj.value;
	var patn = new RegExp("\\d{"+getAttrValueByName(obj,"minlen")+","+getAttrValueByName(obj,"maxlen")+"}");
	if(patn.test(str)) return 0;
	return 1;
}

function validateMobile(obj){
	var str = obj.value;
	var patn = /^(13|15)\d{9}$/;
	if(patn.test(str)) return 0;
	return 1;
}

function validateMirror(obj){
	if(validateSameAs(obj)){
		var sameobj = document.getElementById(getAttrValueByName(obj,"sameas"));
		var sameobj_dt;
		if(eval(sameobj.id).d) sameobj_dt=eval(sameobj.id).d;
		else return -1;
		if(sameobj_dt != "mirror"){ //avoid a mirror type filed being another mirror type filed's mirror
			if(validateValue(sameobj) == 0)	 return 0;
			else return 2;
		}
	}
	return 1;
}
function validateSameAs(obj){
	var v1,v2;
	if(!getAttrValueByName(obj,"sameas")) return true;
	v1=obj.value;
	v2=document.getElementById(getAttrValueByName(obj,"sameas")).value;
	if(v1 == v2) return true;
	return false;
}
function checkByteLength(str,minlen,maxlen) {
	if (str == null) return false;
	var l = str.length;
	var blen = 0;
	for(i=0; i<l; i++) {
		if ((str.charCodeAt(i) & 0xff00) != 0) {
			blen ++;
		}
		blen ++;
	}
	if (blen > maxlen || blen < minlen) {
		return false;
	}
	return true;
}





function checkSafePassword(passwd) {
	var str = passwd;
	var patn = /^[\x00-\xff]{5,15}$/;
	if(!patn.test(str)) return 1;
	if (str == document.getElementById("txtUserName").value) {
	    return 2;
}
	for (var i=0;i<str.length;i++){
		    if(str.charAt(0)!=str.charAt(i))
		    break;
	}
	if(i == str.length) return 3;

	var seqStr="01234567890";
	if(seqStr.indexOf(str) != -1) return 4;

	var seqStr="abcdefghijklmnopqrstuvwxyz";
	if(seqStr.indexOf(str) != -1) return 5;

	var seqStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	if(seqStr.indexOf(str) != -1) return 6;
	return 0;
}

	// Function Name: len
	// Function Description: 返回字符串的实际长度, 一个汉字算2个长度
	// Creation Date: 2004-7-13 9:58
	// Last Modify By: N/A
	// Last Modify Date: N/A
	String.prototype.len=function()
	{
		var str=this;
		return str.replace(/[^\x00-\xff]/g, "**").length
	}
	
	function validateRealName(obj){
		var str = obj.value;
		// str length
		// include chinese or letter
		var patn = /^([\u4e00-\u9fa5]|[A-Za-z])+$/;    
    if(str.len()<4 || str.len()>20) {
    		return 1;
    	}
		else if (!patn.test(str)) {
				return 2;
		} else {
			return 0;
		}
	}

	function validateSsn(obj) {
	    var str = obj.value;
	    var patn = /^(\d{18}|\d{17}[xX]|\d{15})$/;
	    if (!patn.test(str))
	        return 1;
	    if (!checkIdcard(str)) {
	        //是否允许未成年人注册开关
	        var hiddenAllowNotAdult = document.getElementById("hiddenAllowNotAdult");

	        //不允许未成年人注册
	        if (hiddenAllowNotAdult != null && hiddenAllowNotAdult.value == "0") {
	            return 2;
	        }
	    }

	    return 0;
	}

function validateSafecode(obj){
		var str = obj.value;
		var patn = /^\d{6}$/;
		if(!patn.test(str)) return 1;
		
		//check if all the characters are the same
		for(var i=0;i<str.length;i++){
			if(str.charAt(0)!=str.charAt(i)) break;
		}
		if(i == str.length) return 2;
		//check if is number sequence
		var seqStr="01234567890";
		if(seqStr.indexOf(str) != -1) return 3;
		// true
		return 0;
	

}

function validatSendcode(obj){
		var str = obj.value;
		var patn = /^\d{6}$/;
		if(!patn.test(str)) return 1;
		
		return 0;
	

}

function validateRule(){
		if(document.formRegStep1Main.ckbxAgree.checked) return 0;
		return 1;
}

	

/**
 * 客户端检查非法字符, 不得含有 ""
 * @param p_String 待检查的字符串
 * @return 合法字符串返回 true, 否则返回 false
 */
function validateNickname(obj){
	var str = obj.value;
	var patn = /[\\{}\'\[\]\"|<>#$%^&`~]/;
	if(str.len()<2 || str.len()>18) {
    	return 1;
  }	
	if(patn.test(str)) return 2;
	return 0;
}



	//检查敏感词
function checkDenyWords(content) {
    if (content == null || content.trim() == "") return "";
    var wordsArrays = new Array();
    wordsArrays = new Array("≡V≡","≡v≡","admin","AIDS","aids","Aids","asshole","bitch","bitch","BITCH","Dick","fuck","fuck","FUCK","G.M","g.m","G。M","g。m","GM","GM","gm","Gm","gM","GT","j8","J8","LB","lb","SARS","SB","sb","SG","suck","阿扁","阿拉法特","艾滋","艾滋病","白鸟敏夫","板垣征四郎","包皮","本·拉登","本拉登","笨屄","笨逼","屄","逼","逼毛","冰毒","布莱尔","布什","操光通","操妳","操妳老妈","操妳老母","操妳妈","操妳娘","操妳祖宗","操你","操你大爷","操你老妈","操你老母","操你妈","操你妈个B","操你妈个屄","操你娘","操你全家","操你祖宗","操死光通","曹刚川","肏","插妳","插你","朝鲜","陈伯达","陈良宇","陈水扁","陈云","处女膜","春药","达赖","达子","打倒","大花B","大麻","大卫教","大血B","代练","代言","带练","党主席","道教","邓小平","帝国主义","屌","东条英机","东突暴动和独立","东乡茂德","东亚病夫","毒贩","独立","二屄","二逼","法高","法轮","法轮功","法西斯","佛教","佛祖","干妳","干妳老妈","干妳老母","干妳妈","干妳娘","干你","干你老妈","干你老母","干你妈","干你娘","肛交","高丽棒子","膏药旗","共产党","共产主义","共匪","挂机","观世音","广田宏毅","龟头","郭伯雄","国民党","国务院","海洛因","贺国强","黑社会","黑手党","胡锦涛","胡启立","胡耀邦","花柳","华国锋","黄菊","回回","回教","回良玉","鸡八","鸡巴","鸡奸","基督","基督教","激情图片","激情写真","妓女","贾庆林","奸","江core","江泽民","蒋介石","蒋经国","蒋中正","金日成","金正日","巨乳","康生","尻","克林顿","口交","寇晓伟","狂操","拉登","拉姆斯菲尔德","烂B","烂逼","烂人","老卵","李长春","李登辉","李富春","李洪志","李岚清","李鹏","李瑞环","李先念","连战","林彪","淋病","刘华清","刘淇","刘少奇","刘云山","六四","吕秀莲","乱伦","罗干","裸体写真","裸照","妈的光通","妈祖","马晓轶","毛泽东","梅毒","梅津美治郎","美国","蒙古","密宗","民进党","摩门教","木村兵太郎","穆罕默德","穆斯林","内挂","妳老母的","妳妈的","南蛮子","你姥","你姥姥的","你妈的","捻","娘","女干","女马","屁眼","嫖","平沼骐一郎","仆街","普京","强奸","强奸犯","乔石","亲民党","屈江涛","去死","人妻","日","日GT","日本","日本鬼子","日你妈","日你娘","日死光通","乳房","乳头","萨达姆","塞你爸","塞你公","塞你老母","塞你母","塞你娘","傻B","傻屄","傻逼","傻比","山本五十六","上妳","上你","社会主义","圣母","圣战","兽交","死光通","松冈洋右","松井石根","宋楚瑜","宋平","素人","孙文","孙逸仙","孙中山","他妈的","台独","台联","台湾","台湾独立","陶铸","天安门","天皇","土肥原贤二","外挂","汪东兴","王刚","王乐泉","王迁唐","王兆国","尉健行","温家宝","我操","我考","我靠","吴邦国","吴官正","吴俊青","吴仪","武藤章","西藏独立","西藏喇嘛","希拉克","希拉里","希特勒","系统","鲜族","萧汉华","小矶国昭","小泉纯一郎","小日本","新党","新闻出版总署","性交","性欲","鸦片","阳痿","姚依林","摇头丸","耶和华","耶稣","耶稣","叶剑英","一贯道","一丝不挂","伊斯兰","阴道","阴蒂","阴茎","阴毛","淫","永野修身","幼齿","俞正声","早泄","曾培炎","曾庆红","张春桥","张德江","张立昌","赵紫阳","真理教","真世界","中共","中共中央","中国共产党","中华民国","中南海","中宣部","中央电视台","周恩来","周永康","朱德","朱金容基","朱容基","朱镕基","转法轮","装屄","装逼","总理","作爱","做爱","扣逼","抠逼");
    for(var k=0;k<wordsArrays.length;k++){
        if (content.indexOf(wordsArrays[k])!=-1){
            return wordsArrays[k];
        }
    }
    return "";
}

function SelContentType1() {
    document.getElementById("html_ProtectCode1").style.display = "block";
    document.getElementById("html_ProtectCode2").style.display = "block";
}
function SelContentType2() {
    document.getElementById("html_ProtectCode1").style.display = "none";
    document.getElementById("html_ProtectCode2").style.display = "none";
}

function SelContentType3() {
    if (document.getElementById("Radio1").checked) {
        SelContentType1();
    }
    else {
        SelContentType2();
    }
}

function checkIdcard(idcard) {
    var Errors = new Array("验证通过!", "身份证号码位数不对!", "身份证号码出生日期超出范围或含有非法字符!", "身份证号码校验错误!", "身份证地区非法!");
    var area = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" }
    var idcard, Y, JYM;
    var ereg;
    var S, M;
    //var nowYear = new Date().getYear();
    var nowYear = new Date().getFullYear();
    var nowMonth = new Date().getMonth() + 1;

    var idcard_array = new Array();
    idcard_array = idcard.split("");
    if (area[parseInt(idcard.substr(0, 2))] == null) return false; //身份证地区非法    
    switch (idcard.length) {
        case 15:
            if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) {
                ereg = new RegExp("^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"); //测试出生日期的合法性    
            }
            else {
                ereg = new RegExp("^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"); //测试出生日期的合法性    
            }
            if (ereg.test(idcard) && ((nowYear - (parseInt(idcard.substr(6, 2)) + 1900)) * 12 + nowMonth - parseInt(idcard.substr(8, 2)) >= 18 * 12))

                return true;  //验证通过  
            else
                return false; //身份证号码出生日期超出范围或含有非法字符   
            break;
        case 18:
            if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0)) {
                ereg = new RegExp("^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"); //闰年出生日期的合法性正则表达式    
            }
            else {
                ereg = new RegExp("^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"); //平年出生日期的合法性正则表达式    
            }
            if (ereg.test(idcard)) {
                S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + parseInt(idcard_array[7]) * 1 + parseInt(idcard_array[8]) * 6 + parseInt(idcard_array[9]) * 3;
                Y = S % 11;
                M = "F";
                JYM = "10X98765432";
                M = JYM.substr(Y, 1);
                if (M == idcard_array[17].toUpperCase() && ((nowYear - parseInt(idcard.substr(6, 4))) * 12 + nowMonth - parseInt(idcard.substr(10, 2)) >= 18 * 12))
                    return true;  //验证通过    
                else
                    return false;    //身份证号码校验错误
            }
            else
                return false;  //身份证号码位数不对  
            break;
        default:
            return false; //身份证号码位数不对    
            break;
    }
}

function validateUno() {
    var obj = document.getElementById("txtUserName");
    var nick = obj.value;
    if (nick == "") {
        document.getElementById("check_username_info").className = "ErrorMsg";
        document.getElementById("check_username_info").innerHTML = "请填写用户名。";
        return false;
    }

    if (validateUsername(obj) != "0") {

        document.getElementById("check_username_info").className = "ErrorMsg";
        document.getElementById("check_username_info").innerHTML = "用户名格式错误，请重新填写。";
        return false;
    }
    document.getElementById("check_username_info").innerHTML = "检测中，请稍等...";
    document.getElementById("check_username_info").className = "WarningMsg";

    var html = calXMLHTTP(nick);

    if (html == "error") {
        document.getElementById("check_username_info").className = "ErrorMsg";
        document.getElementById("check_username_info").innerHTML = nick + "用户名已经被使用，请您重新填写用户名！";
        return false;
    }
    document.getElementById("check_username_info").className = "OkMsg";
    document.getElementById("check_username_info").innerHTML = "您可以使用" + nick + "用户名注册！";
    return true;
}

function calXMLHTTP(name) {

    var szUrl = XMLHTTPUrl + name + "&gid=" + new Date();
    var oHttp = getAJAXObj();
    oHttp.open("GET", szUrl, false);
    oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    oHttp.send();

    if (oHttp.readyState == 4) {
        if (oHttp.status == 200) {
            return oHttp.responseText;
        } else {
            return "error";
        }
    }


    return "error";
}

function getAJAXObj() {
    var A = null;
    try {
        A = new ActiveXObject("Msxml2.XMLHTTP")
    } catch (e) {
        try {
            A = new ActiveXObject("Microsoft.XMLHTTP")
        } catch (oc) {
            A = null
        }
    }

    if (!A && typeof XMLHttpRequest != "undefined") {
        A = new XMLHttpRequest()
    }
    return A
}

var XMLHTTPUrl = "ValidateUserInfo.ashx?txtUserName=";

var validatedInfo = "<img src='http://www.gyyx.cn/images/standard_msg_ok.gif'>&nbsp;填写正确。";
var selectedInfo = "<img src='http://www.gyyx.cn/images/standard_msg_ok.gif'>&nbsp;选择正确。";
var requireErrorInfo = "此项为必填项。<br \/>";


