/////////////////////////////////////////////////////////////
//                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(form){	
	//initialize form UI and add triggers
	var infobox;
	var x = document.getElementById(form);
	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 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;
	}
	if(obj.name=="username"){
		if(validateUsername(obj)==1) {
		     document.getElementById("check_username_info").innerHTML = "请输入正确用户名";
			 document.getElementById("check_username_info").className = "ErrorMsg";			 
		  }
		  else{
		    document.getElementById("check_username_info").innerHTML = "用户名检测中，请稍等...";
	        document.getElementById("check_username_info").className = "WarningMsg";
		    var MyAjax = new Ajax();    
		    MyAjax.open("get","/member/check_username_ajax.asp?username="+obj.value,false);
		    MyAjax.onreadystatechange=function(){
			   if(MyAjax.readyState!=4)
				   return;			   
				   var flag = MyAjax.responseText;
				   if(flag=="Y"){
				      document.getElementById("check_username_info").innerHTML = "此会员名已经被其他会员注册，请重新输入。";
			          document.getElementById("check_username_info").className = "ErrorMsg";				   
				   }
				   else{
				   	  document.getElementById("check_username_info").innerHTML = "此会员名可以使用";
			          document.getElementById("check_username_info").className = "OkMsg";
				   }					
		  }
		  MyAjax.send(null);	  
		}
	}
	///////////////////////////////////////////
	if(obj.name=="company"){
		if(validateCompanyName(obj)==1) {
		     document.getElementById("check_company_info").innerHTML = "请正确填写您的公司名";
			 document.getElementById("check_company_info").className = "ErrorMsg";			 
		  }
		  else{
		    document.getElementById("check_company_info").innerHTML = "公司名检测中，请稍等...";
	        document.getElementById("check_company_info").className = "WarningMsg";
		    var MyAjax = new Ajax();    
		    MyAjax.open("get","/member/check_username_ajax.asp?act=company&username="+obj.value,false);
		    MyAjax.onreadystatechange=function(){
			   if(MyAjax.readyState!=4)
				   return;			   
				   var flag = MyAjax.responseText;
				   if(flag=="Y"){
				      document.getElementById("check_company_info").innerHTML = "此公司名称已经被注册,您不能再次注册！如果您有疑问,请电话联系我们的客服人员(400-732-8881)。";
			          document.getElementById("check_company_info").className = "ErrorMsg";				   
				   }
				   else{
				   	  document.getElementById("check_company_info").innerHTML = "您的公司名称可以正常注册。";
			          document.getElementById("check_company_info").className = "OkMsg";
				   }					
		  }
		  MyAjax.send(null);	  
		}
	}
	 
	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){
		showStatus(obj,"Ok");
	}
	if(errorCode >= 1){
		showStatus(obj,"Error");
	}
	if(errorCode < 0){
		showStatus(obj,"Normal");
	}
}
function showStatus(obj,stat)
//Show the status of user currently inputting field
//3 Statuses: Warning|Error|Ok
{
	switch(stat){
		case "Warning":
			obj.className = inputWarningClass;
			break;
		case "Error":
			obj.className = inputErrorClass;
			break;
		case "Ok":
			obj.className = inputOkClass;
			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 "company":
		    errorCode = validateCompanyName(obj);
			break;	
		case "username":
			errorCode = validateUsername(obj);
			break;	
		case "sitename":
		    errorCode = validateSitename(obj);
			break;	
		case  "password":
		    errorCode = validatePassword(obj);
			break;
		case "mirror":
			errorCode = validateMirror(obj);
			break;
		case "info":
		    errorCode = validateInfo(obj);
			break;
		case "num":
			errorCode = validateNum(obj);
			break;
		case "website":
		    errorCode = validateWebsite(obj);
			break;
		case "mail":
			errorCode = validateEmail(obj);
			break;
		case "tel":
		    errorCode = validateTel(obj);
			break;
		case "qq":
		    errorCode = validateQQ(obj);
			break;
		case "msn":
		    errorCode = validateMSN(obj);
			break;
		case "checkcode":
		    errorCode = validateCheckCode(obj);
			break;
		case "idcard":
		    errorCode = validateCheckIDCard(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");
	for (var i=0;i<y.length;i++){
		obj = y[i];		
		obj.value = obj.value.trim();
		infobox = getInfobox(y[i]);
		if(obj.type == 'text' || obj.type == 'password'){
			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;
}


function validateCompanyName(obj){
	var str = obj.value;
	//str = quanjiao2Banjiao(str);
	//var patn =   /^[\u0391-\uFFE5a-zA-Z0-9][\u0391-\uFFE5\w]{2,20}$/; 
	var patn = /^[^0-9\!【】｜\|\*※]{2,}$/;
	if(patn.test(str)){
		return 0;
	}
	else{
	    return 1;
	}

}


//functions for each particular datatype validation
function validateUsername(obj){
	var str = obj.value;
	//str = quanjiao2Banjiao(str);
	//var patn =   /^[\u0391-\uFFE5a-zA-Z0-9][\u0391-\uFFE5\w]{2,20}$/; 
	var patn = /^[0-9a-zA-Z_]{3,16}$/;
	if(patn.test(str)){
		return 0;
	}
	else{
	    return 1;
	}
		
}



function validateInfo(obj){
	var str = obj.value;
	var patn = /.{0,3000}/; 
	if(patn.test(str)) return 0;
	return 1; 
}


function validateSitename(obj){
	var str = obj.value; 
	var patn = /^[0-9a-zA-Z_]{3,16}$/;
	if(patn.test(str)){
		return 0;
	}
	else{
	    return 1;
	}
}


function validatePassword(obj){
	var str = obj.value;
	var patn = /^.{6,16}$/; 
	if(patn.test(str)) return 0;
	return 1; 
}


function validateEmail(obj){
	var str = obj.value;
	str = quanjiao2Banjiao(str);
	obj.value = 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; //incorrect format
	}
}
function validateNum(obj){
	var str = obj.value;
	str = quanjiao2Banjiao(str);
	obj.value = str;
	var patn = new RegExp("^\\d{"+getAttrValueByName(obj,"minlen")+","+getAttrValueByName(obj,"maxlen")+"}$"); 
	
	if(patn.test(str)) return 0;
	return 1; 	
}

function validateWebsite(obj){
	var str = obj.value;
	var patn = /^http:\/\/.*$/;
	if(patn.test(str)) return 0;
	return 1; 	
}

function validateQQ(obj){
	var str = obj.value;
	str = quanjiao2Banjiao(str);
	obj.value = str;
	arrqq = str.split("/");
	if(arrqq.length>3){
	   return 2;
	}
	for(i=0;i<arrqq.length;i++){
	   var patn = /^\d+$/;
	   if(!patn.test(arrqq[i])) return 1;
	}
	
	return 0; 	
}

function validateMSN(obj){
	var str = obj.value;
	str = quanjiao2Banjiao(str);
	obj.value = str;
	
	arrmsn = str.split("/");
	if(arrmsn.length>3){
	   return 2;
	}
	for(i=0;i<arrmsn.length;i++){
	   var patn =  /^[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]*)*@[a-zA-Z0-9\-]+([\.][a-zA-Z0-9\-]+)+$/;
	   if(!patn.test(arrmsn[i])) return 1;
	}
	
	return 0;
	 
}


function validateTel(obj){
	var str = obj.value;
	str = quanjiao2Banjiao(str);
	obj.value = str;
	var patn = /^[\d\-\/]*$/;
	if(patn.test(str)) return 0;
	return 1; 	
}

function validateCheckIDCard(obj){
	var idcard = obj.value;
	idcard = quanjiao2Banjiao(idcard).toUpperCase();	
	obj.value = idcard;	
	if(idcard.length<15) return 1;
  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 S,M;   
  var idcard_array = new Array();   
  idcard_array = idcard.split("");   

  if(area[parseInt(idcard.substr(0,2))]==null) return 1;  
  
  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 = /^[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 = /^[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))   
        return 0;   
      else  
        return 1;   
    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 = /^[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 = /^[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])   
        return 0;   
      else  
        return 1;   
    }   
    else  
      return 1;   
    break;   
  default:   
    return 1;   
    break;   
  } 
}	

function validateCheckCode(obj){
	var str = obj.value;
	str = quanjiao2Banjiao(str);
	var patn = /^[0-9]{4}$/;
	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 quanjiao2Banjiao(str) {
	var i;
	var result = '';
	for (i = 0; i < str.length; i++) {
		code = str.charCodeAt(i);
		if (code >= 65281 && code < 65373) {
			result += String.fromCharCode(str.charCodeAt(i) - 65248);
		}
		else {
			result += str.charAt(i);
		}
	}
	return result;
} 


function Ajax()
{
	var xhrObj=null;
	 
		try{
		     xhrObj=new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(e1)
		{
		   try{
		      xhrObj=new ActiveXObject("MSXML2.XMLHTTP");
		    }
		    catch(e2){
		        try{
		             xhrObj=new ActiveXObject("MSXML3.XMLHTTP");
		         }
		     catch(e3){
		           alert("创建Ajax失败："+e3)
		     }
		   }
		}
	 
	return xhrObj;
} 

