/**
 * 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];
            oInput.className = 'textfade';
            // 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);
