/**
 * 注册页检验
 * 闭至海
 */
var ErrorArray = new Array();//错误列表,用于保存已检测出的错误ErrorClass实例，提交前只须判断此数组的大小
/**
 * 回调检测
 * 检测的结果，假如出现错误，则直接把错误生成ErrorClass实例，写入ErrorArray数组
 * @param {Object} cmd 数据库的字段名称；对应的文本框和提示框分别为|"text_" + cmd| 和 |cmd + "_div"| 
 */


 function login()
 {
	 window.location.href="/login/login.jsp";
 }
function checkFromServer(cmd)
{
	
	var loading = $get(cmd + "_info");
	loading.innerHTML = "正在检测 <img src='/new_images/loading2.gif' />";
	var value_ = $get(cmd).value;
	
	var loadValue="cmd=" + cmd + "&value=" + parameStr(value_);
	
	var callback_=new CallBackXMLArray("/user/back_signup_check.jsp",loadValue,checkFromServerResult,error);
	callback_.getCallBack();
}
function checkFromServerResult(result)
{
	var check_result = result[0][0];
	var errorMsg = result[0][1];
	var cmd = result[0][2];//检测的字段
	var ret_value = result[0][3];
	//设置字段名称
	var fieldName = "";
	if (cmd=="com_no")
	{
		fieldName = "user no";
	}
	var loading = $get(cmd + "_info");
	if (check_result)
	{
		loading.style.color = "green";
		loading.innerHTML = "<img src='/new_images/right.gif' style='height:12px;' />" + errorMsg;
		recError(cmd);
		if(cmd="com_name")
		{
			$get("short_com_name").value = ret_value;
		}
	}
	else
	{
		loading.style.color = "red";
		loading.innerHTML = errorMsg;
		addError(cmd,errorMsg);
	}
}
function error()
{
	
}

function submit_user()
{
	$get("Submit4").disabled = "disabled";
	$get("Submit4").value="正在提交...";
	var check_ = checkAll();
	if(check_)
	{
		var com_name = $get("com_name").value;
		if(com_name.length>3)
			addMember();
		else
		{
			$get("Submit4").value="同意条款提交注册信息";
			$get("Submit4").disabled = "";
			alert("公司名称不能少于４个字");
		}
	}
	else
	{
		$get("Submit4").value="同意条款提交注册信息";
		$get("Submit4").disabled = "";
		alert("有错误，不能提交");
	}
	$get("Submit4").disabled = "";
	$get("Submit4").value="马上提交";
}

/**
 * 提交前检测
 * 首先刷新本地检测，检测没有存在于ErrorArray中的项
 * 假如发现错误，则写入ErrorArray,否则不理
 */
function checkAll()
{
	//alert(ErrorArray.length);
	if ($get("agree_protocol").checked!=true)
	{
		alert("抱歉,你必须同意本站用户服务协议才能注册。");
		return false;
	}
	/*先进先所有项的本地测试*/
	for (var i=0;i<Controls.length;i++)
	{
		var e = $get(Controls[i].cmd);
		if (e)
		{
			checkAllLocation(e,i);
		}
	}
	//显不错误列表
	if (ErrorArray.length>0)
	{
		alert("有 "+ErrorArray.length+" "+ErrorArray[0].cmd+" 项格式错误，请更正后再提交");
		$get(ErrorArray[0].cmd).focus();
		return false;
		//alert(ErrorArray[0].msg);
		/*
		var errorMsgAll = "<ul><b style='color:red;'>提交前请更正：</b>";
		for(var i=0;i<ErrorArray.length;i++)
		{
			$get(ErrorArray[i].cmd + "_info").style.color = "red";
			$get(ErrorArray[i].cmd + "_info").innerHTML = ErrorArray[i].msg;
			alert(ErrorArray[i].msg);
			errorMsgAll += "<li>" + ErrorArray[i].msg + "</li>"
		}
		errorMsgAll += "</ul><div style='color:red;padding-left:50px;'>请更正以上错误后再提交</div>";
		coverAllWithMsg("错误",errorMsgAll,true,450,350,100,375);
		*/
	}
	else
	{
		//提交
		//addMember();
	}
	return true;
}
/**
 * 提交数据，添加用户
 */
