
(function(jQuery){jQuery.fn.checkboxTree=function(settings){settings=jQuery.extend({collapsedarrow:"img-arrow-collapsed.gif",expandedarrow:"img-arrow-expanded.gif",blankarrow:"img-arrow-blank.gif",activeClass:"checkboxtreeactive",hoverClass:"over",checkchildren:false,checkparents:true,collapsed:true,hidecbwithjs:false,checkedClass:"checked"},settings);var $group=this;var $labels=jQuery(":checkbox + label",$group)
var $checkboxes=jQuery(":checkbox",$group)
jQuery("li",$group).each(function(){var $this=jQuery(this)
var $collapseImage;if(settings.checkparents){var checkedchildren=jQuery("ul li input:checked",$this).length
var $firstcheckbox=$this.children("input:checkbox:first")
if((!$this.children("input:checkbox:first").is(":checked"))&&(checkedchildren>0)){$firstcheckbox.attr("checked","checked")}}
if($this.is(":has(ul)")){if($this.find("ul").attr("ft:expanded")=='expanded'){$collapseImage=jQuery('<img class="checkboxtreeimage" src="'+settings.expandedarrow+'" / >')
$collapseImage.data("collapsedstate",1)}else{$this.find("ul").hide();$collapseImage=jQuery('<img class="checkboxtreeimage" src="'+settings.collapsedarrow+'" / >')
$collapseImage.data("collapsedstate",0)}}else{$collapseImage=jQuery('<img src="'+settings.blankarrow+'" / >')}
$this.prepend($collapseImage);})
$group.addClass(settings.activeClass);$group.bind("click.checkboxtree",function(e,a){var $clicked=jQuery(e.target)
var $clickedcheck=$clicked.prev()
var $currrow=$clicked.parents("li:first")
var $clickedparent=$currrow.parents("li:first").find(":checkbox:first");var $clickedparentlabel=$clickedparent.next("label");var clickedlabel=false;var clickedimage=false;if($clicked.is(":checkbox + label")){clickedlabel=true;}
if($clicked.is("img.checkboxtreeimage")){clickedimage=true;}
if(clickedlabel){$clicked.prev().attr({checked:!$clickedcheck.attr("checked")}).end().toggleClass(settings.checkedClass);if(settings.checkparents){var checkedchildren=jQuery("input:checked",$currrow).length
if((!$clickedparent.is(":checked"))&&(checkedchildren>0)){$clickedparentlabel.trigger("click.checkboxtree",["checkparents"])}}
if(settings.checkchildren&&a!=="checkparents"){$currrow.find(":checkbox + label").prev().attr({checked:$clickedcheck.attr("checked")?"checked":""}).next().addClass($clicked.hasClass(settings.checkedClass)?settings.checkedClass:"").removeClass($clicked.hasClass(settings.checkedClass)?"":settings.checkedClass)}}
if(clickedimage){var clickstate=$clicked.data("collapsedstate")
if(clickstate===0){$currrow.children("ul").show();$currrow.children("img").attr("src",settings.expandedarrow);$clicked.data("collapsedstate",1)}else if(clickstate===1){$currrow.children("ul").hide();$currrow.children("img").attr("src",settings.collapsedarrow);$clicked.data("collapsedstate",0)}}})
jQuery("input:checked + label",$group).addClass(settings.checkedClass)
if(jQuery.browser.msie&&jQuery.browser.version<7){$labels.hover(function(){jQuery(this).addClass(settings.hoverClass)},function(){jQuery(this).removeClass(settings.hoverClass);})}
if(settings.hidecbwithjs){$checkboxes.hide();}
return $group;};})(jQuery);
