K5FNode=function(H,B,G,F,E,A,C,D){this.contentStyle+=D?" content-forum-newposts":" content-forum-nonewposts";if(H){this.init(H,F,E,A);this.initContent(H,A)}this.setupFId(B);this.setupFType(G);this.hasChildNodes=C;this.hasNewPosts=D;this.createEvent("loadComplete",this)};YAHOO.extend(K5FNode,YAHOO.widget.HTMLNode,{fId:"",fType:"",hasChildNodes:true,setupFId:function(A){this.fId=A},getNodeHtml:function(){var A=K5FNode.superclass.getNodeHtml.call(this);A=A.replace("###TOGGLELINK###",this.getToggleLink());return A},setupFType:function(A){this.fType=A},getIconMode:function(){if(!this.hasChildNodes){return 1}return(this.iconMode||this.tree.root.iconMode)},hasChildren:function(A){return this.hasChildNodes&&(this.children.length>0||(A&&this.isDynamic()&&!this.dynamicLoadComplete))},loadComplete:function(){K5FNode.superclass.loadComplete.call(this);this.fireEvent("loadComplete",this)}});K5Tree=function(A,C){this.buildTree(A,C);this.id=C;this.state=new K5TreeState();this.isUpdating=false;var B=YAHOO.util.History.getBookmarkedState("tree")||"";YAHOO.util.History.register("tree",B,this.stateChange,null,this);this.tree.subscribe("expand",this.onExpand,null,this);this.tree.subscribe("collapse",this.onCollapse,null,this);YAHOO.util.History.onReady(function(){this.stateChange(YAHOO.util.History.getCurrentState("tree"))},null,this)};K5Tree.prototype={tree:"",buildTree:function(E,F){this.tree=new YAHOO.widget.TreeView(F);this.tree.setDynamicLoad(this.loadNodeData,0);var B=this.tree.getRoot();for(var D=0,C=E.length;D<C;D++){var A=new K5FNode(E[D]["label"],E[D]["id"],E[D]["type"],B,false,true,E[D]["hasChild"],E[D]["newPosts"])}this.tree.draw()},loadNodeData:function(node,fnLoadComplete){var nodeId=encodeURI(node.fId);var nodeType=encodeURI(node.fType);var sUrl="/forum/children/"+nodeType+"/"+nodeId;var callback={success:function(oResponse){var oResults=eval("("+oResponse.responseText+")");if((oResults)&&(oResults.length)){if(YAHOO.lang.isArray(oResults)){for(var i=0,j=oResults.length;i<j;i++){var tempNode=new K5FNode(oResults[i]["label"],oResults[i]["id"],oResults[i]["type"],node,false,true,oResults[i]["hasChild"],oResults[i]["newPosts"])}}else{var tempNode=new K5TextNode(oResults["label"],oResults["id"],oResults[i]["type"],node,false,true,oResults["hasChild"],oResults["newPosts"])}}oResponse.argument.fnLoadComplete()},failure:function(oResponse){oResponse.argument.fnLoadComplete()},argument:{"node":node,"fnLoadComplete":fnLoadComplete},timeout:7000};YAHOO.util.Connect.asyncRequest("GET",sUrl,callback)},stateChange:function(E){if(this.state.toString()==E){return }this.isUpdating=true;this.state.setState(E);this.tree.collapseAll();var A=[];for(var B=0;B<this.state.getDepth();B++){A=A.concat(this.state.getNodesByDepth(B))}var D=this;var C=function(){if(A.length==0){return }var F=A.shift();var G=true;var H=D.tree.getNodeByIndex(F);if(!H){return }if(!H.expanded&&H.hasChildren(true)){if(H.isDynamic()&&!H.dynamicLoadComplete){H.subscribe("loadComplete",function(I){I.unsubscribe("loadComplete");C()},null,this);H.expand();G=false}else{H.expand()}}if(G){C()}};C();this.isUpdating=false},onExpand:function(A){if(this.isUpdating){return }this.state.addNode(A);this.saveState()},onCollapse:function(A){if(this.isUpdating){return }this.state.removeNode(A);this.saveState()},saveState:function(){var A=YAHOO.util.History.getCurrentState("tree");var B=this.state.toString();if(B!=A){YAHOO.util.History.navigate("tree",B)}}};var K5TreeState=function(A){this.state=A||[]};K5TreeState.prototype={addNode:function(A){if(!this.state[A.depth]){this.state[A.depth]={}}this.state[A.depth][A.index]=true},removeNode:function(A){delete this.state[A.depth][A.index]},toString:function(){var A=[];for(var D=0;D<this.state.length;D++){var C=[];for(var B in this.state[D]){C.push(B)}A[D]=C.join(".")}return A.join("-")},setState:function(E){if(typeof (E)=="string"){if(E==""){this.state=[]}else{var F=[];var A=E.split("-");for(var D=0;D<A.length;D++){var C=A[D].split(".");for(var B=0;B<C.length;B++){if(!F[D]){F[D]={}}F[D][C[B]]=true}}this.state=F}}if(YAHOO.lang.isArray(E)){this.state=E}},getDepth:function(){return this.state.length},getNodesByDepth:function(C){var B=[];for(var A in this.state[C]){B.push(A)}return B}}