/*
 * Accepts one or more input elements (can be input, textarea, select, radio, checkbox)
 * and returns an array of the values they will pass if the form is submitted.
 *
 * Button elements (submit, reset, button) and File elements will return no value.
 */
function getSelectedValues(element) {
    var values = [];
    if (element.type) {
        switch (element.type) {
            case "radio":
            case "checkbox":
                if (element.checked) {
                    values[values.length] = element.value;
                }
                break;

            case "select-one":
            case "select-multiple":
                for (var i=0; i<element.options.length; i++) {
                    if (element.options[i].selected) {
                        values[values.length] = element.options[i].value;
                    }
                }
                break;

            case "text":
            case "textarea":
            case "password":
            case "hidden":
                values[values.length] = element.value;
                break;
        }
        return values;
    } else { // assume it's an array
        for (var i=0; i<element.length; i++) {
            values.concat(getSelectedValues(element[i]));
        }
    }
}

/*
 * Blanks a set of fields, specified with a form object, and an
 * array of regular expression patterns that match against the
 * element name or ID.
 */
function blankFields(form, fieldPatterns) {
    for (var i=0; i<form.elements.length; i++) {
        var element = form.elements[i];
        for (var j=0; j<fieldPatterns.length; j++) {
            if (fieldPatterns[j].test(element.id) || fieldPatterns[j].test(element.name)) {
                blankField(element);
            }
        }
    }
}

/*
 * Sets a field to blank.  For radio and checkbox elements,
 * they are set to un-checked, and for select lists, all values are
 * deselected.  If the element is an array, the array is traversed recursively,
 * and blank is called on all elements within.
 */
function blankField(element) {
    if (element.type) {
        switch (element.type) {
            case "text":
            case "textarea":
            case "password":
            case "hidden":
                element.value = "";
                break;

            case "radio":
            case "checkbox":
                element.checked = false;
                break;

            case "select-one":
            case "select-multiple":
                element.selectedIndex = -1;
                break;
        }
    } else {
        for (var i=0; i<element.length; i++) {
            blankField(element[i]);
        }
    }
}

