// JavaScript Document
(function() {
	
	jQuery.fn.checkForm = function( settings ) {
		
		var	fcObject = this;
		
		var formRoot = jQuery(this).attr("id")
		
		options = { items : Array() };
		
		if ( settings )
		{
			options	=	jQuery.extend({ 
							submit : settings.submit,
							failedCheck : settings.failedCheck
						}, options);
		}
		if (!(options.submit)) 
		{
			alert("You didnt supply a reference to a submit button!"); 
		}
		
		jQuery(options.submit).bind("click", function(){ jQuery(this).trigger("blur") });
		
		return	fcObject.each(function(){
				
				var frmElements = jQuery( "input[@type=text],textarea", this );
				frmElements.each(function(){
					if ( jQuery( this ).attr("rel") )
					{
						options.items.push( this );
						//bind a blur event to check validation on current element ? - ***TO DO***
					}
				});
				jQuery( this ).submit(function(){
					if (check())
					{
						return true;
					}
					else
					{
						return false;	
					}
				});
		});
		
		function check()
		{
			completedWithoutErrors = true;
			for(var i = 0; i < options.items.length; i++)
			{
				if (checkItem( options.items[i] )){}
				else
				{
					completedWithoutErrors = false;
				}
			}
			return completedWithoutErrors;
		}
		
		function checkItem( element )
		{
			returnState = false;
			value = jQuery( element ).val();
			checks = (jQuery( element ).attr("rel")).split(",");
			errMsg = jQuery( element ).attr("title");
			for(var i = 0; i < checks.length; i++)
			{
				validExp = "";
				switch (checks[i])
				{	//can be appended to. Check http://regexlib.com/Default.aspx for more expressions, or make your own!
					case "required":
						validExp = /^[a-zA-Z0-9\s\-\.\@\_]+$/
						break;
					case "numeric":
						validExp = /^-?\d\s+$/
						break;
					case "alpha":
						validExp = /^[a-zA-Z]+$/
						break;
					case "alphanumeric":
						validExp = 	/^[a-zA-Z0-9]+$/
						break;
					case "postcode":
						validExp = /^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$/
						break;
					case "telephone":
						validExp = /(\s*\(?0\d{4}\)?\s*\d{6}\s*)|(\s*\(?0\d{3}\)?\s*\d{3}\s*\d{4}\s*)/
						break;
					case "email":
						var validExp = /^.+\@.+\..+$/
						break;
				}
				
				jQuery(element).next().remove();
				if ( validExp !== "" )
				{
					if ( validExp.test( value ) ) 
					{
						returnState = true;
					}
					else 
					{	
						returnState = false;
						jQuery(element)
							.after("<div class='" + options.failedCheck + "'><span>" + errMsg + "</span></div>")
							.next().fadeIn(300);
					}
				}
			}
			return returnState;
		}
	}

})(jQuery);