Scusate indentazione ...
codice:
(function($){  
  $.fn.formValidate = function() {  
    var config = {
      'shaker'            : true,
      'shakers'           : 5,
      'showMessage'       : false,
      'errorClass'        : 'error',
      'requiredClass'     : 'required',
      'requiredMail'      : 'mail',
      'requiredNumber'    : 'numeric',
			'url'               : 'include/ajax/sendEmail.php',
			'type' 							: 'post',
			'cache'							: false,
			'btnSend'						: 'send',
			'dataType' 					: 'json',
			'global' 						: false,
      messages : {
        'blank'           : 'Campo Richiesto',
        'check'           : 'Devi accettare',
        'email'           : 'Indirizzo e-amil non valido',
        'numbe'           : 'Il campo deve essere numerico',
				'conf'						: 'Acconsenti all\'utilizzo dei propri dati personali per l\'invio di informazioni relativamente agli argomenti trattati da questo sito. KickBoxing team tratterà le informazioni fornite nel rispetto della normativa sulla privacy, ai sensi dell\'art. 13 del decreto legislativo del 30/06/2003 n. 196, che abroga e sostituisce la legge del 31/12/1996 n. 675 (tutela della privacy). '
      }
		}
	  var options = $.extend(config, options);  
	  
		return this.each(function() {  
			var error=false;
			
			$(this).find('#'+config.btnSend+'').click(function(){
				if(!confirm(config.messages.conf) ) return false
				else {
					var espressione = /^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$/;
					var form = $(this).parent();
					form.submit(function(){
				  var validMe = {'errors':false}
				  //cicliamo tutti gli input trovati
			    $(this).find('.'+config.requiredClass+'').each(function() {
						var $input 		= $(this);
						var type			= $input.attr('type');
						var groupName 	= $input.attr('name');
						//controlliamo che il contenuto dell'input non sia vuoto
						if(!$input.val()){
							error						= true;
							errorType				= 'blank';
							validMe.errors 	= true;
						//se si tratta di una checkbox che non è stata selezionata
						} else if( (type == 'checkbox') && ( !$input.is(':checked') ) ){
							error						= true;
							errorType				= 'check';
							validMe.errors  = true;
						//se si tratta di una email controlliamo che ci sia il simbolo "@" e "."
						//} else if( $input.hasClass(config.requiredMail) && ( ($input.val().indexOf('@') == -1) || ($input.val().indexOf('.') == -1) ) || !espressione.test($input.val()) ){
						} else if($input.hasClass(config.requiredMail) ){
							if(!espressione.test($input.val()) || ($input.val().indexOf('@') == -1) || ($input.val().indexOf('.') == -1) ) {
								error						= true;
								errorType				= 'email';
								validMe.errors	= true;
							}
						//se si tratta di un input numerico controlliamo che il valore inserito sia di questo tipo
						} else if( ($input.hasClass(config.requiredNumber)) && isNaN($input.val()) ){
							error						= true;
							errorType				= 'numbe';
							validMe.errors	= true;
						//se non è nessuno di questi casi resettiamo l'errore
						} else {
							error 					= false;
							errorType				= null;
						}
						// notifichiamo l'utente dell'errore di validazione
						if(error){
							// assegnamo la classe di errore all'input
							$input.addClass(config.errorClass);
							// se è abilitata l'opzione shaker, shakeriamo un po' l'input !!!!
							if(config.shaker){
								for (i=0; i<config.shakers; i++) {
									$input.animate({ marginLeft: "5px"}, 100 );
									$input.animate({ marginLeft: "-5px"}, 100 );
								}
								$input.animate({ marginLeft: "0"}, 100 );
							}
							// se è abilitata l'opzione showMessage mostriamo anche un messaggio
							if(config.showMessage){
								// il messaggio viene mostrato solo se non è già stato mostrato
								if($input.next('label').length == 0){
									$input.after('<label class="'+config.errorClass+'">'+config.messages[errorType]+'</label>');
								} else{
									$input.next('label').html(config.messages[errorType]);
								}
							}
						}

						// se è abilitata l'opzione showMessage e non ci sono errori togliamo il messaggio
					if(!error && $input.next('label').length != 0) $input.next('label').remove();
					// se l'input che stiamo controllando non contiene errori ed ha la classe error, la togliamo
			   	if(!error && $input.hasClass(config.errorClass)){
			   	  $input.removeClass(config.errorClass);
			   		if(config.removeCustom) config.removeCustom($input);			
					}
			    });
					// se non ci sono errori procedo con il submit del formulario
			    if(error) return false;
			    else {
						
						$.ajax({
							cache 		: config.cache,
							url				: config.url,
							data 			: $(this).serialize(),
							dataType  : config.dataType,
							type			: config.type,
							global		: config.global,
							beforeSend: function(){},
							error			:	function(){},
							success		: function(data){
								switch(data.succ){
								  case 0: 
									  //incorenza del codice captcha
										alert('Il codice di controllo non coincide');
										$(form).find('.code').val('');
										$(this).dequeue();
										break;
									case 1: 
									  //mail inviata
										$(form).find('.required').val("");
										alert('eMail inviata correttamente');
										$(this).dequeue();
										break;
									default:
									  //errore nell'invio
										$(form).find('.code').val('');
										alert('eMail non inviata a causa di un errore tecnico');
										$(this).dequeue();
										break;
								}
							}
						});
						return false;
					}	
				});
				}
			});	
		});
	}
})(jQuery);