

/////////////////////////////////////////////////////////////
//                Base Functions
/////////////////////////////////////////////////////////////
function isIE() {
	if(document.all) return true;
	return false;
}

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){
//alert((obj.id).r);
	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(obj.type != 'image' && obj.type != 'submit' && obj.type != 'button')
		{
			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);
}


/////////////////////////////////////////////////////////////
//                Setup Class Names
/////////////////////////////////////////////////////////////
//default classes for infobox
var infoboxOkClass		= "notetrue";
var infoboxWarningClass	= "notetrue";
var infoboxErrorClass	= "noteawoke";
var infoboxHintClass	= "note";
//default classes for input field
var inputWarningClass	= "note";
var inputErrorClass		= "noteawoke";
var inputOkClass		= "notetrue";
var inputNormalClass	= "note";








function initForm(){	
	//initialize form UI and add triggers
	
	var infobox;
	var x = document.getElementById("register");
	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);		
			y[i].onfocus	= getFocus;
			y[i].onblur		= lostFocus;
			//y[i].onkeyup	= showMyStatus;
		}
				
	}
	
	
}


function getFocus(evnt)
{
	var obj;
	if (isIE()) {
		obj = event.srcElement;
	}else {
		obj = evnt.target;
	}
	//alert('aaa');
	//showInfo(obj,0);
}


function initStatus(obj,isInput){
	//if(isInput){
	//	if(isRequired(obj)) showStatus(obj,"Warning");
	//	else showStatus(obj,"Normal");
	//}
	
	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);
		}
	}	
}





