/*
| Script: formfilter
| Version 0.4
| Author: Bryan English
| Description: Easy way to check forms.
| Date: April 21, 2004
*/
function Filter(){
   this.filters = new Array();

	this.add = function(f,t,m){this.filters[this.filters.length] = new Array(f,t,m);};
	this.get_value = function(e){
		if(e.type!=null)
			switch(e.type){
				case "text": case "hidden": case "password": case "textarea":return(e.value);break;
				case "checkbox":return(((e.checked)?e.value:''));break;
				case "select-one":var o = e.options[e.selectedIndex];
					return(((o.value==null)?o.text:o.value));break;
				}
		else
			for(var cnt=0;cnt<e.length;cnt++)
				if(e[cnt].checked)return(e[cnt].value);

		return(false);
		};

   this.test = function(form,opttype,filter){
		var errors = '';
		var start = (filter!=null?filter:0);
		var end = (filter!=null?filter+1:this.filters.length);

		for(var fi=start;fi<end;fi++){
			var field = this.filters[fi][0];
			var type = ((opttype)?opttype:this.filters[fi][1]).split(/\s?\&\&\s?/); 
			var msg = this.filters[fi][2];
			var value = this.get_value(form.elements[field]);
			var passed = true; 

			for(var cnt=0;cnt<type.length;cnt++){
				var cmds = type[cnt].split(' ');
				switch(cmds[0]){
					case 'not':
						if(this.test(form,type[cnt].replace('not ',''),fi)=='')
							passed = false;
					break;
					case 'null':
						if(!(value == null || value == ''))
							passed = false;
					break;
					case 'numeric':
						if(isNaN(value))
							passed = false;				
					break;
					case 'range':
						if(!(value > cmds[1] && value <cmds[2]))
							passed = false;				
					break;
					case 'email':
						if(!/^.+\@..+\..+/.test(value))
							passed = false;				
					break;
					}
				}
			errors += (passed?'':'\n- '+msg);
			}

		return errors;
      };
	}


var filters = new Filter();