$(document).observe('dom:loaded', function () {
	// HTML5 placeholder replication
	if (!'placeholder' in document.createElement('input')) {
		var elements = $$('input[placeholder]:not(.prefilled), textarea[placeholder]:not(.prefilled)');
		elements.each(function (el) {
			el.setValue(el.readAttribute('placeholder'));
		});
			
		elements.invoke('observe', 'focus', function () {
			if (this.getValue() === this.readAttribute('placeholder')) {
				this.setValue('').removeClassName('default_value');
			}
		});
		
		elements.invoke('observe', 'blur', function () {
			if (this.getValue().blank()) {
				this.setValue(this.readAttribute('placeholder')).addClassName('default_value');
			}
		});
		
		$$('form').invoke('observe', 'submit', function () {
			elements.each(function (el) {
				if (el.getValue() === el.readAttribute('placeholder')) {
					el.setValue('').removeClassName('default_value');
				}
			}, this);
		});
	}
});

(function(){Object.extend(Form.Element.Methods,{resetInput:function(element){element=$(element);if(!$(element).readOnly&&$F(element)==$(element).defaultValue){$(element).value='';}return element;}});Element.addMethods();var clearForms=function(){var form_elements=$$('input[type=text]','textarea');form_elements.invoke('observe','focus',function(){this.resetInput();});form_elements.invoke('observe','blur',function(){if($F(this).blank()){this.value=this.defaultValue;}});$$('form').invoke('observe','submit',function(){this.select('input[type=text]','textarea').invoke('resetInput');});};document.observe('dom:loaded',clearForms);})();

document.observe('dom:loaded', function () {
	$$('form').invoke('observe', 'submit', function (event) {
		var required_fields = this.select('input.required');
		this.select('p.error').invoke('removeClassName', 'error');

		var invalid_fields = required_fields.select(function (f) {
			var type = f.readAttribute('type'),
				name = f.readAttribute('name'),
				value = f.getValue();
			
			if (type == 'text' || f.up('p.single_line_text')) {
				return value.blank();
			} else if (f.tagName.toLowerCase() == 'textarea') {
				return value.blank();
			} else if (type == 'checkbox' || type == 'radio') {
				return (this.select('[name="' + name + '"]:checked').size() === 0);
			} else if (f.tagName.toLowerCase() == 'select') {
				return (f.selectedIndex == 0);
			} else {
				return false;
			}
		}, this);
		
		if (invalid_fields.size() > 0) {
			event.stop();
			invalid_fields.invoke('up','p').invoke('addClassName', 'error');
			alert('Please fill in all required fields');
			$(invalid_fields[0]).focus();
		}
	});
});
