/* **********************************************
 * jquery Form Validation
 * Date: 		10/25/2009
 * Last Update 12/28/2009
 * Version		0.6
// ********************************************** */

(function ($) {
	$.fn.validate = function (options) {

		var defaults = {
			 tooltip			: 'false'
			,shaker			: 'true'
			,shakers			: 5
			,keyUp			: false
			,returnClass	: false
		};
		var opts = $.extend(defaults, options);

		return this.each(function () {
			var $form = $(this);
			
			$form.submit(function(){

				var error 	= false;
				var $inputs = $(this).find('input, select, textarea, checkbox').filter('.required');
				var $errors = $(this).find('input').filter('.error');
			
				var values = {};
				
				// on key up checker
				if(opts.keyUp){
					$inputs.each(
						function(){
							$this = $(this);
							$this.keyup(
								function(event){
									var $val = $(this).val();
						
									if($val != ''){
										$(this).removeClass('error');
									}else{
										$(this).addClass('error');
									}
								}
							);
						}
					);
				}
				
				// input checker
				$inputs.each(function(i, el) {
					var $this 	= $(el);
					var type		= $this.attr('type');

					var at 		= $this.val().indexOf("@");
					var dot 		= $this.val().indexOf(".");

					if( 
						( !$this.val() ) 
						|| 
						( (type == 'checkbox') && (! $this.is(':checked')) ) 
						|| 
						( ($this.hasClass('mail')) && ( $this.val() == '' || (at == -1) || (dot == -1) ) )
					){
   					$this.addClass('error');
   					if(opts.shaker){
   						for (i=0; i<opts.shakers; i++) { 
   							$this.animate({ marginLeft: "2px"}, 100 );
   							$this.animate({ marginLeft: "-2px"}, 100 );
   						}
   						$this.animate({ marginLeft: "0"}, 100 );
   					}
   					error = true;
   					$this.parent().children('span.required').show();
   				}else{
   					$this.removeClass('error');
   					$this.parent().children('span.required').hide();
   				}

					
				});

				// form submit
				if( !error ){
					if(!opts.returnClass){
						$form.submit();
					}else{
						$form.addClass('validato');
					}
					return false;
				}else{
					return false;
				}

			});
		});
	};
})(jQuery);