var AjaxForm = Class.create({
	initialize: function (form) {
		if(form instanceof Array) {
			this.cForms = form;
			if(form.length > 0) {
				// do some work here soon
			}
		}else {
			this.cForm = form;
			this.readyForm(form);
		}
	},
	
	readyForm: function (form) {
		formElt = $(form.formId).tagName != 'FORM' ? $(form.formId).select('form').first() : $(form.formId);
		formSubmit = formElt.select('#'+form.submit).first() == undefined ? formElt.select('*[type="submit"], *[class~="submit"], *[value~="Submit"]').first() : formElt.select('#'+form.submit).first();
		
		formElt.observe('submit', this.submittedForm.bindAsEventListener(this));
		formSubmit.observe('click', this.submitForm.bindAsEventListener(this));
	},
	
	submittedForm: function (event) {
		event.stop();
		var form = Event.findElement(event, 'FORM');
		if(form && this.passesValidation(form)) {
			form = $(form);
			var serializedData = form.serialize();
			document.observe('form:successful', this.formSuccess);
			document.observe('form:sent', this.formSent);
			this.disableForm(form);
			var url = 'contact.php?'+serializedData;
			new Ajax.Request(url, {
			  method: 'get',
			  onSuccess: function(transport) {
				document.fire('form:successful', transport);
			  },
			  onLoading: function(transport) {
				document.fire('form:sent', transport);
			  }
			});
			
		}
	},
	
	submitForm: function (event) {
		event.stop();
		var elt = Event.element(event) || Event.findElement(event, 'INPUT');
		if(elt) {
			if(this.passesValidation(elt)) {
				this.submittedForm(event);
			}else{
				// puts error
			}
		}
	},
	
	passesValidation: function (element) {
		var pass = true;
		var invalid = [];
		if(this.cForm) {
			for (var i=0; i < this.cForm.validate.length; i++) {
				if(!$(this.cForm.validate[i]).present()) {
					pass = false;
					invalid.push(this.cForm.validate[i]);
				}
			}
			if(pass) {
				return true;
			}else{
				$(invalid.first()).focus();
				for (var i=0; i < invalid.length; i++) {
					var label = $(invalid[i]).up(1).down();
					$(label).addClassName('invalid');
				}
				return false;
			}
		}
	},
	
	disableForm: function (form) {
		var overlay = Builder.node('div', {id:'form_overlay'});
		$(form).setStyle({position:'relative', top:'0', left:'0'}).insert({top:overlay});
	},
	
	formSent: function (event) {
		var loading = Builder.node('div', {id:'loading_msg'});
		$('form_overlay').insert({top:loading});
	},
	
	formSuccess: function (event) {
		var success = Builder.node('div', {id:'success_msg', style:'display:none;'}, [
						Builder.node('p', 'Your request has been successfully sent.'),
						Builder.node('p', 'Thank you for your interest.'),
						Builder.node('p', 'A customer service representative will be in touch with you within one business day.'),
						Builder.node('a', {href:'http://www.randolphbank.com/'}, 'Click here to go to www.randolphbank.com')]);
		$('loading_msg').replace(success);
		$('success_msg').appear({duration: 1.0});
	}
});