function padSetCheckbox(callingCheckbox){
    let checked = callingCheckbox.prop("checked"),
        container = callingCheckbox.parent().parent();

    container.find('.pad-checkbox-item input[type="checkbox"]').prop({
        indeterminate: false,
        checked: checked
    });

    if (container.parent().hasClass('pad-checkbox-item')){
        padCheckChildrenCheckboxes(container.parent().children('label').children('input[type="checkbox"]'));
    }
}

function padCheckChildrenCheckboxes(callingCheckbox) {
    let container = callingCheckbox.parent().parent(),
        hasFalse = false,
        hasTrue = false;

    container.children('.pad-checkbox-item').children('label').children('input[type="checkbox"]').each(function() {
        hasFalse = !(jQuery(this).prop("checked")) || hasFalse || jQuery(this).prop("indeterminate");
        hasTrue = jQuery(this).prop("checked") || hasTrue || jQuery(this).prop("indeterminate");
    });

    if (hasFalse && hasTrue) {
        callingCheckbox.prop({
            indeterminate: true,
            checked: false
        });
    }

    if (hasFalse !== hasTrue){
        callingCheckbox.prop({
            indeterminate: false,
            checked: hasTrue
        });
    }

    if (container.parent().hasClass('pad-checkbox-item')){
        padCheckChildrenCheckboxes(container.parent().children('label').children('input[type="checkbox"]'));
    }
}

jQuery('.pad-checkbox-item input[type="checkbox"]').change(function() {
    padSetCheckbox(jQuery(this));
});

jQuery('.pad-checkbox-item .pad-checkbox-item').each(function () {
    padCheckChildrenCheckboxes(jQuery(this).parent().children('label').children('input[type="checkbox"]'));
});