function prepareContactForm(form, validators)
{
    window.contactForm = form;
    form.validators = validators;
    
    var inputs = form.getElementsByTagName("input");
    var submit = null;
    for (var i = 0; i < inputs.length; i++)
    {
        if (inputs[i].type == "submit")
        {
            submit = inputs[i];
            break;
        }
    }
    
    form.submitButton = submit;

    contactFormValidate();
}

function contactFormValidate()
{
    var valid = true;

    for (var i in window.contactForm.validators)
    {
        var v = window.contactForm.validators[i];

        if (!v[0](v))
        {
            valid = false;
            break;
        }
    }
    
    contactSetSubmit(valid);
}

function contactSetSubmit(enable)
{
    var submit = window.contactForm.submitButton;

    submit.className = enable
        ? "formSubmit"
        : "formSubmit-disabled";  
    submit.disabled = enable
        ? ""
        : "disabled";
}

function contactValidateRequired(data)
{
    return "" != document.getElementById(data[1]).value;
}

function contactValidateRequiredRadio(data)
{
    var name = data[1];
    var elements = document.getElementsByName(name);

    for (var i = 0; i < elements.length; i++)
    {
        if (elements[i].checked)
        {
            return true;
        }
    }

    return false;
}

function contactValidateRequiredSelect(data)
{
    return 0 != document.getElementById(data[1]).selectedIndex;
}

function contactValidateRequiredMultiSelect(data)
{
    var name = data[1];
    var elements = document.getElementsByName(name);
    
    for (var i = 0; i < elements.length; i++)
    {
        if (elements[i].checked)
        {
            return true;
        }
    }

    return false;
}

function contactValidateRegexp(data)
{
    return document.getElementById(data[1]).value.match(new RegExp(data[2]));
}
