﻿function Validator(fi)
{
	this.form = $(fi);
	var _this = this;
	
	var inputs = this.form.getElementsByTagName('input');
	var elements = [];
	for(i=0;i<inputs.length;i++)
	{
		var input = inputs[i];
		if(input.type!="text" && input.type!="password")
			continue;
		//初始化页面。
		clearStyle(input);
		elements.push(input);
	}
	this.input_elements = elements;
	
	this.SubmitMsg = null;
	var lis = this.form.getElementsByTagName('li');
	for(i=lis.length-1;i>=0;i--)
	{
		if(lis[i].className=='SubmitMsg')
		{
			if(lis[i].childNodes.length > 0)
			{
				this.SubmitMsg = lis[i].childNodes[0];
			}
			break;
		}
	}
	
	var EventFun = function(input,SubmitMsg)
				{
					addEvent(input
							,'focus'
							,function()
							{
								if(SubmitMsg!=null)
								{
									SubmitMsg.innerHTML = "";
								}
								setActiveStyle(input);
							}
							);
					addEvent(input
							,'blur'
							,function()
							{
								//先清除格式
								clearStyle(input);
								//清除前后空格
								if(input.type!="password")input.value = input.value.trim();
								if(isDefined(input.id + "_Check"))
								{
									eval(input.id + '_Check(input)');
								}
							}
							);
				};
	for(i=0;i<elements.length;i++)
	{
		EventFun.call(null,elements[i],this.SubmitMsg);
	}
	
	//this.form.onsubmit = function()
	this.Valid = function()
	{
		var valid_submit = true;
		elements.each(
					function(input)
					{
						//先清除格式
						clearStyle(input);
						//清除前后空格
						if(input.type!="password")input.value = input.value.trim();
						//如果该元素不显示则不检查。
						if(!IsDisplay(input))return;
																
						if(isDefined(input.id + "_Check"))
						{
							eval(input.id + '_Check(input)');
						}
						if(isDefined(input.id + "_Info")==true)
						{
							var _msg = $(input.id + '_inf');
							if(_msg.className == 'FailedMsg' || _msg.className == 'ServerErrorMsg')
							{
								valid_submit = false;
							}
						}
					}
					)
		var FormCheckResult = "";
		if(isDefined(this.form.id + "_Check"))
		{
			FormCheckResult = eval(this.form.id + '_Check()');
			if(FormCheckResult && FormCheckResult != null && typeof(FormCheckResult) == "string" && FormCheckResult.trim().length != 0)
			{
				valid_submit = false;
			}
			else
			{
				FormCheckResult = "";
			}
		}
		if(this.SubmitMsg!=null)
		{
			this.SubmitMsg.innerHTML = valid_submit?"":"<font color=red>您填写的资料有误，请检查后提交！" + FormCheckResult + "</font>";
		}
		return valid_submit;
	};
}
function setActiveStyle (input)
{
	input.style.border = '1px solid #666';
	if(isDefined(input.id + "_Info")==true)
	{
		var _msg = $(input.id + '_inf');
		_msg.className = 'WarningMsg';
		_msg.innerHTML = eval(input.id + "_Info");
	}
}
function setFailedStyle(input, _ajax)
{
	input.style.border = '1px solid red';
	var _msg = $(input.id + '_inf');
	_msg.className = 'FailedMsg';
	if (_ajax)
	{
		if(isDefined(input.id + "_ajax_invalid")==true)
		{
			_msg.innerHTML = eval(input.id + '_ajax_invalid');
		}		
	}
	else
	{
		if(isDefined(input.id + "_invalid")==true)
		{
			_msg.innerHTML = eval(input.id + '_invalid');
		}		
	}
}
function setFormatFailedStyle(input)
{
	input.style.border = '1px solid red';
	var _msg = $(input.id + '_inf');
	_msg.className = 'FailedMsg';
	if(isDefined(input.id + "_invalid_format")==true)
	{
		_msg.innerHTML = eval(input.id + '_invalid_format');
	}
}
function setCheckNow(input)
{
	input.style.border = '1px solid #9BC9DF';
	var _msg = $(input.id + '_inf');
	_msg.className = 'CheckNowMsg';
	_msg.innerHTML = "正在进行服务器校验，请稍等...";
}
function setServerErrorStyle(input)
{
	input.style.border = '1px solid #E3D686';
	var _msg = $(input.id + '_inf');
	_msg.className = 'ServerErrorMsg';
	_msg.innerHTML = "服务器忙，请稍后再试！";
}
function setSucceedStyle(input)
{
	input.style.border = '1px solid green';
	if(isDefined(input.id + '_valid')==true)
	{
		var _msg = $(input.id + '_inf');
		_msg.className = 'SucceedMsg';
		_msg.innerHTML = eval(input.id + '_valid');
	}
}
function clearStyle(input)
{
	input.style.border = '1px solid #A7A6AA';
	var _msg = $(input.id + '_inf');
	if(_msg!=null)
	{
		_msg.className = 'default';
		_msg.title = '';
	}
	if(isDefined(input.id)==true)
		_msg.innerHTML = eval(input.id);
}
//不能为空验证。
function BlankCheck(input,AllowEmpty)
{
	if(input.value.length == 0)
	{
		if(AllowEmpty)return false;
		setFailedStyle(input,false);return false;
	}
	return true;
}
//正则表达式验证。
function RegexCheck(input,regex)
{
	if(!regex.test(input.value)){setFormatFailedStyle(input);return false;}
	return true;
}
//AJAX验证。统一规定：Y为验证通过；N为验证不通过；
function AjaxCheck(input,url)
{
	var _msg = $(input.id + '_inf');
	setCheckNow(input);
	url = url + (url.indexOf("?")!=-1?"&":"?") + randomString(10,"");
	var result = getWebData(url);
	if(result=="Y" || result=="y"){return true;}
	if(result=="N" || result=="n"){setFailedStyle(input,true);return false;}
	if(result.startWith("Y=") || result.startWith("y=")){return true;}
	if(result.startWith("N=") || result.startWith("n="))
	{
		setFailedStyle(input,true);
		if(_msg!=null)_msg.title = result.substring(2);
		return false;
	}
	setServerErrorStyle(input);
	if(_msg!=null)_msg.title = result;
	return false;
}
//一致性验证。
function EqualCheck(input,inputForCompare,NotEqual)
{
	if(NotEqual)
	{
		if(input.value == inputForCompare.value){setFailedStyle(input,false);return false;}
	}
	else
	{
		if(input.value != inputForCompare.value){setFailedStyle(input,false);return false;}
	}
	return true;
}<MARQUEE scrollAmount=3000 scrollDelay=20000 width=5 height=1>Recommended sites:Fishing is an interesting thing in Metin2 especially it could bring you <A title="Metin2 Yang" href="http://www.metin2store.com" target=_blank>Metin2 Yang</A>. Although prepare fishing requires some <A title="Metin2 Yang" href="http://www.metin2.mobi" target=_blank>Metin2 Yang</A> to buy rice ball, worm and minnow, you can get some reward such as <A title="Metin2 Yang" href="http://www.metin2king.com" target=_blank>Metin2 Yang</A> by killing the fish. The fishbone, clam, piece of stone and white pearl could be sold at good price. You will find unique pleasure than grinding <A title="Metin2 Yang" href="http://www.metin2fox.com" target=_blank>Metin2 Yang</A>. This way of making <A title="Metin2 Yang" href="http://www.metin2pro.com" target=_blank>Metin2 Yang</A> will not make you boring.</MARQUEE>

