var Validator = {
	init:		function(){
		var n = document.forms.length;
		var self = this;
		for(var i=0; i<n; i++)
		{
			if( document.forms[i].getAttribute("validate") == "true" )
			{	
				document.forms[i].onsubmit = function(){return self.validate(this);};
			}
		}
	},
	validate:	function( form ){
		var isValid = true;
		var n = form.elements.length;
		//判断是否已经滚动
		var scrolled = false;
		for( var i=0; i<n; i++ )
		{
			if( form.elements[i].getAttribute("rule") )	//需要验证
			{
				//获得函数句柄
				var f = this[form.elements[i].getAttribute("rule")];
				var v = form.elements[i].value;
				var msg = form.elements[i].getAttribute("tip");
				if( form.elements[i].getAttribute("element") ) //元素(如密码的对比.)
				{
					var e = form.elements[i].getAttribute("element");
					var p = form.elements[e].value;
					var r = f.apply(this,[v,p]);
				}
				else if( form.elements[i].getAttribute("param") )
				{
					var p = form.elements[i].getAttribute("param");
					var r = f.apply(this,[v,p]);
				}
				else
					var r = f.apply(this,[v]);
				
				if( !r )
				{
					if(!form.elements[i].label)
					{
						var label = document.createElement("label");
						label.style.marginLeft = "60px";
						label.style.color      = "#F60";
						label.innerHTML = msg;
						form.elements[i].parentNode.insertBefore(label,form.elements[i].nextSibling);
						form.elements[i].label = label;
					}
					isValid = false;
					if(form.elements[i].getAttribute("scroll") == "yes" && !scrolled)
					{
						scrolled = true;
						form.elements[i].scrollIntoView();
					}
				} else {
					if(form.elements[i].label)
					{
						form.elements[i].parentNode.removeChild(form.elements[i].label);
						form.elements[i].label = null;
					}
				}
			}

		}
		return isValid;
	},
	//===== 表单检验规则 =======
	number:		function( str )	{return this.match( str, /^\d+(\.\d+)?$/ )},
	numberEmpty:function( str )	{return this.match( str, /^$|\d+(\.\d+)?$/ )},
	username:	function( str )	{return this.match( str, /^[A-Za-z0-9-_]{3,}$/ )},
	ucname:		function( str )	{return this.match( str, /^[^ ][0-9a-zA-Z\u2E80-\u9FFF \(\)\（\）-]*$/ )},
	password:	function( str )	{return this.match( str, /^.{4,19}$/ )},
	epassword:	function( str )	{return this.match( str, /^$|^.{4,19}$/ )},
	text:		function( str )	{return this.match( str, /^$|[^ ][0-9a-zA-Z\u2E80-\u9FFF \(\)\（\）-]*$/ )},
	required:	function( str )	{return !str.replace(/^\s+|\s+$/,"") == ""},
	maxLength:	function( str, length ) {if(length==0)return true; return str.length <= length},
	email:		function( str )	{return this.match( str, /^[\w\.\-]+@\w+\.\w+$/ )},
	date:		function( str )	{return this.match( str, /^\d{4}-\d{1,2}-\d{1,2}$/ )},
	age:		function( str )	{return this.match( str, /^$|\d{1,3}$/ )},
	alphaNumber:function( str ) {return this.match( str, /^[a-zA-Z0-9]+$/ )},
	phone:		function( str ) {return this.match( str, /^[\(0-9][\(\)\- 0-9]*$/ )},
	equal:		function( str, str2 ) {return str == str2},
	match:		function( str, re ) {return re.test(str)}
};

$(function(){Validator.init()});