/////////////////////////////////////////////////////////////
//                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);	
	
	if(obj.value == '')
	{
		if(obj.id && eval(obj.id).c && document.getElementById(eval(obj.id).c))
		{			
			document.getElementById(eval(obj.id).c).innerHTML = '';			
		}
		if(eval(obj.id).i && document.getElementById(eval(obj.id).i) ) 
		{
			document.getElementById(eval(obj.id).i).className = 'note';
			document.getElementById(eval(obj.id).i).innerHTML = (eval(obj.id).e)[0];
		}	
		return;
	}
	
	errorCode = validateValue(obj);
	//alert(errorCode);
	
	if(errorCode == 0)
	{	
		//showStatus(obj,"Ok");
	
		//check username	
		if(obj.id == 'txtUserName')
		{
			document.getElementById("username_info").innerHTML = "检测中，请稍等...";
			document.getElementById("username_info").className = "notetrue";		
						
			if(checkUserName())
			{
				if(eval(obj.id).c && document.getElementById(eval(obj.id).c))
				{
					document.getElementById(eval(obj.id).c).innerHTML = "<img src=\""+AppPathMain+"/images/common/right.gif\" width=\"14\" height=\"12\" align=\"absmiddle\">";			
				}	
				
				if(eval(obj.id).i && document.getElementById(eval(obj.id).i))
				{
					document.getElementById(eval(obj.id).i).className = 'note';					
					document.getElementById(eval(obj.id).i).innerHTML = "该用户名可以注册";
				}
			}
			else
			{
				if(eval(obj.id).c && document.getElementById(eval(obj.id).c))
				{
					document.getElementById(eval(obj.id).c).innerHTML = '';			
				}			
			
				if(eval(obj.id).i && document.getElementById(eval(obj.id).i))
				{
					document.getElementById(eval(obj.id).i).className = 'noteawoke';					
					document.getElementById(eval(obj.id).i).innerHTML = '<span class=\"R\">错误：该用户名已经存在，请重新输入</span>';
					showStatus(obj,"Error");	
				}				
			}
			
			return;
		}
		/*
		//check username	
		if(obj.id == 'txtEmail')
		{
			document.getElementById("email_info").innerHTML = "检测中，请稍等...";
			document.getElementById("email_info").className = "notetrue";		
						
			if(checkEmail())
			{
				if(eval(obj.id).c && document.getElementById(eval(obj.id).c))
				{
					document.getElementById(eval(obj.id).c).innerHTML = "<img src=\""+AppPathMain+"/images/common/right.gif\" width=\"14\" height=\"12\" align=\"absmiddle\">";			
				}	
				
				if(eval(obj.id).i && document.getElementById(eval(obj.id).i))
				{
					document.getElementById(eval(obj.id).i).className = 'note';					
					document.getElementById(eval(obj.id).i).innerHTML = "该邮箱可以注册";
				}
			}
			else
			{
				if(eval(obj.id).c && document.getElementById(eval(obj.id).c))
				{
					document.getElementById(eval(obj.id).c).innerHTML = '';			
				}			
			
				if(eval(obj.id).i && document.getElementById(eval(obj.id).i))
				{
					document.getElementById(eval(obj.id).i).className = 'noteawoke';					
					document.getElementById(eval(obj.id).i).innerHTML = '<span class=\"R\">错误：该邮箱已经存在，请重新输入</span>';
					showStatus(obj,"Error");	
				}				
			}
			
			return;
		}
		*/
		if(obj.id)
		{	
			if(eval(obj.id).c && document.getElementById(eval(obj.id).c))
			if(document.getElementById(eval(obj.id).c).innerHTML.indexOf("img") < 0 )
			{ 
				
				document.getElementById(eval(obj.id).c).innerHTML = "<img  src=\""+AppPathMain+"/images/common/right.gif\" width=\"14\" height=\"12\" align=\"absmiddle\">";
							}
		
			document.getElementById(eval(obj.id).i).className = 'note';
			//document.getElementById(eval(obj.id).i).innerHTML = (eval(obj.id).e)[0];
			document.getElementById(eval(obj.id).i).innerHTML = validatedInfo;
		}		
	}
	
	
	if(errorCode >= 1)
	{
		if(obj.id)
		{
			//alert(eval(obj.id).i);
			if(eval(obj.id).i && document.getElementById(eval(obj.id).i)) 
			document.getElementById(eval(obj.id).i).className = 'noteawoke';
			document.getElementById(eval(obj.id).i).innerHTML = (eval(obj.id).e)[errorCode];
		}
		showStatus(obj,"Error");		
		//document.getElementById(eval(obj.id).c).innerHTML = '';
	}	
	
	
	if(errorCode < 0 && eval(obj.id))
	{	
		document.getElementById(eval(obj.id).c).innerHTML = '';
		if(obj.id)
		{
			//alert(eval(obj.id).i);
			if(eval(obj.id).i && document.getElementById(eval(obj.id).i) ) 
			document.getElementById(eval(obj.id).i).className = 'note';
			document.getElementById(eval(obj.id).i).innerHTML = (eval(obj.id).e)[0];
			//document.getElementById(eval(obj.id).i).innerHTML = '&nbsp;';
		}	
		//showStatus(obj,"Normal");
	}
	

}


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 ){
			//alert(infobox.innerHTML);
				
				infobox.innerHTML	= getErrorMsg(obj,errorCode);
				
				if(infobox.innerHTML != '&nbsp;'){
				infobox.className	= infoboxWarningClass;
				}
			}
			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":
			document.getElementById(eval(obj.id).c).innerHTML = "<img src=\""+AppPathMain+"/images/common/error.gif\" width=\"14\" height=\"12\" align=\"absmiddle\">";
			
			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 "username":
		//alert(obj);
			errorCode = validateUsername(obj);
			break;
		case "password":
			errorCode = validatePassword(obj);
			break;
		case "confirm_password":			
			errorCode = validateSafePassword(obj);
			break;
		case "email":
			errorCode = validateEmail(obj);
			break;
		case "question":
		case "answer":
			errorCode = validateLength(obj,0,50);
			break;			
		case "company":
			errorCode = validateCompany(obj);
			break;
		case "mobile":
			errorCode = validateMobile(obj);
			break;
		case "address":
			errorCode = validateAddress(obj);
			break;
		case "first_name":
			errorCode = validateFirstName(obj);
			break;
 		case "job_title":
			errorCode = validateJobTitle(obj);
			break;
		case "qq":
		    errorCode = validateQQ(obj);
		    break;
		default:
			errorCode = -1;
			break;
	}
	return errorCode;
}


