Validator = new Class({
	initialize: function(el){
		this.el = el;
		this.valid = true;
		this.el.onsubmit = function() { return this.validate(); }.bind(this);
	},

	validate: function() {
		this.valid = true;
		$S('.bvRequiredText').each(
			function(el) {
				if(!this.textValidate($E('input',el))) {
					el.addClassName('error');
					this.valid = false;
				} else {
					el.removeClassName('error');
				} // if..else
		    }.bind(this)
		);
		$S('.bvRequiredSelect').each(
			function(el) {
				if(!this.selectValidate($E('select',el))) {
					el.addClassName('error');
					this.valid = false;
				} else {
					el.removeClassName('error');
				} // if..else
		    }.bind(this)
		);
		$S('.bvRequiredTextarea').each(
			function(el) {
				if(!this.textValidate($E('textarea',el))) {
					el.addClassName('error');
					this.valid = false;
				} else {
					el.removeClassName('error');
				} // if..else
		    }.bind(this)
		);
		$S('.bvRequiredEmail').each(
			function(el) {
				if(!this.emailValidate($E('input',el))) {
					el.addClassName('error');
					this.valid = false;
				} else {
					el.removeClassName('error');
				} // if..else
		    }.bind(this)
		);
		$S('.bvRequiredRadioGroup').each(
			function(el) {
				if(!this.radioGroupValidate($ES('input',el))) {
					el.addClassName('error');
					this.valid = false;
				} else {
					el.removeClassName('error');
				} // if..else
		    }.bind(this)
		);

		$S('.bvCustomTextDependency').each(
			function(el) {
				if(!this.textValidate($E('input',el)) && $('contact_yes').checked ) {
					el.addClassName('error');
					this.valid = false;
				} else {
					el.removeClassName('error');
				} // if..else
		    }.bind(this)
		);

		$S('.bvCustomEmailDependency').each(
			function(el) {
				if(!this.emailValidate($E('input',el)) && $('contact_yes').checked ) {
					el.addClassName('error');
					this.valid = false;
				} else {
					el.removeClassName('error');
				} // if..else
		    }.bind(this)
		);
		if(!this.valid) window.scrollTo(0,0); //-- up to the top of the form, if something is wrong

		return this.valid;
	},

	radioGroupValidate: function(els) {
		var found = false;
		els.each(
			function(el) { found = (el.checked || found); }
		);
		return found;
	},

	textValidate: function(el) {
		return (el.value != '');
	},

	textareaValidate: function(el) {
		return (el.value != '');
	},

	selectValidate: function(el) {
		return (el.value != 'Select a State');
	},

	emailValidate: function(el) {
		var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
		return (el.value.match(re));
	}
});