// 字符验证   中文字、英文字母、数字和下划线
  jQuery.validator.addMethod("word", function(value, element) {   
    return this.optional(element) || /^[\u0391-\uFFE5\w]+$/.test(value);   
  }, "名称只能包括中文字、英文字母、数字和下划线"); 
    
  // 增加只能是字母和数字的验证     
    jQuery.validator.addMethod("chrnum", function(value, element) {     
      return this.optional(element) || (/^([a-zA-Z0-9]+)$/.test(value));     
    }, "只能输入数字或字母"); 
   
 // 增加只能是字母
    jQuery.validator.addMethod("english", function(value, element) {     
      return this.optional(element) || (/^([a-zA-Z]+)$/.test(value));     
    }, "只能输入英文"); 
      
   
  // 增加只能是中文的验证     
    jQuery.validator.addMethod("chinese", function(value, element) {     
      return this.optional(element) || (/^[\u0391-\uFFE5]+$/.test(value));     
    }, "只能输入中文"); 
    
    // 中文或者字母
    jQuery.validator.addMethod("ChineseOrEnglish", function(value, element) {
    	return this.optional(element) || (/^([\u0391-\uFFE5]|[a-zA-Z])*$/.test(value)); 
    }, "只能输入中文或者是字母");

    // 非负的浮点型
    jQuery.validator.addMethod("HaveZeroFloat", function(value, element) {
    	return this.optional(element) || (/^\d+(\.\d+)?$/.test(value)); 
    }, "只能输入非负数的浮点类型的值(包括零)");
  
    
  // 邮政编码验证   
  jQuery.validator.addMethod("isZipCode", function(value, element) {   
    var tel = /^[0-9]{6}$/;   
    return this.optional(element) || (tel.test(value));   
  }, "请正确填写您的邮政编码");  
   //电话验证 
   $.validator.addMethod("isPhone", function(value, element) {
//	   var tel = /^0\d{2}[-]?\d{8}$|^0\d{3}[-]?\d{7}$|^\d{7,8}$/;
	   var tel = /^(\d{3,4}-?)?\d{7,9}$/; // g
	   return this.optional(element) || (tel.test(value));
	} , "电话号码格式不对."  ); 
	  
   // 手机号码验证   
   jQuery.validator.addMethod("isMobile", function(value, element) {   
     var length = value.length;   
     return this.optional(element) || (length == 11 && /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/.test(value));   
   }, "请正确填写您的手机号码"); 
	  
   // 电话号码和手机号码同时验证
   jQuery.validator.addMethod("isPhoneOrMobile", function(value, element) {
	   var tel = /^(\d{3,4}-?)?\d{7,9}$/;
	   var mob = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
	   var length = value.length;
	   return this.optional(element) || tel.test(value) || (length == 11 && mob.test(value))/**/;
   }, "请正确填写您的电话号码或者手机号码");
   
 // 电话号码验证   正则有点问题
 jQuery.validator.addMethod("isPhone2", function(value, element) {   
   var tel = /^(\d{3,4}-?)?\d{7,9}$/g;   
   return this.optional(element) || (tel.test(value));   
 }, "请正确填写您的电话号码"); 
 jQuery.extend(jQuery.validator.messages, {
	    required: "必选字段",
		remote: "请修正该字段",
		email: "请输入正确格式的电子邮件",
		url: "请输入合法的网址",
		date: "请输入合法的日期",
		dateISO: "请输入合法的日期 (ISO).",
		number: "请输入合法的数字",
		digits: "只能输入整数",
		creditcard: "请输入合法的信用卡号",
		equalTo: "请再次输入相同的值",
		accept: "请输入拥有合法后缀名的字符串",//jpg|doc
		maxlength: jQuery.validator.format("请输入一个长度最多是 {0} 的字符串"),
		minlength: jQuery.validator.format("请输入一个长度最少是 {0} 的字符串"),
		
		maxHeight: $.validator.format("请选择一个高度最多是 {0}"),
		maxWidth: $.validator.format("请选择一个宽度最多是 {0}"),
		
		minHeight: $.validator.format("请选择一个高度最少是 {0}"),
		minWidth: $.validator.format("请选择一个宽度最少是 {0}"),
		
		rangelength: jQuery.validator.format("请输入一个长度介于 {0} 和 {1} 之间的字符串"),
		range: jQuery.validator.format("请输入一个介于 {0} 和 {1} 之间的值"),
		max: jQuery.validator.format("请输入一个最大为 {0} 的值！"),
		min: jQuery.validator.format("请输入一个最小为 {0} 的值")
	});
 
 
