/* Usage:

1:  Get JQuery (jquery.com)
2: Put these lines in your header  ( assuming the name of the jquery here )
	<script type="text/javascript" src="scripts/jquery-1.1.2.js"></script>

	<script type="text/javascript" src="scripts/input_validate.js"></script>
3: 
	on the input fields you want validated, give a class, ie : xyzinput
4:
	on the input fields you want validated as an email address, give a different class, ie: abcemail
5:
	on the text areas you want validated, give a class, ie: xyzinput ( this can be the same as another class you use 
	on the page)
6:
	on the submit button, give a class: ie: efgbutton
7:
	produce a css rule for 'invalid' input types. 

8:

	<script type="text/javascript">
		$(document).ready(function(){
		
			$("input[@type=text]").input_validator("invalid"); // Makes all text-areas on page required 
			
			$("input.xyzinput").input_validator("invalid");    
			//    validates <input class="xyzinput"/> and makes it
			//    <input class="xyzinput invalid"/> when its not valid
			
			$("input.abcemail").input_email_validator("invalid"); 
			// <-- validates <input class="abcemail"/> as an email address and makes it
			//    <input class="abcemail invalid"/> when its not valid
			
			$("textarea.xyzinput").text_area_validator("invalid");
			// <-- validates <textarea class="xyzinput"/>  and makes it
			//    <textarea class="xyzinput invalid"/> when its not valid
		
			$("input.efgbutton").button_click_validator();
			//
			// checks all in-page ( ie: NOT form specific) fields and returns false if 
			// any one of them is invalid, and thus, should not submit if its a submit button
			
			$("input[@type=checkbox].required").checked_validator("invalid"); // makes all checkboxes with the 'required' class validatate
			
			$("input[@type=radio].required").input_radio_validator("invalid"); // makes all radio groups with the 'required' class validate. 
			// NOTE: you may want to put the 'outline' style on the CSS for this one, or it wont do anything pretty in firefox. 
		
		});
	</script>
	
	
*/

//jQuery.validator={
//	status: 0,
//	nodes: {}
//};

jQuery.fn.input_validator = function(invalidClass){
	/* For each item */
	jQuery(this).each(function(e){
		/* Attach A Validation function on that node */
		jQuery(this)[0].validator_fn = function()
		{
				if( jQuery(this).val()=="" || jQuery(this).val()==0 )
				{
					jQuery(this).addClass(invalidClass);
	//				jQuery.validator.status =0;
					return false;
				}
				else
				{
					jQuery(this).removeClass(invalidClass);
		//			jQuery.validator.status = 1;
					return true;
				}
		};
		
		jQuery(this)[0].validator_fn();
		jQuery(this).addClass("has_validator");
	
		jQuery(this).keydown(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).keyup(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).select(function()
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).change(function()
		{
			jQuery(this)[0].validator_fn();
		});

	});

};


jQuery.fn.checked_validator = function(invalidClass){
	/* For each item */
	jQuery(this).each(function(e){
		/* Attach A Validation function on that node */
		jQuery(this)[0].validator_fn = function()
		{
				if( jQuery(this).attr("checked") !=true || jQuery(this).attr("checked")!="checked" )
				{
					jQuery(this).addClass(invalidClass);
					return false;
				}
				else
				{
					jQuery(this).removeClass(invalidClass);
		//			jQuery.validator.status = 1;
					return true;
				}
		};
		
		jQuery(this)[0].validator_fn();
		jQuery(this).addClass("has_validator");
	
		jQuery(this).keydown(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).keyup(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).select(function()
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).change(function()
		{
			jQuery(this)[0].validator_fn();
		});
		
		jQuery(this).click(function(){
			jQuery(this)[0].validator_fn();
		});
	});

};

