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

	    var element = this;  
		var errors = "";	
		
		$(".required").each(function(){
			$(this).parent().find("span").append(" *");							 
		});
		
   		$(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 complete this field</em>');	
							} else {
								
							}
							if(firstfield == ""){
								firstfield = $(this);	
							}
							parsedOK = false;
						} else if($(this).val() == ""){							
							if($("#amount").val() == "" || checkNumeric($("#amount").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">Please enter a valid amount</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"]);	
							}
										
								
						} 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");
				}				
			});*/			
			
			/* CODE FOR IN PFH.IE */
			$("input[name*=phone]").filter(".required").each(function(){
												
				if(!isValidPhone($(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 phone number 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"]);
				}				
			});
			
			/* END CODE FOR IN PFH.IE */
			
			$("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 complete all the compulsory fields',{top : "40%", callback: function(){ $("#"+$(firstfield).attr("id")).focus();	}});	
			}
			
			return parsedOK;						   
		});
		
		function isValidPhone(phonenumber){
			if (phonenumber != "") {
				var goodChars = "+- 1234567890()"
				for (i = 0; i < phonenumber.length; i++){   
					var c = phonenumber.charAt(i);
					if (goodChars.indexOf(c) < 0) return false;
				}
				return true;
			} else {
				return false;
			}
		}
	

		
		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);
		}
		
		function findAlterEgo(element){
			//alert($(element).attr("rel"));
			$("input[rel="+$(element).attr("rel")+"]").each(function(){
				if($(this).attr("id") != $(element).attr("id")){		
					var found = $(this).attr("id");
					return found;
				}
			});
		}
		
		function checkNumeric(value){
			var anum=/(^\d+$)|(^\d+\.\d+$)/
			if (anum.test(value)){
				return true;
			} else {
				return false;
			}//end if
		}
	}
})(jQuery);  
