if(!Cat){var Cat={}}if(!Cat.ids){Cat.ids={}}if(!Cat.id){Cat.id=function(a){return Cat.ids[a]}}Cat.Tree=new Class({version:"1.2.6.4",Implements:[Events,Options],options:{types:{},forest:false,animateScroll:true,height:18,expandTo:true},initialize:function(a){this.setOptions(a);$extend(this,{types:this.options.types,forest:this.options.forest,animateScroll:this.options.animateScroll,dfltType:this.options.dfltType,height:this.options.height,container:$(a.container),UID:++Cat.Tree.UID,key:{},expanded:[]});this.defaults={name:"",cls:"",openIcon:"cat-tree-empty-icon",closeIcon:"cat-tree-empty-icon",loadable:false,hidden:false};this.dfltState={open:false};this.$index=[];this.updateOpenState();if(this.options.expandTo){this.initExpandTo()}this.DOMidPrefix="cat-tree-";this.wrapper=new Element("div",{id:"cat-tree-wrapper"}).addClass("cat-tree-wrapper").injectInside(this.container);this.events();this.initScroll();this.initSelection();this.initHover();this.addEvent("drawChildren",function(f){var d=f._toggle||[];for(var e=0,c=d.length;e<c;e++){d[e].drawToggle()}f._toggle=[]});var b=this.options.id;this.id=b;if(b!=null){Cat.ids[b]=this}if(MooTools.version>="1.2.2"&&this.options.initialize){this.options.initialize.call(this)}},bound:function(){Array.each(arguments,function(a){this.bound[a]=this[a].bind(this)},this)},events:function(){this.bound("mouse","mouseleave","mousedown","preventDefault","toggleClick","toggleDblclick","focus","blurOnClick","keyDown","keyUp");this.wrapper.addEvents({mousemove:this.bound.mouse,mouseover:this.bound.mouse,mouseout:this.bound.mouse,mouseleave:this.bound.mouseleave,mousedown:this.bound.mousedown,click:this.bound.toggleClick,dblclick:this.bound.toggleDblclick,selectstart:this.bound.preventDefault});this.container.addEvent("click",this.bound.focus);document.addEvent("click",this.bound.blurOnClick);document.addEvents({keydown:this.bound.keyDown,keyup:this.bound.keyUp})},blurOnClick:function(a){var b=a.target;while(b){if(b==this.container){return}b=b.parentNode}this.blur()},focus:function(){if(Cat.Focus&&Cat.Focus==this){return this}if(Cat.Focus){Cat.Focus.blur()}Cat.Focus=this;this.focused=true;this.container.addClass("cat-tree-focused");return this.fireEvent("focus")},blur:function(){Cat.Focus=null;if(!this.focused){return this}this.focused=false;this.container.removeClass("cat-tree-focused");return this.fireEvent("blur")},$getIndex:function(){this.$index=[];var b=this.forest?this.root.getFirst():this.root;var a=b;while(b){if(!(a.hidden&&a.contains(b))){if(!b.hidden){this.$index.push(b)}a=b}b=b._getNextVisible()}},preventDefault:function(a){a.preventDefault()},mousedown:function(a){if(a.rightClick){return}a.preventDefault();this.fireEvent("mousedown")},mouseleave:function(){this.mouse.coords={x:null,y:null};this.mouse.target=false;this.mouse.node=false;if(this.hover){this.hover()}},mouse:function(a){this.mouse.coords=this.getCoords(a);var b=this.getTarget(a);this.mouse.target=b.target;this.mouse.node=b.node},getTarget:function(d){var e=d.target,c;while(!(/cat-tree/).test(e.className)){e=e.parentNode}var g=e.className.match(/cat-tree-(gadjet)-[^n]|cat-tree-(icon)|cat-tree-(name)|cat-tree-(checkbox)/);if(!g){var f=this.mouse.coords.y;if(f==-1||!this.$index){c=false}else{c=this.$index[((f)/this.height).toInt()]}return{node:c,target:"node"}}for(var a=5;a>0;a--){if(g[a]){var b=g[a];break}}return{node:Cat.Tree.Nodes[e.getAttribute("uid")],target:b}},getCoords:function(c){var b=this.wrapper.getPosition();var a=c.page.x-b.x;var e=c.page.y-b.y;var d=this.wrapper;if((e-d.scrollTop>d.clientHeight)||(a-d.scrollLeft>d.clientWidth)){e=-1}return{x:a,y:e}},keyDown:function(a){this.key=a;this.key.state="down";if(this.focused){this.fireEvent("keydown",[a])}},keyUp:function(a){this.key={};this.key.state="up";if(this.focused){this.fireEvent("keyup",[a])}},toggleDblclick:function(a){var b=this.mouse.target;if(!(b=="name"||b=="icon")){return}this.mouse.node.toggle()},toggleClick:function(a){if(this.mouse.target!="gadjet"){return}this.mouse.node.toggle()},initScroll:function(){this.scroll=new Fx.Scroll(this.wrapper,{link:"cancel"})},scrollTo:function(c){var b=c.getVisiblePosition();var d=b*this.height;var a=(d<this.wrapper.scrollTop);var e=(d>(this.wrapper.scrollTop+this.wrapper.clientHeight-this.height));if(b==-1||(!a&&!e)){this.scroll.fireEvent("complete");return false}if(this.animateScroll){this.scroll.start(this.wrapper.scrollLeft,d-(e?this.wrapper.clientHeight-this.height:this.height))}else{this.scroll.set(this.wrapper.scrollLeft,d-(e?this.wrapper.clientHeight-this.height:this.height));this.scroll.fireEvent("complete")}return this},updateOpenState:function(){this.addEvents({drawChildren:function(d){var c=d.children;for(var b=0,a=c.length;b<a;b++){c[b].updateOpenState()}},drawRoot:function(){this.root.updateOpenState()}})},expandTo:function(a){if(!a){return this}var b=[];while(!a.isRoot()&&!(this.forest&&a.getParent().isRoot())){a=a.getParent();if(!a){break}b.unshift(a)}b.each(function(c){c.toggle(true)});return this},initExpandTo:function(){this.addEvent("loadChildren",function(d){if(!d){return}var c=d.children;for(var b=c.length;b--;){var e=c[b];if(e.expandTo){this.expanded.push(e)}}});function a(){this.expanded.each(function(b){this.expandTo(b)},this);this.expanded=[]}this.addEvents({load:a.bind(this),loadNode:a.bind(this)})}});Cat.Tree.UID=0;Array.implement({inject:function(c,d,a){var e=this.indexOf(d)+(a=="before"?0:1);for(var b=this.length-1;b>=e;b--){this[b+1]=this[b]}this[e]=c;return this}});Cat.Tree.Node=new Class({Implements:[Events],initialize:function(a,b){$extend(this,a);this.children=[];this.type=b.type||this.tree.dfltType;this.property=b.property||{};this.data=b.data;this.state=$extend($unlink(this.tree.dfltState),b.state);this.$calculate();this.UID=Cat.Tree.Node.UID++;Cat.Tree.Nodes[this.UID]=this;var c=this.id;if(c!=null){Cat.ids[c]=this}this.tree.fireEvent("nodeCreate",[this]);this._property=["id","name","cls","openIcon","closeIcon","openIconUrl","closeIconUrl","hidden"]},$calculate:function(){$extend(this,$unlink(this.tree.defaults));this.type=$splat(this.type);this.type.each(function(b){var a=this.tree.types[b];if(a){$extend(this,a)}},this);$extend(this,this.property);return this},getDOM:function(b){var a=$(this.tree.DOMidPrefix+this.UID);if(b=="node"){return a}var c=a.getFirst();if(b=="wrapper"){return c}if(b=="children"){return c.getNext()}return c.getElement(".cat-tree-"+b)},getGadjetType:function(){return(this.loadable&&!this.isLoaded())?"plus":(this.hasVisibleChildren()?(this.isOpen()?"minus":"plus"):"none")},toggle:function(c){if(this.state.open==c||this.$loading||this.$toggling){return this}var b=this.getParent();function a(d){this.state.open=!this.state.open;if(d=="drawed"){this.drawToggle()}else{b._toggle=(b._toggle||[])[this.state.open?"include":"erase"](this)}this.fireEvent("toggle",[this.state.open]);this.tree.fireEvent("toggle",[this,this.state.open]);return this}if(b&&!b.$draw){return a.apply(this,[])}if(this.loadable&&!this.state.loaded){if(!this.load_event){this.load_event=true;this.addEvent("load",function(){this.toggle()}.bind(this))}return this.load()}if(!this.hasChildren()){return this}return a.apply(this,["drawed"])},drawToggle:function(){this.tree.$getIndex();Cat.Tree.Draw.update(this)},recursive:function(b,a){a=$splat(a);if(b.apply(this,a)!==false){this.children.each(function(c){if(c.recursive(b,a)===false){return false}})}return this},isOpen:function(){return this.state.open},isLoaded:function(){return this.state.loaded},isLast:function(){if(this.parentNode==null||this.parentNode.children.getLast()==this){return true}return false},isFirst:function(){if(this.parentNode==null||this.parentNode.children[0]==this){return true}return false},isRoot:function(){return this.parentNode==null?true:false},getChildren:function(){return this.children},hasChildren:function(){return this.children.length?true:false},index:function(){if(this.isRoot()){return 0}return this.parentNode.children.indexOf(this)},getNext:function(){if(this.isLast()){return null}return this.parentNode.children[this.index()+1]},getPrevious:function(){if(this.isFirst()){return null}return this.parentNode.children[this.index()-1]},getFirst:function(){if(!this.hasChildren()){return null}return this.children[0]},getLast:function(){if(!this.hasChildren()){return null}return this.children.getLast()},getParent:function(){return this.parentNode},_getNextVisible:function(){var b=this;if(b.isRoot()){if(!b.isOpen()||!b.hasChildren(true)){return false}return b.getFirst(true)}else{if(b.isOpen()&&b.getFirst(true)){return b.getFirst(true)}else{var a=b;do{b=a.getNext(true);if(b){return b}a=a.parentNode}while(a);return false}}},getPreviousVisible:function(){var a=this.tree.$index.indexOf(this);return a==0?null:this.tree.$index[a-1]},getNextVisible:function(){var a=this.tree.$index.indexOf(this);return a<this.tree.$index.length-1?this.tree.$index[a+1]:null},getVisiblePosition:function(){return this.tree.$index.indexOf(this)},hasVisibleChildren:function(){if(!this.hasChildren()){return false}if(this.isOpen()){var a=this.getNextVisible();if(!a){return false}if(a.parentNode!=this){return false}return true}else{var b=this.getFirst();while(b){if(!b.hidden){return true}b=b.getNext()}return false}},isLastVisible:function(){var a=this.getNext();while(a){if(!a.hidden){return false}a=a.getNext()}return true},contains:function(a){while(a){if(a==this){return true}a=a.parentNode}return false},addType:function(a){return this.processType(a,"add")},removeType:function(a){return this.processType(a,"remove")},setType:function(a){return this.processType(a,"set")},processType:function(a,b){switch(b){case"add":this.type.include(a);break;case"remove":this.type.erase(a);break;case"set":this.type=a;break}var c={};this._property.each(function(d){c[d]=this[d]},this);this.$calculate();this._property.each(function(d){this.updateProperty(d,c[d],this[d])},this);return this},set:function(e){this.tree.fireEvent("beforeSet",[this,e]);var c=e.property||e||{};for(var d in c){var b=c[d];var a=this[d];this.updateProperty(d,a,b);this[d]=this.property[d]=b}this.tree.fireEvent("set",[this,e]);return this},updateProperty:function(a,c,g){if(g==c){return this}if(a=="id"){delete Cat.ids[c];if(g){Cat.ids[g]=this}return this}if(!Cat.Tree.Draw.isUpdatable(this)){return this}switch(a){case"name":this.getDOM("name").set("html",g);return this;case"cls":this.getDOM("wrapper").removeClass(c).addClass(g);return this;case"openIcon":case"closeIcon":this.getDOM("icon").removeClass(c).addClass(g);return this;case"openIconUrl":case"closeIconUrl":var h=this.getDOM("icon");h.setStyle("background-image","none");if(g){h.setStyle("background-image","url("+g+")")}return this;case"hidden":this.getDOM("node").setStyle("display",g?"none":"block");var f=this.getPreviousVisible();var b=this.getNextVisible();var i=this.getParent();this[a]=this.property[a]=g;this.tree.$getIndex();var e=this.getPreviousVisible();var d=this.getNextVisible();[f,b,e,d,i,this].each(function(j){Cat.Tree.Draw.update(j)});return this}return this},updateOpenState:function(){if(this.state.open){this.state.open=false;this.toggle()}}});Cat.Tree.Node.UID=0;Cat.Tree.Nodes={};Cat.Tree.Draw={getHTML:function(c,a){var d=c.tree.DOMidPrefix;var b;var e;if($defined(c.data.description)&&c.data.description!=""){b='<tr class="cat-tree-row" uid="'+c.UID+'"><td class="cat-tree-description" uid="'+c.UID+'">'+c.data.description+"</td></tr>";e=' rowspan="2"'}else{b="";e=""}a=a||[];a.push('<div class="cat-tree-node ',(c.isLast()?"cat-tree-node-last":""),'" id="',d,c.UID,'">','<table class="cat-tree-table" uid="',c.UID,'">','<tr class="cat-tree-row" uid="',c.UID,'">','<td class="cat-tree-node-wrapper ',c.cls,'" uid="',c.UID,'"',e,">",'<div class="cat-tree-gadjet cat-tree-gadjet-',c.getGadjetType(),'" uid="',c.UID,'">',Cat.Tree.Draw.zeroSpace,"</div>","</td>",'<td class="cat-tree-icon-wrapper" uid="',c.UID,'"',e,">",'<div class="cat-tree-icon ',c.closeIcon,'" uid="',c.UID,'"',e,">",Cat.Tree.Draw.zeroSpace,"</div>","</td>",'<td class="cat-tree-name-wrapper" uid="',c.UID,'">','<div class="cat-tree-name" uid="',c.UID,'">',c.name,"</div>","</td>","</tr>",b,"</table>",'<div class="cat-tree-children" style="display:none"></div>',"</div>");return a},children:function(f,b){f.open=true;f.$draw=true;var e=[];var d=f.children;for(var c=0,a=d.length;c<a;c++){this.getHTML(d[c],e)}b=b||f.getDOM("children");b.set("html",e.join(""));f.tree.fireEvent("drawChildren",[f])},root:function(b){var a=this.node(b.root);a.inject(b.wrapper);b.$draw=true;b.fireEvent("drawRoot")},forestRoot:function(a){var b=new Element("div").addClass("cat-tree-children-root").injectInside(a.wrapper);Cat.Tree.Draw.children(a.root,b)},node:function(a){return new Element("div").set("html",this.getHTML(a).join("")).getFirst()},isUpdatable:function(a){if((!a||!a.tree)||(a.getParent()&&!a.getParent().$draw)||(a.isRoot()&&(!a.tree.$draw||a.tree.forest))){return false}return true},update:function(b){if(!this.isUpdatable(b)){return null}if(!b.hasChildren()){b.state.open=false}b.getDOM("gadjet").className="cat-tree-gadjet cat-tree-gadjet-"+b.getGadjetType();if(b.closeIconUrl){b.getDOM("icon").setStyle("background-image","url("+(b.isOpen()?b.openIconUrl:b.closeIconUrl)+")")}else{b.getDOM("icon").className="cat-tree-icon "+b[b.isOpen()?"openIcon":"closeIcon"]}b.getDOM("node")[(b.isLastVisible()?"add":"remove")+"Class"]("cat-tree-node-last");if(b.$loading){return null}var a=b.getDOM("children");if(b.isOpen()){if(!b.$draw){Cat.Tree.Draw.children(b)}a.style.display="block"}else{a.style.display="none"}b.tree.fireEvent("updateNode",b);return b},inject:function(d,b){if(!this.isUpdatable(d)){return}b=b||d.getDOM("node")||this.node(d);var c=d.getPrevious();if(c){b.injectAfter(c.getDOM("node"));return}var a;if(d.tree.forest&&d.parentNode.isRoot()){a=d.tree.wrapper.getElement(".cat-tree-children-root")}else{if(d.tree.root==d){a=d.tree.wrapper}else{a=d.parentNode.getDOM("children")}}b.inject(a,"top")}};Cat.Tree.Draw.zeroSpace=Browser.Engine.trident?"&shy;":(Browser.Engine.webkit?"&#8203":"");Cat.Tree.implement({initSelection:function(){this.defaults.selectClass="";this.wrapper.addEvent("mousedown",this.attachSelect.bindWithEvent(this))},attachSelect:function(b){if(!["icon","name","node"].contains(this.mouse.target)){return}var a=this.mouse.node;if(!a){return}this.select(a)},select:function(a){if(!a){return this}var b=this.selected;if(b==a){return this}if(b){b.select(false);this.fireEvent("unSelect",[b]).fireEvent("selectChange",[b,false])}this.selected=a;a.select(true);this.fireEvent("select",[a]).fireEvent("selectChange",[a,true]);return this},unselect:function(){var a=this.selected;if(!a){return this}this.selected=false;a.select(false);this.fireEvent("unSelect",[a]).fireEvent("selectChange",[a,false]);return this},getSelected:function(){return this.selected},isSelected:function(a){return a.isSelected()}});Cat.Tree.Node.implement({select:function(a){this.state.selected=a;if(!Cat.Tree.Draw.isUpdatable(this)){return}var b=this.getDOM("wrapper");b[(a?"add":"remove")+"Class"](this.selectClass||"cat-tree-node-selected")},isSelected:function(){return this.state.selected}});Cat.Tree.implement({initHover:function(){this.defaults.hoverClass="";this.wrapper.addEvent("mousemove",this.hover.bind(this));this.wrapper.addEvent("mouseout",this.hover.bind(this));this.defaultHoverState={gadjet:false,checkbox:false,icon:false,name:false,node:false};this.hoverState=$unlink(this.defaultHoverState)},hover:function(){var b=this.mouse.node;var a=this.mouse.target;$each(this.hoverState,function(c,e,d){if(c==b&&(e=="node"||e==a)){return}if(c){Cat.Tree.Hover.out(c,e);d[e]=false;this.fireEvent("hover",[c,e,"out"])}if(b&&(e=="node"||e==a)){Cat.Tree.Hover.over(b,e);d[e]=b;this.fireEvent("hover",[b,e,"over"])}else{d[e]=false}},this)},updateHover:function(){this.hoverState=$unlink(this.defaultHoverState);this.hover()}});Cat.Tree.Hover={over:function(a,b){var c=a.getDOM("wrapper");c.addClass((a.hoverClass||"cat-tree-hover")+"-"+b);if(a.state.selected){c.addClass((a.hoverClass||"cat-tree-hover")+"-selected-"+b)}},out:function(a,b){var c=a.getDOM("wrapper");c.removeClass((a.hoverClass||"cat-tree-hover")+"-"+b).removeClass((a.hoverClass||"cat-tree-hover")+"-selected-"+b)}};Cat.Tree.Load={children:function(c,h,k){var g,e;var j=[];for(g=c.length;g--;){var b=c[g];var d=new Cat.Tree.Node({tree:k,parentNode:h||undefined},b);if(k.forest||h!=undefined){h.children.unshift(d)}else{k.root=d}var f=b.children;if(f&&f.length){j.push({children:f,parent:d})}}for(g=0,e=j.length;g<e;g++){var a=j[g];arguments.callee(a.children,a.parent,k)}if(h){h.state.loaded=true}k.fireEvent("loadChildren",h)}};Cat.Tree.implement({load:function(b){var a=this;this.loadOptions=this.loadOptions||$lambda({});function c(d){var e=null;if(a.forest){a.root=new Cat.Tree.Node({tree:a,parentNode:null},{});e=a.root}Cat.Tree.Load.children(d,e,a);Cat.Tree.Draw[a.forest?"forestRoot":"root"](a);a.$getIndex();a.fireEvent("load");return a}b=$extend($extend({isSuccess:$lambda(true),secure:true,onSuccess:c,method:"get"},this.loadOptions()),b);if(b.json){return c(b.json)}new Request.JSON(b).send();return this}});Cat.Tree.Node.implement({load:function(b){this.$loading=true;b=b||{};this.addType("loader");var a=this;function c(d){Cat.Tree.Load.children(d,a,a.tree);delete a.$loading;a.state.loaded=true;a.removeType("loader");Cat.Tree.Draw.update(a);a.fireEvent("load");a.tree.fireEvent("loadNode",a);return a}b=$extend($extend($extend({isSuccess:$lambda(true),secure:true,onSuccess:c,method:"get"},this.tree.loadOptions(this)),this.loadOptions),b);if(b.json){return c(b.json)}new Request.JSON(b).send();return this}});
