requiredFields = new Array(3);
requiredFields[0] = {field: 'price', error: 'priceError'};
requiredFields[1] = {field: 'age', error: 'ageError'};
requiredFields[2] = {field: 'sex', error: 'sexError'};

function resetErrors()
{
    for (counter = 0; counter < requiredFields.length; counter++)
    {
        clearError(requiredFields[counter].error);
    }
}

function setError(
    errorField,
    errorText
    )
{
    if (typeof errorField == 'string') errorField = document.getElementById(errorField);
    errorField.style.display = 'inline';
    if (typeof errorText == 'string') errorField.innerHTML = '&nbsp;' + errorText;
}

function clearError(errorField)
{
    if (typeof errorField == 'string') errorField = document.getElementById(errorField);
    errorField.style.display = 'none';
}

function validate()
{
    var returnValue = true;
    
    resetErrors(requiredFields);
    
    if (isArray(requiredFields))
    {
        for (counter = 0; counter < requiredFields.length; counter++)
        {
            field = document.getElementById(requiredFields[counter].field);
            error = document.getElementById(requiredFields[counter].error);
            
            switch (field.type)
            {
                case '':
                {
                    if (!validateChildNodes(field))
                    {
                        setError(error);
                        
                        returnValue = false;
                    }
                    break;
                }
                case 'select-one':
                {
                    if (field.selectedIndex <= 0)
                    {
                        setError(error);
                        
                        returnValue = false;
                    }
                    break;
                }
                default://'text' or 'textarea'
                {
                    if (field.value == '')
                    {
                        setError(error);
                        
                        returnValue = false;
                    }
                    break;
                }
            }
        }
    }
    
    userComments = document.getElementById('userInput').value;
    if (userComments == '')
    {
        setError('userInputError');
        returnValue = false;
    }
    else
    {
        clearError('userInputError');
    }

    userName = document.getElementById('name').value;
    if (userName == '')
    {
        setError('nameError');
        returnValue = false;
    }
    else
    {
        clearError('nameError');
    }

    userEmail = document.getElementById('email').value;
    if (!Validation.Email(userEmail))
    {
        setError('emailError');
        returnValue = false;
    }
    else
    {
        clearError('emailError');
    }
    
    if (document.getElementById('captcha').value == '')
    {
        setError('captchaError');
        returnValue = false;
    }
    else
    {
        clearError('captchaError');
    }
    
    if (returnValue)
    {
        clearError('errorIndicator1');
        clearError('errorIndicator2');
    }
    else
    {
        setError('errorIndicator1');
        setError('errorIndicator2');
    }
    
    return returnValue;
}

function validateChildNodes(parentElement)
{
    var childCounter;
    var childNode;
    var returnValue = false;
    
    for (childCounter = 0; childCounter < parentElement.childNodes.length; childCounter++)
    {
        childNode = parentElement.childNodes[childCounter];
        if (childNode.childNodes.length == 0)
        {
            switch (childNode.type)
            {
                case 'radio':
                {
                    if (childNode.checked)
                    {
                        returnValue = true;
                    }
                    
                    break;
                }
            }
        }
        else
        {
            if (validateChildNodes(childNode))
            {
                returnValue = true;
            }
        }
    }
    
    return returnValue;
}

function isArray(obj)
{
    if (obj.constructor.toString().indexOf("Array") == -1)
        return false;
    else
        return true;
}
