function GetTextData(elem) {
    var data = new Array();
    data[0] = elem.value;
    return(new Array(elem.value));
}

function GetSelectData(elem) {
    var data = new Array();
    var index = 0;
    if (elem.type == "select-multiple") {
        for (var i=0 ; i<elem.options.length ; i++) {
            if (elem.options[i].selected) {
                data[index++] = elem.options[i].value;
            }
        }
        return(data);
    }
    else {
        if (elem.options.length > 0) {
            return(new Array(elem.options[elem.selectedIndex].value));
        }
        else {
            return;
        }
    }
}

function GetCheckboxData(elem) {
    var data = new Array();
    var index = 0;
    if (elem.length) {
        for (var i=0 ; i<elem.length ; i++) {
            if (elem[i].checked) {
                data[index++] = elem[i].value;
            }
        }
        return(data);
    }
    else {
        if (elem.checked) {
            return(new Array(elem.value));
        }
        else {
            return(new Array(''));
        }
    }
}

function GetElementData(elem) {
    var type;
    var data = new Array();

    if (elem.length) {
        /* This is an array, or more accurately, a checkbox or
         * radio group with multiple same-named items, or a
         * select-multiple.
         */
        if (elem.type) {
            type = elem.type;
        }
        else {
            type = elem[0].type;
        }
    }
    else {
        type = elem.type;
    }

    if (type == "text" || type == "password" ||
        type == "hidden" || type == "textarea")
    {
        data = GetTextData(elem);
    }
    else if (type.indexOf("select") != -1) {
        data = GetSelectData(elem);
    }
    else if (type == "checkbox" || type == "radio") {
        data = GetCheckboxData(elem);
    }
    else if (type == "button" || type == "submit" || type == "reset") {
        // Do nothing, we should ignore these.
        return;
    }
    else {
        // Unknown type.  This is a problem...
        data = undefined;
    }

    return(data);
}

function CheckForm(f) {
    var elements = f.elements;
    var data = new Array();
    var regex;
    var err_flag = false;
    var err_fields_str = "";
    var num_errors = 0;

    for (var i=0 ; i<elements.length ; i++) {
        if (!elements[i].name) {
            // Can't process un-named elements.
            continue;
        }
        data = GetElementData(elements[i]);
        if (!data) {
            continue;
        }
        for (var j=0 ; j<data.length ; j++) {
            if (!form_items[elements[i].name]) {
                continue;
            }
            regex = form_items[elements[i].name];
            if (!regex.test(data[0])) {
                eval("document.err_" + elements[i].name + ".src = error_gif_on.src");
                if (!err_flag) {
                   // focus on first error field
                   f.elements[i].focus();
                }
                err_flag = true;
                num_errors++;
                err_fields_str += "\n  " + elements[i].name;
            }
            else {
                eval("document.err_" + elements[i].name + ".src = error_gif_off.src");
            }
        }
    }
    if (err_flag) {
        alert("Sorry, we found ("+num_errors+") errors. Please review and correct all entries noted with a red star.");
        return(false);
    }

    return(true);
}

function changeLoginAction () {
    regex = /^(www|test)/;
    x = document.getElementById("loginform");

    if (regex.test(location.hostname)) {
        x.action = "https://" + location.hostname + "/cgi-bin/login";
    }
    return true;
}
