﻿//BooleanRequiredToBeTrueAttribute client-side validation (checkboxes,radiobuttons)
Sys.Mvc.ValidatorRegistry.validators.requiredTrue = function (rule) {
    return function (value, context) {
        for (var i = 0; i < context.fieldContext.elements.length; i++) {
            if (context.fieldContext.elements[i].type == "checkbox") {
                return context.fieldContext.elements[i].checked;
            }
        }
        return false;
    };
};

//ConditionalRequiredValidationAttribute client-side validation
Sys.Mvc.ValidatorRegistry.validators.conditionalRequired = function (rule) {
    var dependentProperty = rule.ValidationParameters['dependsOnProperty'];
    var targetvalue = rule.ValidationParameters['targetValue'];
    return function (value, context) {
        var actualvalue = null;
        if (targetvalue == "checked" || targetvalue == "true" || targetvalue == "false" || targetvalue == "unchecked")
            actualvalue = ($("#" + dependentProperty + ":checked").val() !== undefined);
        else
            actualvalue = $("#" + dependentProperty).val();

        if (
            ((targetvalue == "checked" || targetvalue == "true") && actualvalue == true)
            ||
            ((targetvalue == "unchecked" || targetvalue == "false") && actualvalue == false)
            ||
            (actualvalue.toString() == targetvalue.toString())
        ) {
            var validatorinstance = Sys.Mvc.ValidatorRegistry.validators.required();
            return validatorinstance(value, context);
        }
        else
            return true;
    }
};