function addMember()
{
	//分析特殊数据
	
	coverAll("updating...",true);
	var loadValue="cmd=add";
	var tmpTTTT = "cmd=add";
	for (var i=0;i<Controls.length;i++)
	{
		loadValue += "&" + Controls[i].cmd + "=" + parameStr($get(Controls[i].cmd).value);
		//tmpTTTT += "cols.add(new DataColumns(\"" + Controls[i].cmd + "\"," + Controls[i].cmd + "));<br />";
	}
	//$get("tmpTTTT").innerHTML = tmpTTTT;

	loadValue += "&remark=" + parameStr($get("remark").value);
	loadValue += "&short_com_name=" + parameStr($get("short_com_name").value);
	//alert(loadValue);
	var callback_=new CallBackXMLArray("/user/back_signup_submit.jsp",loadValue,addMemberResult,error);
	callback_.getCallBack();
}
function addMemberResult(result)
{
	var check = result[0][0];
	var newID = parseFloat(result[0][1]);
	var isMailed = result[0][2];
	if (!check)
	{
		//获取验证结果的错误信息写生成ErrorClass实例写入ErrorArray数组
		ErrorArray = null;
		ErrorArray = new Array();
		for(var i=1;i<result.length;i++)
		{
			ErrorArray[ErrorArray.length] = new ErrorClass(result[i][0],result[i][1]);
		}
		uncoverAll();
		checkAll();//因为ErrorArray里已经有错误列表，所以运行提交前检测，作用是显示错误列表
	}
	else
	{
		if (newID>0)
		{
			//用户注册成功
			uncoverAll();
			/*
			var msg_ = "<table><tr><td><img src='/webimg/regok.jpg' /></td><td>注册成功，系统正在跳转...<br />";
			msg_ += "假如浏览器无法正常跳转，请单击下面的链接直接跳转<br />";
			msg_ += "<a href='/user/succeed.htm?id=" + newID.toString() + "&email=" + $get("text_email").value + "&isMailed=" + isMailed.toString() + "'>点击这里跳转到成功页</a></td></tr></table>";
			coverAllWithMsg("succeed",msg_,true,450,250,100,375);
			*/
			coverAll("注册成功，正在跳转...",true);
			window.location.href = "/user/register-ok.jsp";
		}
		else
		{
			//显示无法添加的出错信息
			uncoverAll();
			//alert("error");
		}
	}
}

/**
 * 检测重复密码是否一致
 */
function checkPassword()
{
	var cmd1= "passwd";//************************************************
	var cmd2= "passwd2";//*********************************************
	var pass1 = $get( cmd1);
	var pass2 = $get(cmd2);
	var show1 = $get(cmd1 + "_info");
	var show2 = $get(cmd2 + "_info");
	var index_1 = getIndexOf(cmd1);
	var index_2 = getIndexOf(cmd2);
	if (pass1.value.length>0 && (pass1.value==pass2.value))
	{
		//密码一致
		recError("passwd");
		recError("passwd2");
		show1.style.color = "green";
		show1.innerHTML = "<img src='/new_images/right.gif' style='height:12px;' />" + Controls[index_1].name + Controls[index_1].rightMsg;
		show2.style.color = "green";
		show2.innerHTML = "<img src='/new_images/right.gif' style='height:12px;' />" + Controls[index_2].name + Controls[index_2].rightMsg;
	}
	else
	{
		if (getCheckRsultFromCmd("passwd2") && pass2.value.length==0)
		{
			
		}
		else
		{
			
			var isChecked = RegExpCheck(pass2.value,Controls[index_1].regExp);
			if (isChecked)
			{
				addError("passwd2","验证密码与登录密码不一致，请重新输入");
				show2.style.color = "red";
				show2.innerHTML = "验证密码与登录密码不一致，请重新输入";
			}
			else
			{
				addError("passwd2",Controls[index_2].errorMsg);
				show2.style.color = "red";
				show2.innerHTML = Controls[index_2].errorMsg;
			}
		}
	}
}


