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

/** class MagicBoxes
 *
 */
// class MagicBoxes begin

	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.placeholder;
		} /* 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++) {
				var markedExtMagic = extMagicClass.test(inputs[i].className);

				// Pack it up, pack it in, in tha DOM
				if (
					typeof(inputs[i].placeholder)=='undefined'
					&& inputs[i].getAttribute('placeholder')
				) {
					inputs[i].placeholder = inputs[i].getAttribute('placeholder');
				} /* if */

				// Old style used @value="..." for @placeholder="..."
				if (!inputs[i].placeholder && markedExtMagic) {
					inputs[i].placeholder = inputs[i].defaultValue;
					inputs[i].value = '';
				}

				if (!Modernizr.input.placeholder) {
					// Check for @placeholder="..."
					if (inputs[i].placeholder) {
						if (!markedExtMagic) {
							inputs[i].className += " magic-box";
						} /* if */
					} /* if */

					if (magicClass.test(inputs[i].className)) {
						var replacer = 'fresh-text';
						if (inputs[i].value.length < 1) {
							replacer = 'stale-text';
							inputs[i].value = inputs[i].placeholder;
						} /* 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 */
				} /* if */
			} /* for */
		} /* if */
	} /* MagicBoxes::setupControls() */
// end class MagicBoxes

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


