﻿$(document).ready(function () {
    function getModelPrefix(fieldName) {
        return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
    }

    function appendModelPrefix(value, prefix) {
        if (value.indexOf("*.") === 0) {
            value = value.replace("*.", prefix);
        }
        return value;
    }

    jQuery.validator.addMethod("requiredif", function (value, element, params) {
        if ($(params).is(':checked')) {
            if (value.length > 0) {
                return true;
            }
            else {
                this.showErrors();
                return false;
            }

        }
        else {
            return true;
        }
    });

    jQuery.validator.unobtrusive.adapters.add('requiredif', ['otherproperty'], function (options) {
        var prefix = getModelPrefix(options.element.name),
            other = options.params.otherproperty,
            fullOtherName = appendModelPrefix(other, prefix),
            element = $(options.form).find(":input[name=" + fullOtherName + "]")[0];

        options.rules['requiredif'] = element;

        if (options.message) {
            options.messages['required'] = options.message;
        }
    });
});
