function validate(formName)
{
    var error = "";
    var formElementNameForDisplayReg = /^[a-zA-Z0-9\- ]*$/;     //make sure the display name passed in in the form is valid (avoid XSS problems)
    var i;
    var details;
    var currentField;
    var f = eval("document."+formName);
    if (f._required)
    {
        var required = f._required.value.split(",");
        for (i=0;i<required.length;i++)
        {
            details = required[i].split(":");
            currentField = eval("f."+details[0]);
            if (currentField.value.length < 1)
            {
                if (formElementNameForDisplayReg.test(details[1]))
                {
                    error = error+"Please enter "+details[1]+"\n";
                }
                else
                {
                    error = "Please fill in all required fields.";
                }
            }
        }
    }
    if (f._date)
    {
        var dateReg = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;
        if (f._date.value.length > 0)
        {
            var date = f._date.value.split(",");
            for (i=0;i<date.length;i++)
            {
                details = date[i].split(":");
                currentField = eval("f."+details[0]);
                if (currentField.value.length > 0 && !dateReg.test(currentField.value))
                {
                    if (formElementNameForDisplayReg.test(details[1]))
                    {
                        error = error+"Please enter a valid date for "+details[1]+"\n";
                    }
                    else
                    {
                        error = error+"Please fill in a valid date.";
                    }
                }
            }
        }
    }
    if (f._email)
    {
        var mailReg = /^[a-zA-Z0-9\-\.'_]+\@[a-zA-Z0-9\-\.]+\.([a-zA-Z0-9]+)$/; 
        if (f._email.value.length > 0)
        {
            var email = f._email.value.split(",");
            for (i=0;i<email.length;i++)
            {
                details = email[i].split(":");
                currentField = eval("f."+details[0]);
                if (currentField.value.length > 0 && !mailReg.test(currentField.value))
                {
                    if (formElementNameForDisplayReg.test(details[1]))
                    {
                        error = error+"Please enter a valid email address for "+details[1]+"\n";
                    }
                    else
                    {
                        error = error+"Please enter a valid email address.";
                    }
                }
            }
        }
    }
    if (f._number)
    {
        var numberReg = /^[0-9\.]*$/;
        if (f._number.value.length > 0)
        {
            var number = f._number.value.split(",");
            for (i=0;i<number.length;i++)
            {
                details = number[i].split(":");
                currentField = eval("f."+details[0]);
                if (currentField.value.length > 0 && !numberReg.test(currentField.value))
                {
                    if (formElementNameForDisplayReg.test(details[1]))
                    {
                        error = error + details[1] + " may only contain numbers.\n";
                    }
                    else
                    {
                        error = error+"Please enter a valid number.";
                    }
                }
            }
        }
    }
    if (f._phone)
    {
        var phoneReg = /^[0-9 \-\+\(\)]*$/;
        if (f._phone.value.length > 0)
        {
            var phone = f._phone.value.split(",");
            for (i=0;i<phone.length;i++)
            {
                details = phone[i].split(":");
                currentField = eval("f."+details[0]);
                if (currentField.value.length > 0 && !phoneReg.test(currentField.value))
                {
                    if (formElementNameForDisplayReg.test(details[1]))
                    {
                        error = error + details[1] + " must be a valid phone number.\n";
                    }
                    else
                    {
                        error = error+"Please enter a valid phone number.";
                    }
                }
            }
        }
    }
    if (formName == "updateRoomAvailability")
    {
        datesReg = /^([1-9]|1[0-9]|2[0-9]|3[0-1])([,-]([1-9]|1[0-9]|2[0-9]|3[0-1]))*$/;
        if (!datesReg.test(f.dates.value))
        {
            error = error + "Please enter comma-separated numbers between 1 and 31 as dates for Dates. Ranges can be entered using a dash, e.g.: 1,2,5-8,9-12,30. Do not enter spaces.\n"
        }
        roomsAvailableReg = /^([0-9]+|default)$/;
        if (!roomsAvailableReg.test(f.rooms_available.value))
        {
            error = error + "Please enter a number or 'default' for Number of rooms available.\n"
        }
    }
    if (error != "")
    {
        alert(error);
        return false;
    }
    else
    {
        return true;
    }
}