(function() {
	Object.extend(Form.Element.Methods, {
		resetInput: function(element) {
			element = $(element);
			if ( $F(element) == $(element).defaultValue && !$(element).hasClassName('prefilled') ) { $(element).value = ''; }
			
			return element;
		}
	});
	
	Element.addMethods();
	
	var clearForms = function() {
		var form_elements = $$('form input[type=text]', 'form 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');
			
			return this;
		});
		
		$$('form a[rel=cancel]').invoke('observe', 'click', function(event) {
			event.stop();
			this.up('form').reset();
		});
	};

	document.observe('dom:loaded', clearForms);
})();