	/**
	 * Copy the value of an input field's title attribute to its value attribute.
	 * Clear the input field on focus if its value is the same as its title.
	 * Repopulate the input field on blur if it is empty.
	 * Hide the input field's associated label if it has one.
	 */
	var autoPopulate = {
		sInputClass:'populate', // Class name for input elements to autopopulate
		sHiddenClass:'structural', // Class name that gets assigned to hidden label elements
		bHideLabels:true, // If true, labels are hidden
		/**
		 * Main function
		 */
		init:function() {
			// Check for DOM support
			if (!document.getElementById || !document.createTextNode) {return;}
			// Find all input elements with the given className
			var arrInputs = autoPopulate.getElementsByClassName(document, 'input', autoPopulate.sInputClass);
			var iInputs = arrInputs.length;
			var oInput;
			for (var i=0; i<iInputs; i++) {
				oInput = arrInputs[i];
				// Make sure it's a text input
				if (oInput.type != 'text') { continue; }
				// Hide the input's label
				if (autoPopulate.bHideLabels) { autoPopulate.hideLabel(oInput.id); }
				// If value is empty and title is not, assign title to value
				if ((oInput.value == '') && (oInput.title != '')) { oInput.value = oInput.title; }
				// Add event handlers for focus and blur
				autoPopulate.addEvent(oInput, 'focus', function() {
					// If value and title are equal on focus, clear value
					if (this.value == this.title) {
						this.value = '';
						this.select(); // Make input caret visible in IE
					}
				});
				autoPopulate.addEvent(oInput, 'blur', function() {
					// If the field is empty on blur, assign title to value
					if (!this.value.length) { this.value = this.title; }
				});
			}
		},
		hideLabel:function(sId) {
			var arrLabels = document.getElementsByTagName('label');
			var iLabels = arrLabels.length;
			var oLabel;
			for (var i=0; i<iLabels; i++) {
				oLabel = arrLabels[i];
				if (oLabel.htmlFor == sId) {
					oLabel.className = oLabel.className + ' ' + autoPopulate.sHiddenClass;
				}
			}
		},
		/**
		 * getElementsByClassName function included here for portability.
		 * Remove if you are already using one.
		 * Written by Jonathan Snook, http://www.snook.ca/jonathan
		 * Add-ons by Robert Nyman, http://www.robertnyman.com
		 */
		getElementsByClassName:function(oElm, strTagName, strClassName) {
		    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
		    var arrReturnElements = new Array();
		    strClassName = strClassName.replace(/\-/g, "\\-");
		    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
		    var oElement;
		    for(var i=0; i<arrElements.length; i++){
		        oElement = arrElements[i];      
		        if(oRegExp.test(oElement.className)){
		            arrReturnElements.push(oElement);
		        }   
		    }
		    return (arrReturnElements)
		},
		/**
		 * addEvent function included here for portability.
		 * Remove if you are already using an addEvent/DOMReady function.
		 * Found at http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
		 */
		addEvent:function(obj, type, fn) {
			if (obj.addEventListener)
				obj.addEventListener(type, fn, false);
			else if (obj.attachEvent) {
				obj["e"+type+fn] = fn;
				obj[type+fn] = function() {obj["e"+type+fn](window.event);}
				obj.attachEvent("on"+type, obj[type+fn]);
			}
		}
	};
	
	/**
	 * Init on window load.
	 * Replace this with a call to your own addEvent/DOMReady function if you use one.
	 */
	autoPopulate.addEvent(window, 'load', autoPopulate.init);
