(function(a){a.fn.checkTree=function(c){c=a.extend({onExpand:null,onCollapse:null,onCheck:null,onUnCheck:null,onHalfCheck:null,onLabelHoverOver:null,onLabelHoverOut:null,initBeforePropagate:function(){},initAfterPropagate:function(){},labelAction:"expand",debug:false},c);var e=a("ul.tree"),b=e.find("li"),d=b.find(":checkbox");propagate=false;d.css("display","none");b.not(":has(.arrow)").each(function(){a(this).prepend('<div class="arrow"></div><div class="checkbox"></div>')});e.find("li > ul").css("display","none");e.find("li:has(li) > .arrow").click(function(){var f=a(this);f.toggleClass("expanded").toggleClass("collapsed").siblings("ul:first").toggle();if(c.onExpand&&f.hasClass("expanded")){c.onExpand(f.parent())}else{if(c.onCollapse&&f.hasClass("collapsed")){c.onCollapse(f.parent())}}}).addClass("collapsed");e.find(".checkbox").click(function(){var f=a(this);f.toggleClass("checked").removeClass("half_checked").siblings(":checkbox:first").attr("checked",f.hasClass("checked")?"checked":"");f.filter(".checked").siblings("ul:first").find(".checkbox:not(.checked)").removeClass("half_checked").addClass("checked").siblings(":checkbox").attr("checked","checked");f.filter(":not(.checked)").siblings("ul:first").find(".checkbox.checked").removeClass("checked half_checked").siblings(":checkbox").attr("checked","");if(propagate){f.closest("ul").siblings(":checkbox:first").change()}if(c.onCheck&&f.hasClass("checked")){c.onCheck(f.parent())}else{if(c.onUnCheck&&f.hasClass("checked")==false){c.onUnCheck(f.parent())}}});d.change(function(){var i=a(this);var g=i.siblings(".checkbox:first");var f=i.siblings("ul:first").find(":checkbox:checked:first").length==1;var h=i.siblings("ul:first").find(":checkbox:not(:checked):first").length==1;if(f){if(h){g.addClass("half_checked").removeClass("checked");i.removeAttr("checked");if(c.onHalfCheck){c.onHalfCheck(i.parent())}}else{i.attr("checked","checked");g.addClass("checked").removeClass("half_checked")}}else{g.removeClass("checked half_checked");i.attr("checked","")}if(propagate){i.closest("ul").siblings(":checkbox:first").change()}});e.find("label").click(function(){switch(c.labelAction){case"expand":a(this).siblings(".arrow:first").click();break;case"check":a(this).siblings(".checkbox:first").click();break}}).hover(function(){a(this).addClass("hover");if(c.onLabelHoverOver){c.onLabelHoverOver(a(this).parent())}},function(){a(this).removeClass("hover");if(c.onLabelHoverOut){c.onLabelHoverOut(a(this).parent())}});e.clear=function(){e.find(".checkbox").removeClass("checked").siblings(":checkbox").attr("checked","")};if(typeof c.initBeforePropagate=="function"){c.initBeforePropagate.apply(this)}propagate=true;if(typeof c.initAfterPropagate=="function"){c.initAfterPropagate.apply(this)}}})(jQuery);
