﻿function cntrlTreeView_onClientNodeChecked(sender, eventArgs) {
    cntrlTreeView_CheckParents(eventArgs);
    if (!eventArgs.get_node().get_checked()) {
        cntrlTreeView_CheckChildren(eventArgs.get_node(), false);
    }
}

function cntrlTreeView_CheckChildren(node, checked) {
    var checkedItems = GetNodeCheckedChildren(node);
    for (var e = 0; e < checkedItems.length; e++) {
        checkedItems[e].set_checked(checked);
        cntrlTreeView_CheckChildren(checkedItems[e], checked);
    }
}

function cntrlTreeView_CheckParents(eventArgs) {
    var onode = eventArgs.get_node();
    var bnodechecked = eventArgs.get_node().get_checked();
    do {
        if (bnodechecked) {
            onode.set_checked(true);
        } else {
            if (GetNodeCheckedChildren(onode).length == 0) {
                onode.set_checked(false);
            }
        }
        if (onode.get_parent() == onode.get_treeView()) { break }
        onode = onode.get_parent();
    } while (onode != onode.get_treeView())
}

function GetNodeCheckedChildren(node) {
    var onodes = [];
    for (var i = 0; i < node.get_nodes().get_count(); i++) {
        if (node.get_nodes().getNode(i).get_checked()) {
            onodes.push(node.get_nodes().getNode(i));
        }
    }
    return onodes;
}