function validateRetryAll(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' ){
			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){
			
		
			if(obj.id){
	
	if(eval(obj.id).c && document.getElementById(eval(obj.id).c))
	if(document.getElementById(eval(obj.id).c).innerHTML.indexOf("img") < 0 ){ 
	document.getElementById(eval(obj.id).c).innerHTML = "&nbsp;<img src=\"http://img.china.alibaba.com/images/cn/member/icon_right_19x19.gif\" width=\"19\" height=\"16\" align=\"absmiddle\"> " + document.getElementById(eval(obj.id).c).innerHTML;
	}
	document.getElementById(eval(obj.id).i).className = 'note';
	document.getElementById(eval(obj.id).i).innerHTML = (eval(obj.id).e)[0];
	
	}
		
	
				//showStatus(obj,"Ok");
				//infobox.className	= infoboxHintClass;
				//infobox.innerHTML	= validatedInfo;
				continue;
			}
		}
	}
	return pass;

}


   


function checkUserName() 
{	
	var username = document.getElementById("txtUserName").value;
	if (username == "") {
		return false;
	}
	return Mynbw.Main.Web.Member.Register.CheckUsername(username).value;
}



function checkEmail() {
	var email = document.getElementById("txtEmail").value;
	if (email == "") {
		return false;
	}
	
	return Mynbw.Main.Web.Member.Register.CheckEmail(email).value;
}














/////////////////////////////////////////////////////////////
//    functions for each particular datatype validation
/////////////////////////////////////////////////////////////

//通用长度检测
function validateLength(obj,min,max){
	var str = obj.value;	
	if(!checkByteLength(str,min,max)) return 1;		
	return 0; 
}

//检测用户名
function validateUsername(obj){
	var str = obj.value;
	var patn =   /^[a-zA-Z0-9_]+$/; 
	//var patn = /^[^\s]*$/;
	if(!checkByteLength(str,3,18)) return 1;
	
	if(!patn.test(str))
	{
		return 1;
	}
	return 0; 
}

//检测密码
function validatePassword(obj){
	var str = obj.value;
	var patn = /.{6,16}/; 
	var patn1 =   /^[a-zA-Z0-9_]+$/;
	if(!patn.test(str) || !patn1.test(str) || !checkByteLength(str,6,18)) return 1;
	return 0; 
}

//检测密码是否一致
function validateSafePassword(obj){
	var str = obj.value;		
	if(str != document.getElementById("txtPassword").value){return 1;}	
	return 0;
}

//检测Email
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\-]+)+$/;
	if(patn.test(str)){
		
		return 0;
	}else{
		return 1; //incorrect format
	}
}

//检测QQ
function validateQQ(obj)
{
    var str1 = obj.value;
    var str = tot(str1);
    obj.value = str;
    var reg = /^[0-9]+$/;
    
    if(!reg.exec(obj.value))
    {
        return 1;
    }
    else if(obj.value<10000 || obj.value >99999999999)
    {
        return 1;
    }
    else
    {
        return 0;
    }
    
}

//检测手机号码
function validateMobile(obj)
{
	var str1 = obj.value;
	var str = tot(str1); 
	obj.value = str;
		
	if(str.length > 16)
	{	
		return 1;
	}
	if(str.length == 0)
	{
		return -1;
	}

	var patn = /^[0-9]+$/;
	if(patn.test(str)) return 0;
	return 2; 	
}

//检测电话区号
function validatePhoneArea(obj)
{
	var str1 = obj.value;
	var str = tot(str1);
	obj.value = str;   
	if(str.length == 0)
	{
		return -1;
	}
	var patn = /^[0-9]+$/;
	if(!patn.test(str)) return 1;
	return validatePhone(); 
}

//检测传真区号
function validateFaxArea(obj)
{
	var str1 = obj.value;
	var str = tot(str1); 
	obj.value = str;
	if(str.length == 0)
	{
		return -1;
		return
	}
	var patn = /^[0-9]+$/;
	if(!patn.test(str)) return 1;
	return validateFax(); 
}