/**
 * 添加一条输入错误信息
 */
function addError(cmd,error)
{
	var index_ = -1;
	for (var i=0;i<ErrorArray.length;i++)
	{
		if (ErrorArray[i].cmd==cmd)
		{
			index_ = i;
		}
	}
	if (index_==-1)
	{
		//添加
		ErrorArray[ErrorArray.length] = new ErrorClass(cmd,error);
	}
	else
	{
		ErrorArray[index_].msg = error;
	}

}
/**
 * 减去一条输入错误信息
 */
function recError(cmd)
{
	var index_ = -1;
	for (var i=0;i<ErrorArray.length;i++)
	{
		if (ErrorArray[i].cmd==cmd)
		{
			index_ = i;
			break;
		}
	}
	if (index_>-1)
	{
		ErrorArray.splice(index_,1);
	}
}
/**
 * 获取所求值是否在错误列表中
  */
function getCheckRsultFromCmd(cmd)
{
	var index_ = -1;
	for (var i=0;i<ErrorArray.length;i++)
	{
		if (ErrorArray[i].cmd==cmd)
		{
			index_ = i;
			break;
		}
	}
	if (index_>-1)
	{
		return false;
	}
	else
	{
		return true;
	}
}
/**
 * 描述错误信息的基类
 * @param {Object} cmd 对应的数据库字段名称
 * @param {Object} msg 出错提示信息
 */
function ErrorClass(cmd,msg)
{
	this.cmd = cmd;
	this.msg = msg;
}



/*下面注册待检测控件*/
/*提交前的本地检测*/
function checkAllLocation(e,index_)
{
	var cmd = e.id;
	var value_ = e.value;
	var showDiv = $get(cmd+"_info");
	var isChecked = true;//检测结果
	//初始化检测结果
	isChecked = getCheckRsultFromCmd(cmd);
	if (!cmd)
	{
		return false;
	}
	//首先检测空值
	if (!Controls[index_].isAllowNull && value_=="")
	{
		showDiv.style.color = "red";
		showDiv.innerHTML = Controls[index_].name + " 必填（或选择）";//**********************************
		addError(cmd,showDiv.innerHTML);
		isChecked = false;
	}
	//检测正则表达式
	if (isChecked && (value_!=""))
	{
		var isChecked = RegExpCheck(value_,Controls[index_].regExp);
		if (!isChecked)
		{
			showDiv.style.color = "red";
			showDiv.innerHTML = Controls[index_].errorMsg;
			addError(cmd,Controls[index_].errorMsg);
			isChecked = false;
		}
	}
	if ((cmd=="passwd" || cmd=="passwd2") && isChecked)
	{
		checkPassword();
	}
}
/*下面注册待检测控件*/
function doBlur(e,index_)
{
	focusCmd = "";
	e.className = "text_input"
	var cmd = e.id;
	var value_ = e.value;
	var showDiv = $get(cmd+"_info");
	var isChecked = true;//检测结果
	//alert("slakfd sd");
	//初始化检测结果
	//isChecked = getCheckRsultFromCmd(cmd);
	//首先检测空值
	if (!Controls[index_].isAllowNull && value_=="")
	{
		showDiv.style.color = "red";
		showDiv.innerHTML = Controls[index_].name + " 必填（或选择）";//**********************************
		//addError(cmd,showDiv.innerHTML);
		isChecked = false;
	}
	else
	{
		showDiv.style.color = "gray";
		showDiv.innerHTML = Controls[index_].note;
		recError(cmd);
		isChecked = true;
	}
	//检测正则表达式
	if (isChecked && (value_!=""))
	{
		var isChecked = RegExpCheck(value_,Controls[index_].regExp);
		if (isChecked)
		{
			showDiv.style.color = "green";
			showDiv.innerHTML = "<img src='/new_images/right.gif' style='height:12px;' />" + Controls[index_].name + Controls[index_].rightMsg;
			recError(cmd);
			isChecked = true;
		}
		else
		{
			showDiv.style.color = "red";
			showDiv.innerHTML = Controls[index_].errorMsg;
			addError(cmd,Controls[index_].errorMsg);
			isChecked = false;
		}
	}
	if ((cmd=="passwd" || cmd=="passwd2") && isChecked)
	{
		checkPassword();
	}
	//服务器验证
	if (isChecked && Controls[index_].isCheckServer)
	{
		
		checkFromServer(cmd);
	}
}
function doMouseover(e)
{
	e.className = "Text_hover"
}
function doMouseout(e)
{
	if (focusCmd!=e.id)
	{
		e.className = "text_input"
	}
}
function doFocus(e,index_)
{
	e.className = "Text_hover"
	focusCmd = e.id;
	//alert(focusCmd);
	var showDiv = $get(e.id+"_info");
	showDiv.style.color = "#709002";
	showDiv.innerHTML = Controls[index_].note;
}
function RegElement(e,index_)
{
	if (_this!=null)
	{
		_this=null;
	}
	var _this=this;
	this.e = e;
	this.index_ = index_;
	//alert(this.e.id);
	_this.e.attachEvent("onblur",function(){doBlur(_this.e,_this.index_)});
	_this.e.attachEvent("onfocus",function(){doFocus(_this.e,_this.index_)});
	_this.e.attachEvent("onmouseover",function(){doMouseover(_this.e,_this.index_)});
	_this.e.attachEvent("onmouseout",function(){doMouseout(_this.e,_this.index_)});
}

