(function(b){b.extend(b.tree.plugins,{checkbox:{defaults:{three_state:true},get_checked:function(a){a||(a=b.tree.focused());return a.container.find("a.checked").parent()},get_undeterminded:function(a){a||(a=b.tree.focused());return a.container.find("a.undetermined").parent()},get_unchecked:function(a){a||(a=b.tree.focused());return a.container.find("a:not(.checked, .undetermined)").parent()},check:function(a){if(!a)return false;var c=b.tree.reference(a);a=c.get_node(a);if(a.children("a").hasClass("checked"))return true;
if(b.extend(true,{},b.tree.plugins.checkbox.defaults,c.settings.plugins.checkbox).three_state){a.find("li").andSelf().children("a").removeClass("unchecked undetermined").addClass("checked");a.parents("li").each(function(){if(b(this).children("ul").find("a:not(.checked):eq(0)").size()>0){b(this).parents("li").andSelf().children("a").removeClass("unchecked checked").addClass("undetermined");return false}else b(this).children("a").removeClass("unchecked undetermined").addClass("checked")})}else a.children("a").removeClass("unchecked").addClass("checked");
return true},uncheck:function(a){if(!a)return false;var c=b.tree.reference(a);a=c.get_node(a);if(a.children("a").hasClass("unchecked"))return true;if(b.extend(true,{},b.tree.plugins.checkbox.defaults,c.settings.plugins.checkbox).three_state){a.find("li").andSelf().children("a").removeClass("checked undetermined").addClass("unchecked");a.parents("li").each(function(){if(b(this).find("a.checked, a.undetermined").size()-1>0){b(this).parents("li").andSelf().children("a").removeClass("unchecked checked").addClass("undetermined");
return false}else b(this).children("a").removeClass("checked undetermined").addClass("unchecked")})}else a.children("a").removeClass("checked").addClass("unchecked");return true},toggle:function(a){if(!a)return false;a=b.tree.reference(a).get_node(a);a.children("a").hasClass("checked")?b.tree.plugins.checkbox.uncheck(a):b.tree.plugins.checkbox.check(a)},callbacks:{onchange:function(a){b.tree.plugins.checkbox.toggle(a)}}}})})(jQuery);