function FormObject() {
	this.addValidationRules = new Array();
	this.formObject = arguments[0];

	this.addValidationRule = function () {
		this.addValidationRules.push(arguments[0]);
		}
	
			
			
	this.validateField = function (fieldname, required, datatype) {
		
		var field = this.formObject[fieldname];
		
		var emailReg = /^[^@]+@[^@.]+\.[^@]*\w\w$/
		var fieldType = field.length && !field.options ? field[0].type : field.type;

		switch (fieldType.toLowerCase()) {
			
			case "text" : {
				
				if (datatype != null && field.value.replace(/[ ]/g, "").length != 0) {
					
					switch(datatype) {
						case "email" : {
							if (!emailReg.test(field.value)) {
								return false;
							}
							return true;
							break;
							}
						case "numeric" : {
							return !isNaN(field.value);
							break;
							}
						default : {
							
							if(required) {
								return field.value.replace(/[ ]/g, "").length;
								}
							else {
								return true;
								}
							break
							}
						}
					}
					
				
				if(required) {
					return field.value.replace(/[ ]/g, "").length;
					}
				else {
					return true;
					}
				return field.value.replace(/[ ]/g, "").length
				break;
				}
				
			case "checkbox" : {
				if (field.length) {
					for (var i = 0; i < field.length; ++i) {
						if (field[i].checked) {
							return true;
							}
						}
					}
				else {
					return field.checked;
					}
					
				return false;
				break;
				}
			
			case "radio" : {
				
				for (var i = 0; i < field.length; ++i) {
					if (field[i].checked) {
						return true;
						}
					}
					
				return false;
				break;
				}
			
			case "textarea" : {
				
				var validate 	= field.getAttribute("onkeydown");
				field.value = field.value.replace(/( ){1,}/g, '$1');
				if (validate) {
					if (typeof validate == "string") {
						return eval(validate);
						}
					else {
						return validate();
						}
					}
				
				if(required) {
					return field.value.replace(/[ ]/g, "").length;
					}
				else {
					return true;
					}	

				break;
				}
			
			default : {
				return field.value.replace(/[ ]/g, "").length
				break;
				}
			}
		}
			
			
	
	
	this.validateForm = function() {
		var errors = new Array();
		for(var i =0; i < this.addValidationRules.length; ++i) {
			if (!this.validateField(this.addValidationRules[i].field, this.addValidationRules[i].required, this.addValidationRules[i].datatype)) {
				errors.push(this.addValidationRules[i]);
				}
			}
		
		return errors;
		
		}
	
	}
	
	

function addFormSubmit() {	
	var form = arguments[0];
	var result = "";
	form.formObject.addEvent('submit', function(e) {
		// Prevent the submit event
		
		
		result = form.validateForm();
		$$("div.error-message").each(
			function (e) {
				e.remove();
				}
			); // end div error removal
		
		if (result.length) {
			new Event(e).stop();
			for (i=0; i < result.length; ++i) {
				//alert(result[i].field)
				if ($(result[i].field)) {
					element = new Element("div", {"class":"error-message"}).setText(result[i].message).injectAfter($(result[i].field).getParent()).setOpacity(0);
					var myEffects = new Fx.Styles(element, {duration: 1000, wait:false});
					myEffects.start({"opacity":[.5,1]})
					}
				else {
					alert(result[i].field + " not found")
					}
				}
			
			
			} // end form validation
		else {
				
			var targetContainer = this.getParent();
			//this.fireEvent("submit")
			
			} // end result if
		}); // end form event
		
	}

	
