(function($){
	
	
	$.fn.makingwareFormValidator = function() {
		
		var validatorExpression = {
			'.name': /^.+$/,			
			'.email': /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/,
			'.address': /^.+$/m,
			'.zip': /^\d+$/,
			'.tel': /^\d+$/,
			'.mobile': /^\d+$/,
			'.password': /^.{6,16}$/,
			'.conpassword': /^.{6,16}$/,
			'.current_password': /^.{6,16}$/,
			'.required': /^.+$/
		}
		
		var validatorMessage = {
			'.name': {error: '必填', message: '*'},
			'.email': {error: '邮箱格式不正确', message: "*请输入常用的邮箱，将用来找回密码、接收订单通知等"},
			'.address': {error: '必填', message: "*不需要重复填写省/市"},
			'.tel': {error: '', message: "此项为必填选项"},
			'.mobile': {error: '此项必填', message: ""},
			'.password': {error: '密码长度只能在6-16位字符之间', message: '6-16个字符，区分大小写，不要使用您的姓名或ID'},
			'.conpassword': {error: '请与以上密码相同', message: "请与以上密码相同"},
			'.current_password': {error: '密码长度只能在6-16位字符之间', message: "请输入当前账户的登录密码"},
			'.required': {error: '必填', message: "*"}
		}
		
		var escapeNameExpression = /([^\\])([\[\]]){1}/g;
		var escapeNameReplacement = '$1\\$2';

		return this.each(function() {
			$this = $(this);
			$this.find('.input-text').focus(function() {
				$(this).addClass('focus');
			});
			$this.find('.input-text').blur(function() {
				$(this).removeClass('focus');
			});
			for(var expression in validatorExpression) {
				var element = $(expression, this);
				element.data('expression', expression);
				element.data('validateRegex', validatorExpression[expression]);
				element.change(function() {
					var $this = $(this);
					var escapeName = $this.attr('name').replace(escapeNameExpression, escapeNameReplacement);
					var expression = $this.data('expression');
					var validateRegex = $this.data('validateRegex');
					var messageElement = $('#' + escapeName + '_error');
					if (validateRegex.test($this.val())) {
						messageElement.hide();
						$this.removeClass('error');
					} else {
						if(undefined != validatorMessage[expression]) {
							messageElement.html(validatorMessage[expression].error);
						}
						messageElement.show();
						$this.addClass('error');
					}
				});
				element.focus(function() {
					var $this = $(this);
					var escapeName = $this.attr('name').replace(escapeNameExpression, escapeNameReplacement);
					var expression = $this.data('expression');
					if(undefined != validatorMessage[expression]) {
						$('#' + escapeName + '_message').html(validatorMessage[expression].message);
					}
					$('#' + escapeName + '_error').hide();
					$this.removeClass("error");
					$('#' + escapeName + '_message').show();
				});
				element.blur(function() {
					var $this = $(this);
					var escapeName = $this.attr('name').replace(escapeNameExpression, escapeNameReplacement);
					$('#' + escapeName + '_message').hide();
				});
			}
			$this.submit(function(event) {
				$this = $(this);
				$this.find('input:not(.skip), select:not(.skip), textarea:not(.skip)').trigger('change');
				if($this.find('.error:visible').length) {
					return false;
				}
			});
		})

	}
})(jQuery);