jQuery.fn.input_radio_validator = function(invalidClass){
	/* For each item */
	jQuery(this).each(function(e){
		/* Attach A Validaion function on that node */
		jQuery(this)[0].validate_sub_fn=function()
		{
			if( jQuery(this).attr("checked")==true )
			{
				return true;
			}
			else
			{
				return false;
			}
		};
		
		jQuery(this)[0].setInvalid = function(state){
			if ( state == true )
			{
				jQuery(this).addClass(invalidClass);
			}
			else
			{
				jQuery(this).removeClass(invalidClass);
			}
		};
		
		jQuery(this)[0].validator_fn = function()
		{
			var myName = jQuery(this).attr('name');
			var radios = jQuery('input[@name=' + myName +']',jQuery(this).parents('form'));
			var allfalse=true;
			radios.each(function(e){
				if ( jQuery(this)[0].validate_sub_fn() )
				{
					allfalse=false;
				}
			});
			
			if( allfalse )
			{
				radios.each(function(e)
				{
					jQuery(this)[0].setInvalid(true);
					
				});
				return false;
				
			}
			else
			{
				radios.each(function(e)
				{
					jQuery(this)[0].setInvalid(false);
					
				});
				return true;
			}
		};
		
		
		jQuery(this).addClass("has_validator");
	
		jQuery(this).keydown(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).keyup(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).select(function()
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).change(function()
		{
			jQuery(this)[0].validator_fn();
		});
		
		/* Hack For IE not validating on change */
		jQuery(this).mouseout(function()
		{
			jQuery(this)[0].validator_fn();
		});

	});


	jQuery(this).each(function(e){
		jQuery(this)[0].validator_fn();
	});
};

jQuery.fn.text_area_validator = function(invalidClass){
	/* For each item */
	jQuery(this).each(function(e){
		/* Attach A Validation function on that node */
		jQuery(this)[0].validator_fn = function()
		{
				if( jQuery(this)[0].textLength==0 )
				{
					jQuery(this).addClass(invalidClass);
			//		jQuery.validator.status =0;
					return false;
				}
				else
				{
					jQuery(this).removeClass(invalidClass);
				//	jQuery.validator.status = 1;
					return true;
				}
		};
		jQuery(this)[0].validator_fn();
		jQuery(this).addClass("has_validator");
	
		jQuery(this).keydown(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).keyup(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).select(function()
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).change(function()
		{
			jQuery(this)[0].validator_fn();
		});
	});
};


jQuery.fn.input_email_validator = function(invalidClass){
	/* For each item */
	jQuery(this).each(function(e){
		/* Attach A Validation function on that node */
		jQuery(this)[0].validator_fn = function()
		{
				var pattern = /^([a-zA-Z0-9_\.\-+])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
				if( !jQuery(this).val().match(pattern) )
				{
					jQuery(this).addClass(invalidClass);
					//jQuery.validator.status =0;
					return false;
				}
				else
				{
					jQuery(this).removeClass(invalidClass);
					//jQuery.validator.status = 1;
					return true;
				}
		};
		jQuery(this)[0].validator_fn();
		jQuery(this).addClass("has_validator");
	
		jQuery(this).keydown(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).keyup(function(e)
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).select(function()
		{
			jQuery(this)[0].validator_fn();
		});
	
		jQuery(this).change(function()
		{
			jQuery(this)[0].validator_fn();
		});

	});

};

jQuery.fn.button_click_validator = function(){
	jQuery(this).each( function(e){
		
		jQuery(this).click( function()
		{
			var xstatus=1;
			
			jQuery(".has_validator").each( function(){
				if( ! jQuery(this)[0].validator_fn() )
				{
					xstatus=0;
				}
			});
			
			if ( xstatus == 0){
				return false;
			}
			else {
				return true;
			}
			
		});
	});
};

jQuery.fn.button_click_call_validator = function(fname){
	jQuery(this).each( function(e){
		
		jQuery(this).click( function()
		{
			var xstatus=1;
			var last_failed=new Array();
			
			jQuery(".has_validator").each( function(){
				if( ! jQuery(this)[0].validator_fn() )
				{
				
						xstatus=0;
						last_failed.push( jQuery(this)[0] );
					
				}
			});
			
			if ( xstatus == 0){
				fname(last_failed);
				return false;
			}
			else {
				
				return true;
			}
			
		});
	});
};