function FormSubmit(formid, options) {
	
	this.initialize = function(formid, options) {
		
		this.callback = null;
		this.defaults = $(formid).getElements();
		this.default_values = new Array();
		this.load_defaults(this.defaults);
		
		if(typeof options !== 'unfefined') {
			this.callback = options.callback;
			if(typeof options.sendform === 'undefined') {
				this.sendform = options.onsubmit;
			} else {
				this.sendform = false;
			}
		}
		
		//set properties
		this.formid = formid;
		this.required_fields = new Array();
		this.type_int = new Array();
		this.errors = new Array();
		this.status = false;
		
		$(this.formid).observe('submit', this.send.bind(this));
	}
	
	this.load_defaults = function(defaults) {
		var dv = new Array();
		$(defaults).each(function(s, i, k) {
			if($(s).hasClassName('required')) {
				dv.push($(s).value);
			}
		});
		
		this.default_values = dv;
		
	}
	
	this.required = function(required) {
		this.required_fields = Array.from(required);
		this.load_defaults(this.required_fields);
	}
	
	this.is_email = function(email) {
		this.type_email = email;
	}
	
	this.is_int = function(fields) {
		this.type_int = Array.from(fields);
	}
	
	this.setPasswordRules = function(rules) {
		if(typeof rules != 'object') {
			return false;
		}
	}
	
	this.addError = function(el, error) {
		this.errors[el] = error;
		alert(this.errors['amount'])
	}
	
	this.check_defaults = function() {
		var dl = this.default_values.length;
		for(var i=0; i<dl; i++) {
			
			//alert($(this.required_fields[i]).value)
			//alert(this.default_values[i] +'=='+ $(this.required_fields[i]).value)
			
			if( this.default_values[i] == $(this.required_fields[i]).value ) {
				this.addError('dv_'+i, 'fields marked * are required');
				//this.errors['dv_'+i] = 'fields marked * are required';
			}
			
		}
		
	}
	
	this.check_int = function() {
		
		if(this.type_int.length === 'undefined' || typeof this.type_int === 'undefined') {
			return false;
		}
		
		$A(this.type_int).each(function(i) {
			
			var field = i;
			var int = $F(field);

			if(isNaN(int) || int === 0) {
				this.addError(i, 'only numbers are allowed');
			} 
			
		}.bind(this));
	}
	
	this.check_email = function() {
		if($('email')) {
			var email = $F(this.type_email);
			var pattern = /^[^@]+@[^@]+.[a-z]{2,}$/i;
			var test 	= email.search(pattern);

			if(test == -1) {
				this.addError('email', 'your email is invalid')
			}
		}
		
	}
	
	
	this.check_required = function() {
		this.check_defaults();
		
		$A(this.required_fields).each(function(i) {
			
			if(!Field.present(i)) {
				this.status = false;
				return false;
			}
			
		}.bind(this));
		
		if(!this.status) {
			return false;
		}
		
		return true;
	}
	
	this.write_errors = function() {
		var i=0;
		for(var k in this.errors) {
			if (this.errors.hasOwnProperty(k)) {
			        alert(k);
					i++;
			    }
		}
		
		this.errors.splice(i);
		
	}
	
	this.send = function() {
		//this.errors.splice(this.errors.length);

		if(this.type_int.length > 0) {
			if(!this.check_int()) {
				this.status = false;
			}
		}
		
		if(this.required_fields.length > 0) {
			if(!this.check_required()) {
				
				this.status = false;
				
			} 
		}
		
		if(typeof this.type_email != 'undefined') {
			if(!this.check_email()) {
				this.status = false;
			}
		}
		
		if(!this.status) {
			
			this.write_errors();
						
		} else {
			
			var cb = this.callback;
			
			if(this.sendform) {
				window[cb].apply();
				$(this.formid).submit();
			} else {
				window[cb].apply();
			}
			
		}
	}
	
	this.initialize(formid, options);

}

function donateForm() {
	var name = $('user1').value + ' ' + $('user2').value + ' ' + $('user3').value;
	$('name').value = name;
}

function addMailAddress() {
	var url = '/';
}

function contactForm() {
	alert('sending')
}


if($('donate_form')) {
	var required = ['amount', 'email', 'user2', 'user3', 'street', 'city', 'zip'];
	var form = new FormSubmit('donate_form', {callback:'donateForm', onsubmit:true});
	form.required(required);
	form.is_int(['amount']);
	form.is_email('email');
	
	$('donation_type').observe('change', function() {
		if($('donation_type').getValue() == 'other') {
			new Effect.BlindDown('donation_other_box', {duration: 0.3})
		} else {
			new Effect.BlindUp('donation_other_box', {duration: 0.3})
		}
	});
}

if($('contact_form')) {
	var required = ['contact_email', 'first', 'last', 'message'];
	var form = new FormSubmit('contact_form', {callback:'contactForm', onsubmit:true});
	form.required(required);
	form.is_email('contact_email');
}

if($('volunteer_form')) {
	
	var required = ['contact_email', 'first', 'last', 'message'];
	var form = new FormSubmit('contact_form', {callback:'contactForm', onsubmit:true});
	form.required(required);
	form.is_email('contact_email');
	
	
}

var mailing = new FormSubmit('signup_form', {callback: 'addMailAddress'});
mailing.is_email('email');

