var Log={elem:$("log"),write:function(A){if(!this.elem){this.elem=$("log")}this.elem.set("html",A)}};function init(){Infovis.initLayout();var H=$("infovis");var G=H.offsetWidth,D=H.offsetHeight;var B,A,E;var J=Feeder.makeTree();var C=new Canvas("mycanvas",{injectInto:"infovis",width:G,height:D,backgroundColor:"#222",styles:{fillStyle:"#ccb",strokeStyle:"#ccb"}});var I=new ST(C,{onBeforeCompute:function(K){Log.write("loading "+K.name)},onAfterCompute:function(){Log.write("done")},request:function(L,M,K){Feeder.request(L,M,K)},onCreateLabel:function(K,L){var M=$(K);K.id=L.id;M.setStyle("cursor","pointer").set("html",L.name).addEvent("click",function(){I.onClick(M.id)})},onBeforePlotNode:function(L){var K=C.getCtx();B=K.fillStyle;A=K.strokeStyle;if(L.selected){K.fillStyle="#ff7";K.strokeStyle="#eed"}},onAfterPlotNode:function(L){var K=C.getCtx();K.fillStyle=B;K.stroleStyle=A},onBeforePlotLine:function(L){var K=C.getCtx();E=K.lineWidth;A=K.strokeStyle;if(L.nodeFrom.selected&&L.nodeTo.selected){K.strokeStyle="#eed";K.lineWidth=3}},onAfterPlotLine:function(L){var K=C.getCtx();K.lineWidth=E;K.stroleStyle=A}});I.loadFromJSON(J);I.compute();Tree.Geometry.translate(I.tree,new Complex(-200,0),"startPos");I.onClick(I.tree.id);var F=$("switch").addEvent("change",function(){var K=F.selectedIndex;var L=F.options[K].text;F.disabled=true;I.switchPosition(L,{onComplete:function(){F.disabled=false}})})}var Feeder={counter:0,p:{idPrefix:"node",levelStart:0,levelEnd:3,maxChildrenPerNode:5,counter:0},makeTree:function(){var A=this.p.levelEnd;if(A==0){return{children:[]}}this.counter=1;return this.makeTreeWithParameters(this.p.idPrefix,this.p.levelStart,this.p.levelEnd,this.p.maxChildrenPerNode)},makeTreeWithParameters:function(B,I,C,D){if(I==C){return null}this.counter++;var H=Math.floor(Math.random()*10)+1;var E=Math.floor(Math.random()*200-100);var J={id:B+I+this.counter,name:I+"."+this.counter,data:[{key:"key1",value:H},{key:"key2",value:E}],children:[]};var F=Math.floor(Math.random()*D)+1;if(F==1&&I==0){F++}I++;for(var G=0;G<F;G++){var A=this.makeTreeWithParameters(B,I,C,D);if(A!=null){J.children[G]=A}}return J},request:function(C,D,B){this.p.idPrefix=C;this.p.levelEnd=D+1;var A=this.makeTree();B.onComplete(C,A)}};