/**
 * 下面方法loadControls()为加载表单控件，生成表单检测集，并设置检测方法及正则表达式等
 */
var Controls=new Array();
var focusCmd = "";
function loadControls()
{
	//帐号信息
	Controls[Controls.length] = new ControlHtc("com_no","帐号","text","4-20位；只限数字开头的数字(0-9)和英文(a-z),不区分大小写；","格式错误(请填写字母开头的4~20位字母或数字，中划线-或下划线_)","输入正确",false,"^[a-zA-Z]{1}[\\w\\-]{3,19}$",true);//^[a-zA-Z]{1}\\w{3,19}$
	
	Controls[Controls.length] = new ControlHtc("passwd","密码","text","6-20位的数字或字母，区分大小写","格式错误(6~20个字母或数字)","输入正确",false,"^\\w{6,20}$",false);
	Controls[Controls.length] = new ControlHtc("passwd2","验证密码","text","再次输入密码，6~20个字母或数字","格式错误(6~20个字母或数字)","输入正确",false,"^\\w{6,20}$",false);

	Controls[Controls.length] = new ControlHtc("check_no","安全验证码","text","请输入左边图片显示的文字","格式错误","输入正确",false,"^\\w{2,10}$",true);

	Controls[Controls.length] = new ControlHtc("e_mail","E-mail","text","格式如：abcd@hotmail.com","格式错误(abcd@hotmail.com)","输入正确",false,"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$",true);
	//姓名联系方式
	Controls[Controls.length] = new ControlHtc("linkman","真实姓名","text","联系人的真实姓名","格式错误","输入正确",false,"",false);

	Controls[Controls.length] = new ControlHtc("sex","联系人性别","text","联系人性别","格式错误","输入正确",false,"^\\d{1,2}$",false);
	
	Controls[Controls.length] = new ControlHtc("comm_fax","传真号码","text","传真号码(数字)","电话号码错误，请填写数字","输入正确",true,"",false);
	Controls[Controls.length] = new ControlHtc("mobile_phone","手机","text","建议您填写，以便潜在及时联系(数字)","手机号码错误，请填写数字","输入正确",true,"",false);
	Controls[Controls.length] = new ControlHtc("comm_phone","电话号码","text","如010-12345678或13611112222 ","电话号码错误","输入正确",true,"",false);
	//公司信息
	
	
	Controls[Controls.length] = new ControlHtc("com_name","公司名称","text","*国内注册企业请用中文填写在工商局注册的全称(4~50个字符)。","格式错误","输入正确",false,"",true);
	Controls[Controls.length] = new ControlHtc("website","公司网址","text","公司网址，以http://开头","格式错误，请以http://开头","输入正确",true,"^http://",false);
	Controls[Controls.length] = new ControlHtc("address","经营地址","text","请填写完整地址","格式错误","输入正确",true,"",false);
	Controls[Controls.length] = new ControlHtc("postal_code","邮政编码","text","中国地区用户请填写规范的6位邮政编码","格式错误","输入正确",true,"^\\d{4,8}$",false);
	


//alert(Controls.length);
for (var i=0;i<Controls.length;i++)
	{
		var e = $get( Controls[i].cmd);
		new RegElement(e,i);
		//显示提示信息
		$get(Controls[i].cmd+"_info").style.color="gray";
		$get(Controls[i].cmd+"_info").innerHTML = Controls[i].note;
	}
	//设置主要采购或销售的可见性
	
}
//获取控件在Array中的index
function getIndexOf(cmd)
{
	var result=-1;
	for (var i=0;i<Controls.length;i++)
	{
		if (Controls[i].cmd==cmd)
		{
			result=i;
		}
	}
	return result;
}

