//jquery 1.3 and metadata plugin is needed.

jQuery.fn.simpleValidation = function(){
	var me = $(this);
	
	if($(this).length != 1){
		//we will only deal with one form at once...
		return false;
	}
	

	//helper functions
	function isEmail(input){
		var mailRegExp = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z])?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]|[0-9]{1,2})\.)(25[0-5]|2[0-4][0-9]|1[0-9]|[0-9]{1,2})\]?$)/i);
		return mailRegExp.test(input);
	}

	function isFilled(input){
		if(input.val().length > 0)
			return true;
		else
			return false;
	}
	
	function isName(input){
		if(input.val().length > 1 && input.val().length < 255)
			return true;
		else
			return false;
	}
	
	function isPostalCode(input){
		var postalCodeRegExp = new RegExp(/^\d{3} \d{2}$/);
		return postalCodeRegExp.test(input);
	}
	
	function isChecked(input){
		return input.is(':checked');
	}
	//bind the submit 
	$(this).submit(function(){
		var errors = 0;
		//clear errors
		$(this).find('.isError').each(function(){
			$(this).removeClass('isError');
		});
		
		$(this).find('.validate').each(function(){
			
			if($(this).hasClass('email'))
				if(!isEmail($(this).val()) || $(this).val() == $(this).metadata().placeholder){
					++errors;
					$(this).addClass('isError');
				}
				
			if($(this).hasClass('name'))
				if(!isName($(this)) || $(this).val() == $(this).metadata().placeholder){
					++errors;
					$(this).addClass('isError');
				}
			
			if($(this).hasClass('checkbox-required'))
				if(!isChecked($(this)) || $(this).val() == $(this).metadata().placeholder){
					++errors;
					$(this).addClass('isError');
				}
			
			if($(this).hasClass('postalcode'))
				if(!isPostalCode($(this).val()) || $(this).val() == $(this).metadata().placeholder){
					++errors;
					$(this).addClass('isError');
				}
			
			if($(this).hasClass('filled'))
				if(!isFilled($(this)) || $(this).val() == $(this).metadata().placeholder){
					++errors;
					$(this).addClass('isError');
				}
				
		});
		
		if(errors > 0){
			if($(this).metadata().validationError)
				eval(me.metadata().validationError+'(me);');
			
			return false;
		}else{
			//make sure that placeholder values isn't submited
			$(this).find('input').each(function(){
				if($(this).val() == $(this).metadata().placeholder)
					$(this).val('');
			});
			
			
			if($(this).metadata().isAjax){
				
				if($(this).metadata().prePost)
					eval(me.metadata().prePost+'(me);');
				
				var data_to_send = $(this).serialize();
				
				if($(this).metadata().isFileupload){

					$(this).ajaxSubmit({
						   type: $(this).attr('method'),
						   url: $(this).attr('action'),
						   dataType: 'json',
						   success: function(data){eval(me.metadata().success+'(data);');},
						   error: function(arg1, arg2, arg3){ eval(me.metadata().error+'(arg1, arg2, arg3);');}
					});
						
					
				}else{
					$.ajax({
						   type: $(this).attr('method'),
						   url: $(this).attr('action'),
						   data: data_to_send,
						   success: function(data){ eval(me.metadata().success+'(data);');},
						   error: function(arg1, arg2, arg3){ eval(me.metadata().error+'(arg1, arg2, arg3);');}
					});
				}		
				//prevent the submit
				return false;
			}else{
				//let the form do a normal submit!
				return true;
			}
			
		}
		//if something goes wrong, still return false to prevent submit
		return false;
		
	});

};

$(document).ready(function(){
	
	$('form.simpleValidation').each(function(){
		$(this).simpleValidation();
	});
	
});