function validateArea(obj)
{
	var str1 = obj.value;
	var str = tot(str1);
	obj.value = str;

	if(str.length == 0)
	{
		return -1;
		return
	}
	var patn = /^[0-9]+$/;
	if(!patn.test(str)) return 1;
	return 0;
}

//检测电话号码
function validatePhone(objCountry,objArea,objNumber)
{
	if(validateArea(objCountry) == 0 && validateArea(objArea) == 0 && validateNumber(objNumber) == 0)
	{
		return 0;
	}
	else
	{
		return -1
	}
}

//检测传真
function validateFax(objCountry,objArea,objNumber)
{

	if(validateArea(objCountry) == 0 && validateArea(objArea) == 0 && validateNumber(objNumber) == 0)
	{
		return 0;
	}
	else
	{
		return -1
	}
}

//检测数字
function validateNumber(obj)
{
	var str1 = obj.value;
	var str = tot(str1);
	obj.value = str;	

	if(str.length == 0)
	{
		return -1;
	}
	var patn = /^[0-9-\/]+$/;
	if(!patn.test(str)) return 1;
	return 0;
}

//检测电话数字
function validatePhoneNumber(obj)
{
	var str = obj.value;
	if(str.length == 0)
	{
		return -1;
	}
	var patn = /^[0-9-\/]+$/;
	if(!patn.test(str)) return 1;
	return validatePhone(); 
}

//检测传真数字
function validateFaxNumber(obj)
{
	var str = obj.value;
	if(str.length == 0)
	{
		return -1;
	}
	var patn = /^[0-9-\/]+$/;
	if(!patn.test(str)) return 1;
	return validateFax(); 
}



function validateCompany(obj)
{
	var str = obj.value;	
	if(str.length > 50)
	{
		return 1;
	}

	if(str.length == 0)
	{
		return -1;
	}
	return 0;
}


function validateJobTitle(obj)
{
	var str = obj.value;
	if(str.length > 50)
	{
		return 1;
	}
	if(str.length == 0)
	{
		return -1;
	}
	return 0;
}

function validateFirstName(obj)
{
	var str = obj.value;	
	if(str.length > 32)
	{
		return 1;
	}
	if(str.length == 0)
	{
		return -1;
	}
	return 0;
}


function validateAddress(obj)
{
	var str = obj.value;	
	if(str.length > 80)
	{
		return 1;
	}
	if(str.length == 0)
	{
		return -1;
	}
	return 0;
}

function validateCheckCode(obj){
	var str = obj.value;
	var patn = /^[0-9a-zA-Z]{4}$/;
	if(patn.test(str)) return 0;
	return 1;
}	

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 tot(mobnumber)
{                        
	while(mobnumber.indexOf("０")!=-1)
	{
		mobnumber = mobnumber.replace("０","0");        
	}                                               
	while(mobnumber.indexOf("１")!=-1)
	{
		mobnumber = mobnumber.replace("１","1");
	}       
	while(mobnumber.indexOf("２")!=-1)
	{             
		mobnumber = mobnumber.replace("２","2");
	}       
	while(mobnumber.indexOf("３")!=-1)
	{             
		mobnumber = mobnumber.replace("３","3");
	}       
	while(mobnumber.indexOf("４")!=-1)
	{             
		mobnumber = mobnumber.replace("４","4");
	}       
	while(mobnumber.indexOf("５")!=-1)
	{             
		mobnumber = mobnumber.replace("５","5");
	}       
	while(mobnumber.indexOf("６")!=-1)
	{             
		mobnumber = mobnumber.replace("６","6");
	}       
	while(mobnumber.indexOf("７")!=-1)
	{             
		mobnumber = mobnumber.replace("７","7");
	}       
	while(mobnumber.indexOf("８")!=-1)
	{             
		mobnumber = mobnumber.replace("８","8");
	}       
	while(mobnumber.indexOf("９")!=-1)
	{             
		mobnumber = mobnumber.replace("９","9");
	}       
                                                
	return mobnumber;
}	 