function setSex(sex)
{
	$get("text_com_sex").value = sex;
}
function setComType(com_type)
{
	$get("text_com_type").value = com_type;
}
function setComModel(com_model)
{
	$get("text_com_model").value = com_model;
	if (com_model==1)
	{
		$get("sellPanel").style.display = "block";
		$get("buyPanel").style.display = "none";
	}
	else if (com_model==2)
	{
		$get("sellPanel").style.display = "none";
		$get("buyPanel").style.display = "block";
	}
	else if (com_model==3)
	{
		$get("sellPanel").style.display = "block";
		$get("buyPanel").style.display = "block";
	}
}
function setRegion()
{
	var smt_province = $get("smt_province");
	var smt_region = $get("smt_region");
	if (smt_province.selectedIndex>0)
	{
		if (smt_region.options.length>1)
		{
			$get("text_smt_Region").value = smt_region.options[smt_region.selectedIndex].value;
		}
		else
		{
			$get("text_smt_Region").value = smt_province.options[smt_province.selectedIndex].value;
		}
		recError("smt_Region");
		$get("smt_Region_div").style.color = "green";
		$get("smt_Region_div").innerHTML = "<img src='webimg/right.gif' style='height:12px;' /> 地区选择正确";
	}
	else
	{
		$get("text_smt_Region").value="";
		addError("smt_Region"," 请正确选择所在地区");
		$get("smt_Region_div").style.color = "red";
		$get("smt_Region_div").innerHTML = " 请正确选择所在地区";
	}
}

/**
 * 检测的控件描述类
 * @param {Object} cmd 对应数据库字段
 * @param {Object} con_name 字段名称
 * @param {Object} con_type 控件类型,text,checkbox
 * @param {Object} con_note 描述
 * @param {Object} error_msg 出错时的提示
 * @param {Object} right_msg 正确时的提示
 * @param {Object} can_null 是否允许为空
 * @param {Object} chk_exp 正则表达式
 * @param {Object} isCheckServer 是否服务器检测
 */
function ControlHtc(cmd,name,type,note,errorMsg,rightMsg,isAllowNull,regExp,isCheckServer)
{
	
	this.cmd=cmd;
	this.name=name;
	this.type=type;
	this.note=note;
	this.errorMsg=errorMsg;
	this.rightMsg=rightMsg;
	this.isAllowNull=isAllowNull;
	this.regExp=regExp;
	this.isCheckServer=isCheckServer;
}

//正则验证
function RegExpCheck(value,expression)
{
		var thisChecked=true;
		var thisExp=new RegExp(expression);
		//var m=value.match(thisExp);
		if (!thisExp.test(value))
		{
			thisChecked=false;
		}
		return thisChecked;
}

Object.prototype.attachEvent=function(method,func)
{
 if(!this[method])
  this[method]=func;
 else
  this[method]=this[method].attach(func);
}


Function.prototype.attach=function(func){
 var f=this;
 return function(){
  f();
  func();
 }
}

function $get(id_)
{
	var e = document.getElementById(id_);
	if (e==null)
	{
		e = document.getElementsByName(id_);
	}
	return e;
}