/**
 * by dragon
 */
(function($) {
 $.extend({
 	metadata : {
 		defaults : {
 			type: 'class',
 			name: 'metadata',
 			cre: /({.*})/,
 			single: 'metadata'
 		},
 		setType: function( type, name ){
 			this.defaults.type = type;
 			this.defaults.name = name;
 		},
 		get: function( elem, opts ){
 			var settings = $.extend({},this.defaults,opts);
 			// check for empty string in single property
 			if ( !settings.single.length ) settings.single = 'metadata';
 			
 			var data = $.data(elem, settings.single);
 			// returned cached data if it already exists
 			if ( data ) return data;
 			
 			data = "{}";
 			
 			if ( settings.type == "class" ) {
 				var m = settings.cre.exec( elem.className );
 				if ( m )
 					data = m[1];
 			} else if ( settings.type == "elem" ) {
 				if( !elem.getElementsByTagName )
 					return undefined;
 				var e = elem.getElementsByTagName(settings.name);
 				if ( e.length )
 					data = $.trim(e[0].innerHTML);
 			} else if ( elem.getAttribute != undefined ) {
 				var attr = elem.getAttribute( settings.name );
 				if ( attr )
 					data = attr;
 			}
 			
 			if ( data.indexOf( '{' ) <0 )
 			data = "{" + data + "}";
 			
 			data = eval("(" + data + ")");
 			
 			$.data( elem, settings.single, data );
 			return data;
 		}
 	}
 });

$.fn.metadata = function( opts ){
	 return $.metadata.get( this[0], opts );
};
})(jQuery);

$.validator.setDefaults({
	submitHandler: function(form) { form.submit(); }
});

$().ready(function(){
	if ( document.forms.length == 0 )
	{
		return;
	}

	$.metadata.setType("attr", "validate_rules");
	var es = document.forms[0].elements;
	for (var i = 0; i < es.length; i++)
	{
		if ( es[i].alias )
		{
			es[i].validate_rules = es[i].alias;
		}
	}

	// validate the comment form when it is submitted
	$(document.forms[0]).validate({
			errorLabelContainer:"#errorMessagePanel",
//			meta :"validate",// 采用meta String方式进行验证（验证内容与写入class中）
			errorElement :"div",// 使用"div"标签标记错误， 默认:"label"
			wrapper:"li",// 使用"li"标签再把上边的errorELement包起来
			errorClass :"validate-error",// 错误提示的css类名"error"
			onsubmit:true,// 是否在提交是验证,默认:true
//			onfocusout:true,// 是否在获取焦点时验证,默认:true
//			onkeyup :true,// 是否在敲击键盘时验证,默认:true
			onclick:false,// 是否在鼠标点击时验证（一般验证checkbox,radiobox）
			focusCleanup:false// 当未通过验证的元素获得焦点时,并移除错误提示
	});
	
	$("#btnClear").click(function(){ // run twice or more, why?
		//alert('#btnClear');
		//$(document.forms[0]).clearForm();
		clearForm(/*this.form*/);
	});
});

function clearForm()
{
	if ( !document.forms.length ) return; // document.forms.length == 0
	
	//$($("form").get(0)).clearForm(); // clearForm.arguments[0]

	// 不采用jquery.form的清空。会把分页组件的值也清空
	var es = document.forms[0].elements;
	for ( var i = es.length - 1; i > -1; i--)
	{
		//alert('name::->' + es[i].name + '\r\ntagName::->' + es[i].tagName);
		if ( es[i].name == "paginationForm.count" || es[i].name == "_page" ) // 分页组件的值不需要清空。
		{
			continue;
		}
		
		if ( es[i].name == "ids" || es[i].name == "checkall" ) // 复选框的选择不需要清除。
		{
			continue;
		}
		
		// 下面开始清空表单值
		
		if ( es[i].tagName == "TEXTAREA"  )
			es[i].value = "";
		
		else if ( es[i].tagName == "SELECT" )
			es[i].selectedIndex = -1;

		else if ( es[i].tagName == "INPUT" )
		{
			if ( es[i].type == "hidden" || es[i].type == "button" || es[i].type == "submit" || es[i].type == "reset" )
				continue;
			
			else if ( es[i].type == "checkbox" || es[i].type == "radio" )
				es[i].checked = false;
			
			else 
				es[i].value = "";
		}
	}
}
