(function($){  
	$.fn.validateForm = function(options){  
	    
		settings = jQuery.extend({
			 error_class: "error",
			 use_error_box : false,
			 useImpromptu : false
		}, options);

	    var element = this;  
		var errors = "";		
   		$(element).submit(function(){
			var firstfield = "";
			var parsedOK = true;
			$(".required").each(function(){
				switch($(this).attr("type")){
					default:								 
						if($(this).val() == ""){				
							$(this).parent().addClass(settings["error_class"]);
							if(settings["use_error_box"] == false){
								$(this).parent().find("em").filter('.err_message').remove();		
								$(this).after('<em class="err_message">You must fill this field</em>');	
							} else {
								
							}
							if(firstfield == ""){
								firstfield = $(this);	
							}
							parsedOK = false;					
						} else{
							if(settings["use_error_box"] == false){
								$(this).parent().find("em").filter('.err_message').remove();
							}//end if
							$(this).parent().removeClass(settings["error_class"]);
						}//end if
						break;
					case "file":								 
						if($(this).val() == ""){				
							$(this).parent().addClass(settings["error_class"]);
							if(settings["use_error_box"] == false){
								$(this).parent().find("em").filter('.err_message').remove();		
								$(this).after('<em class="err_message">You must select a file to upload</em>');	
							} else {
								
							}
							if(firstfield == ""){
								firstfield = $(this);	
							}
							parsedOK = false;					
						} else{
							if(settings["use_error_box"] == false){
								$(this).parent().find("em").filter('.err_message').remove();
							}//end if
							$(this).parent().removeClass(settings["error_class"]);
						}//end if
						break;
					case "checkbox":
						//is a checkbox or a radio button
						if(!$(this).is(":checked")){
							if(settings["use_error_box"] == false){
								$(this).parent().find("em").filter('.err_message').remove();		
								$(this).parent().append('<em class="err_message">You must check this field</em>');	
							} else {
								
							}
							if(firstfield == ""){
								firstfield = $(this);	
							}
							parsedOK = false;	
						}
						break;
					case "radio":
						//to do
						break;
				}//end switch
			});
			/*$("input[name*=email]:not(.required)").each(function(){
				if(!isValidEmailAddress($(this).val()) && $(this).val() != ""){					
					$(this).parent().addClass("error");
					$(this).parent().find("em").remove();		
					$(this).after('<em class="err_message">This email is not valid</em>');					
					parsedOK = false;	
				} else {
					$(this).parent().find("em").remove();
					$(this).parent().removeClass("error");
				}				
			});*/
			$("input[name*=email]").filter(".required").each(function(){
														
				if(!isValidEmailAddress($(this).val())){					
					$(this).parent().addClass(settings["error_class"]);
					if(settings["use_error_box"] == false){
						$(this).parent().find("em").filter('.err_message').remove();		
						$(this).after('<em class="err_message">This email is not valid</em>');	
					} else {
						
					}
					if(firstfield == ""){
						firstfield = $(this);	
					}
					parsedOK = false;	
				} else {
					if(settings["use_error_box"] == false){
						$(this).parent().find("em").filter('.err_message').remove();
					}//end if
					$(this).parent().removeClass(settings["error_class"]);
				}				
			});
			
			if(settings['useImpromptu'] == true && parsedOK == false){
							
				$.prompt('Please fill all the compulsory fields',{top : "40%", callback: function(){ $("#"+$(firstfield).attr("id")).focus();	}});	
			}
			
			return parsedOK;						   
		});
		
		function isValidEmailAddress(emailAddress) {
			var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
			return pattern.test(emailAddress);
		}
	}
})(jQuery);  