if (typeof(add_event) == 'undefined') {
	// Ecumenical event listener. Thanks to Scott Andrew LePera
	function add_event (obj, evType, fn, useCapture) {
		if (obj.addEventListener){
			obj.addEventListener(evType, fn, useCapture);
			return true;
		} else if (obj.attachEvent){
			var r = obj.attachEvent("on"+evType, fn);
			return r;
		} else {
			return false;
		} // if
	} // function add_event ()
} // if

function MagicBoxes () {
	// ...
}

MagicBoxes.prototype.clearDefault = function (e) {
	var target = (typeof(e.target) != 'undefined') ? e.target : e.srcElement;

	var staleClass = /(^|\s+)stale-text($|\s+)/;
	if (target && staleClass.test(target.className)) {
		var newClass = target.className.replace(staleClass, '$1fresh-text$2');
		target.className = newClass;
		target.value = '';
	} /* if */
} /* MagicBoxes::clearDefault() */

MagicBoxes.prototype.restoreDefault = function (e) {
	var target = (typeof(e.target) != 'undefined') ? e.target : e.srcElement;

	var freshClass = /(^|\s+)fresh-text($|\s+)/;
	if (target && freshClass.test(target.className) && target.value.length < 1) {
		var newClass = target.className.replace(freshClass, '$1stale-text$2');
		target.className = newClass;
		target.value = target.defaultValue;
	} /* if */
} /* MagicBoxes::restoreDefault() */

MagicBoxes.prototype.submitForm = function (e) {
	var target = (typeof(e.target) != 'undefined') ? e.target : e.srcElement;
	
	if (target && target.elements) {
		var staleClass = /(^|\s+)stale-text($|\s+)/;
		for (var i = 0; i<target.elements.length; i++) {
			if (staleClass.test(target.elements[i].className)) {
				target.elements[i].value = '';
			} /* if */
		} /* for */
	} /* if */
}

MagicBoxes.prototype.setupControls = function (inputs) {
	var magicClass = /(^|\s+)magic-box($|\s+)/;
	var extMagicClass = /(^|\s+)(magic-box|fresh-text|stale-text)($|\s+)/;
	if (inputs) {
		for (var i = 0; i<inputs.length; i++) {
			if (magicClass.test(inputs[i].className)) {
				var replacer = 'fresh-text';
				if (inputs[i].value == inputs[i].defaultValue || inputs[i].value.length < 1) {
					replacer = 'stale-text';
					inputs[i].value = inputs[i].defaultValue;
				} /* if */

				inputs[i].className = inputs[i].className.replace(magicClass, '$1'+replacer+'$2');
			} /* if */

			if (extMagicClass.test(inputs[i].className)) {
				add_event(inputs[i], 'focus', this.clearDefault, false);
				add_event(inputs[i], 'blur', this.restoreDefault, false);
				if (typeof(inputs[i].form._magic_boxes) == 'undefined' || !inputs[i].form._magic_boxes) {
					inputs[i].form._magic_boxes = true;
					add_event(inputs[i].form, 'submit', this.submitForm, false);
				} /* if */
			} /* if */
		} /* for */
	} /* if */
} /* MagicBoxes::setupControls() */

add_event(window, 'load', function (e) {
	var mb = new MagicBoxes();
	mb.setupControls(document.getElementsByTagName('input'));
	mb.setupControls(document.getElementsByTagName('textarea'));
});

