
(function($){var defaults={maxSelects:0,onCollapse:function(){},onExpand:function(){},onSelect:function(){},onUnselect:function(){}};$.fn.tree=function(options){if(options=='selected'){return this.children('.ui-tree-selected');}
options=$.extend(defaults,options);return this.each(function(){initTree(this,options);});};var initTree=function(ul,options){var selectedItems=[];var createTree=function(element){$(element).addClass('ui-tree-collapsed').children('ul').children('li').each(function(){createTree(this);});var tree_item=$(element).children().not('ul').addClass('ui-tree-item');tree_item.click(function(e){if(isSelected(this)){for(var i in selectedItems){if(selectedItems[i]==this)delete selectedItems[i];}
unselectItem(this,options.onUnselect);return;}
if(options.maxSelects!=-1&&selectedItems.length>0&&selectedItems.length>=options.maxSelects){unselectItem(selectedItems[0],options.onUnselect);selectedItems=selectedItems.slice(1);}
if(options.maxSelects==-1||selectedItems.length+1<=options.maxSelects){selectItem(this,options.onSelect);selectedItems.push(this);}});if($(element).children('ul').size()>0){var treeHandle=$('<span></span>').text('+').addClass('ui-tree-handle').click(function(){isExpanded(element)?collapseTree(element,options.onCollapse):expandTree(element,options.onExpand);}).prependTo(element);if(options.maxSelects==0)tree_item.click(function(e){treeHandle.click();});}};$(ul).filter('ul').addClass('ui-tree').children('li').each(function(){createTree(this);});};var isExpanded=function(element){return $(element).hasClass('ui-tree-expanded');};var collapseTree=function(element,onCollapse){$(element).removeClass('ui-tree-expanded').addClass('ui-tree-collapsed').children('.ui-tree-handle').text('+');onCollapse.apply(element);};var expandTree=function(element,onExpand){$(element).removeClass('ui-tree-collapsed').addClass('ui-tree-expanded').children('.ui-tree-handle').text('-');onExpand.apply(element);};var isSelected=function(element){return $(element).hasClass('ui-tree-selected');};var unselectItem=function(element,onUnselect){$(element).removeClass('ui-tree-selected');onUnselect.apply(element);};var selectItem=function(element,onSelect){$(element).addClass('ui-tree-selected');onSelect.apply(element);};})(jQuery);