(function($) {
		$.fn.validate_form = function(method) {
			var $this = $(this);
			if (method == 'validate_all')
			{
				return validate_all($this);
			}
			
			return this.each(function(){
				$this.live('submit', function(event)
				{
					if(!validate_all(this))
					{
						return false;
					} else {
						return true;
					}
				});
				
				$this.find('input, textarea').each(function(){
					var $this = $(this);
					if ($this.val != 'send'){
						$this.blur(function()
						{
							validate(this);
						});
						$this.keyup(function(){
							validate(this);
						});
					}
				});
			});
				
			function validate_all(form)
			{
				var result = true;
				
				$form = $(form);
				
				$form.find('input, textarea').each(function(){
					if($(this).attr('type') != 'submit')
					{
						if(!validate(this))
						{
							result = false;
						}
					}
				});
				
				return result;
			}
			
			
			function validate(input)
			{
				var result = true;
				$input = $(input);
				
				if ($input.hasClass('validate_string'))
				{
					result = validate_string(input, 1);
				} else if ($input.hasClass('validate_email'))
				{
					result = validate_email(input);
				} else if ($input.hasClass('validate_textarea'))
				{
					result = validate_string(input, 2);
				}
				
				if (!result)
				{
					$input.addClass('error');
				} else {
					$input.removeClass('error');
				}
				return result;
			}
			
			
			
			function validate_string(input, length)
			{
				$input = $(input);
				
				if($input.val().length < length)
				{
					return false;
				}
				
				return true;
			}
			
			function validate_email(input)
			{
				$input = $(input);
				return test_expression($input.val(),"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])");
			}
			
			function test_expression(value, expression)
			{
				var regExp = new RegExp(expression,"");
        	    return regExp.test(value);
			}
		}
})(jQuery);
