function validateForm(fields, submit_id, submit_class_enabled, submit_class_disabled)
{
    jQuery.each(fields, function(index, item){
        $("[@id^=" + index + "]").bind(getValidatorEvent(item), function() { 
            runValidate(fields, submit_id, submit_class_enabled, submit_class_disabled);
        });
    });    
}

function getValidatorEvent(type) 
{
    if (type=="checkbox" || type=="radio") {
        return "click";
    } else if (type=="select") {
        return "change";
    } else if (type=="text") {
        return "keyup";
    } else {
        return "change";
    }
}

function runValidate(fields, submit_id, submit_class_enabled, submit_class_disabled)
{
    var result = true;
    jQuery.each(fields, function(index, item){
        if (item=="checkbox" || item=="radio") {
            result = result && validateCheckbox(index);
        } else {
            result = result && validateValue(index);
        }
    });
    if (result) {
        $("#" + submit_id).attr("disabled", false);
        if (submit_class_enabled) {
            $("#" + submit_id).removeClass();
            $("#" + submit_id).addClass(submit_class_enabled);
        }
    } else {
        $("#" + submit_id).attr("disabled", "disabled");
        if (submit_class_disabled) {
            $("#" + submit_id).removeClass();
            $("#" + submit_id).addClass(submit_class_disabled);
        }
    }
}

function validateCheckbox (id_prefix)
{
    var result = false;
    $("input[@id^=" + id_prefix + "]").each(function(i){
        if ($(this).attr("checked")) {
            result = true;
            return;
        }
    });
    return result;
}

function validateValue (id)
{
    return $("#"+id).val() != "";
}