(function(a){a.fn.checkTree=function(b){b=a.extend({onExpand:null,onCollapse:null,onCheck:null,onUnCheck:null,onHalfCheck:null,onLabelHoverOver:null,onLabelHoverOut:null,labelAction:"expand",debug:false},b);var c=this;c.find("li").find(":checkbox").change(function(){var e=a(this).siblings("ul").find(":checkbox");var d=e.filter(":checked");if(e.length==d.length){a(this).attr("checked","checked").siblings(".checkbox").removeClass("half_checked").addClass("checked")}else{if(d.length==0){a(this).attr("checked","").siblings(".checkbox").removeClass("checked").removeClass("half_checked")}else{if(b.onHalfCheck&&!a(this).siblings(".checkbox").hasClass("half_checked")){b.onHalfCheck(a(this).parent())}a(this).attr("checked","").siblings(".checkbox").removeClass("checked").addClass("half_checked")}}}).hide().end().each(function(){a(this).find("ul").each(function(){if(!a(this).siblings(".expanded").length){a(this).hide()}});var d=a(this).children("label").clone();var f=a('<div class="checkbox"></div>');var e=a('<div class="arrow"></div>');if(a(this).is(":has(ul)")){if(a(this).children("ul").is(":hidden")){e.addClass("collapsed")}else{e.addClass("expanded")}e.click(function(){a(this).siblings("ul").toggle();if(a(this).hasClass("collapsed")){a(this).addClass("expanded").removeClass("collapsed");if(b.onExpand){b.onExpand(a(this).parent())}}else{a(this).addClass("collapsed").removeClass("expanded");if(b.onCollapse){b.onCollapse(a(this).parent())}}})}f.click(function(){a(this).toggleClass("checked").removeClass("half_checked").siblings(":checkbox").click();if(a(this).hasClass("checked")){if(b.onCheck){b.onCheck(a(this).parent())}a(this).siblings("ul").find(".checkbox").not(".checked").removeClass("half_checked").addClass("checked").each(function(){}).siblings(":checkbox").attr("checked","checked")}else{if(b.onUnCheck){b.onUnCheck(a(this).parent())}a(this).siblings("ul").find(".checkbox").filter(".checked").removeClass("half_checked").removeClass("checked").each(function(){}).siblings(":checkbox").attr("checked","")}a(this).parents("ul").siblings(":checkbox").change()});if(a(this).children(".checkbox").hasClass("checked")){f.addClass("checked")}else{if(a(this).children(":checkbox").attr("checked")){f.addClass("checked");a(this).parents("ul").siblings(":checkbox").change()}else{if(a(this).children(".checkbox").hasClass("half_checked")){f.addClass("half_checked")}}}a(this).children(".arrow").remove();a(this).children(".checkbox").remove();a(this).children("label").remove();a(this).prepend(d).prepend(f).prepend(e)}).find("label").click(function(){var d=b.labelAction;switch(b.labelAction){case"expand":a(this).siblings(".arrow").click();break;case"check":a(this).siblings(".checkbox").click();break}}).hover(function(){a(this).addClass("hover");if(b.onLabelHoverOver){b.onLabelHoverOver(a(this).parent())}},function(){a(this).removeClass("hover");if(b.onLabelHoverOut){b.onLabelHoverOut(a(this).parent())}}).end();return c}})(jQuery);