/****************************************************************************
 **
 ** This file is part of yFiles AJAX.
 **
 ** yWorks proprietary/confidential. Use is subject to license terms.
 **
 ** Unauthorized redistribution of this file and reverse engineering are
 ** strictly forbidden.
 **
 ** Copyright (c) 2006-2008 by yWorks GmbH, Vor dem Kreuzberg 28,
 ** 72070 Tuebingen, Germany. All rights reserved.
 **
 ***************************************************************************/

if(!dojo._hasResource["yfiles.client.tiles.Graph"]){dojo._hasResource["yfiles.client.tiles.Graph"]=true;dojo.provide("yfiles.client.tiles.Graph");dojo.declare("yfiles.client.tiles.Graph",null,{_name:null,_baseURL:null,constructor:function(_1,_2){if(_1){this._baseURL=_1;}else{this._baseURL=".";}if(_2){this._name=_2;this.load(_2);}},getName:function(){return this._name;},getBaseURL:function(){return this._baseURL;},load:function(_3,_4){var _5={path:_3};if(_4){_5.reload="true";}var _6=this;dojo.xhrPost({url:this._baseURL+"/loadGraph",content:_5,load:function(_7,_8){_6._name=_3;_6.onLoad(_3);},error:function(_9,_a){_6.onLoadFailed(_3);}});},createNode:function(x,y,_d){var _e={name:this._name,x:x,y:y};if(_d){_e.type=_d;}if(this._name){var _f=this;dojo.xhrPost({url:this._baseURL+"/createNode",content:_e,load:function(_10,_11){_f.onNodeCreated(_10.id,_10.bounds,this._name,x,y);},error:function(_12,_13){_f.onNodeCreationFailed(_f._name,x,y);},handleAs:"json-comment-filtered"});}else{this.onNodeCreationFailed(null,x,y);}},createEdge:function(_14,_15,_16){if(this._name){var _17=this;var _18=_16?1:0;dojo.xhrPost({url:this._baseURL+"/createEdge",content:{name:this._name,source:_14,target:_15,route:_18},load:function(_19,_1a){_17.onEdgeCreated(_19.id,_19.bounds,_17._name,_14,_15);},error:function(_1b,_1c){_17.onNodeCreationFailed(_17._name,_14,_15);},handleAs:"json-comment-filtered"});}else{this.onEdgeCreationFailed(null,_14,_15);}},removeAt:function(x,y){if(this._name){var _1f=this;dojo.xhrPost({url:this._baseURL+"/removeAt?name="+this._name+"&x="+x+"&y="+y,load:function(_20,_21){_1f.onRemove([_20.id],_20.bounds,_1f._name,x,y);},error:function(_22,_23){_1f.onRemoveFailed([],_1f._name,x,y);},handleAs:"json-comment-filtered"});}else{this.onRemoveFailed([],null,x,y);}},remove:function(ids){if(this._name&&ids.length>0){var _25=ids[0];for(var i=1;i<ids.length;i++){_25=_25+","+ids[i];}var _27=this;dojo.xhrPost({url:this._baseURL+"/remove",content:{name:this._name,ids:_25},load:function(_28,_29){_27.onRemove(ids,_28.bounds,_27._name);},error:function(_2a,_2b){_27.onRemoveFailed(ids,_27._name);},handleAs:"json-comment-filtered"});}else{this.onRemoveFailed(ids,null);}},moveNodes:function(_2c,x,y){if(this._name&&_2c.length>0){var ids=_2c[0];for(var i=1;i<_2c.length;i++){ids=ids+","+_2c[i];}var _31=this;dojo.xhrPost({url:this._baseURL+"/moveNodes",content:{name:this._name,ids:ids,x:x,y:y},load:function(_32,_33){_31.onNodesMoved(_32.bounds,_31._name,_2c,x,y);},error:function(_34,_35){_31.onNodesMoveFailed(_31._name,_2c,x,y);},handleAs:"json-comment-filtered"});}else{this.onNodesMoveFailed(null,_2c,x,y);}},getLabel:function(id,_37,_38,_39){if(this._name){var _3a=this;dojo.xhrPost({url:this._baseURL+"/getLabel",content:{name:this._name,id:id},load:function(_3b,_3c){_38.call(_37,_3b,_3a._name,id);},error:function(_3d,_3e){if(_39){_39.call(_37,_3a._name,id);}},handleAs:"text"});}else{if(_39){_39.call(_37,null,id);}}},setLabel:function(id,_40){if(this._name){var _41=this;var nl=encodeURIComponent(_40);dojo.xhrPost({url:this._baseURL+"/setLabel",content:{name:this._name,id:id,"label":nl},load:function(_43,_44){_41.onLabelSet(_40,_41._name,id);},error:function(_45,_46){_41.onLabelSetFailed(_40,_41._name,id);},handleAs:"text"});}else{this.onLabelSetFailed(_40,null,id);}},getBounds:function(_47,_48,_49,_4a){var _4b={path:this._name};if(_4a){_4b.seq=_4a;}if(this._name){var _4c=this;dojo.xhrGet({url:this._baseURL+"/getWorldBounds",content:_4b,load:function(_4d,_4e){_48.call(_47,_4d,_4c._name);},error:function(_4f,_50){if(_49){_49.call(_47,_4c._name);}},handleAs:"json-comment-filtered"});}else{if(_49){_49.call(_47,null);}}},onLoad:function(_51){},onLoadFailed:function(_52){},onNodeCreated:function(id,_54,_55,x,y){},onNodeCreationFailed:function(_58,x,y){},onEdgeCreated:function(id,_5c,_5d,_5e,_5f){},onEdgeCreationFailed:function(_60,_61,_62){},onRemove:function(ids,_64,_65,x,y){},onRemoveFailed:function(ids,_69,x,y){},onNodesMoved:function(_6c,_6d,ids,x,y){},onNodesMoveFailed:function(_71,ids,x,y){},onLabelSet:function(_75,_76,id){},onLabelSetFailed:function(_78,_79,id){}});}if(!dojo._hasResource["yfiles.client.tiles.GraphBounds"]){dojo._hasResource["yfiles.client.tiles.GraphBounds"]=true;dojo.provide("yfiles.client.tiles.GraphBounds");dojo.declare("yfiles.client.tiles.GraphBounds",null,{minX:null,maxX:null,minY:null,maxY:null,constructor:function(_7b,_7c,_7d,_7e){this.minX=_7b;this.maxX=_7c;this.minY=_7d;this.maxY=_7e;},width:function(){return this.maxX-this.minX;},height:function(){return this.maxY-this.minY;},area:function(){return this.width()*this.height();},scale:function(_7f){return new yfiles.client.tiles.GraphBounds(_7f*this.minX,_7f*this.maxX,_7f*this.minY,_7f*this.maxY);},round:function(){return new yfiles.client.tiles.GraphBounds(Math.floor(this.minX),Math.floor(this.maxX),Math.floor(this.minY),Math.floor(this.maxY));},union:function(_80){return new yfiles.client.tiles.GraphBounds(Math.min(this.minX,_80.minX),Math.max(this.maxX,_80.maxX),Math.min(this.minY,_80.minY),Math.max(this.maxY,_80.maxY));},intersect:function(_81){return new yfiles.client.tiles.GraphBounds(Math.max(this.minX,_81.minX),Math.min(this.maxX,_81.maxX),Math.max(this.minY,_81.minY),Math.min(this.maxY,_81.maxY));},shift:function(_82,_83){return new yfiles.client.tiles.GraphBounds(this.minX+_82,this.maxX+_82,this.minY+_83,this.maxY+_83);}});}if(!dojo._hasResource["yfiles.client.tiles.HitTest"]){dojo._hasResource["yfiles.client.tiles.HitTest"]=true;dojo.provide("yfiles.client.tiles.HitTest");dojo.declare("yfiles.client.tiles.HitTest",null,{_edgeTestSensitivity:5,_nodeEvents:false,_edgeEvents:false,_nodeLabelEvents:false,_edgeLabelEvents:false,_paperEvents:false,_baseURL:".",_path:null,_worldBounds:null,_nodes:null,_nodeLabels:null,_edges:null,_edgeLabels:null,_NODE_EVENTS:1,_EDGE_EVENTS:2,_NODE_LABEL_EVENTS:4,_EDGE_LABEL_EVENTS:8,_PAPER_EVENTS:16,_eventMask:0,constructor:function(_84,_85,_86,_87,_88,_89,_8a,_8b){this._baseURL=_84;this._path=_85;this._worldBounds=_86;this.setEventTypes(_87,_88,_89,_8a,_8b);},setEventTypes:function(_8c,_8d,_8e,_8f,_90){this._createMaps();this._nodeEvents=_8c;this._edgeEvents=_8d;this._nodeLabelEvents=_8e;this._edgeLabelEvents=_8f;this._paperEvents=_90;if(this._nodeEvents){this._eventMask|=this._NODE_EVENTS;}if(this._edgeEvents){this._eventMask|=this._EDGE_EVENTS;}if(this._nodeLabelEvents){this._eventMask|=this._NODE_LABEL_EVENTS;}if(this._edgeLabelEvents){this._eventMask|=this._EDGE_LABEL_EVENTS;}this._getElementBounds();},setGraphParameters:function(_91,_92,_93){if(_91){this._baseURL=_91;}if(_92){this._path=_92;}if(_93){this._worldBounds=_93;}if(_91||_92||_93){this._removeGraph();this._getElementBounds();}},setEdgeTestSensitivity:function(_94){this._edgeTestSensitivity=_94;},getEmptyHitInfo:function(_95,_96){return {hit:false,x:_95,y:_96,nodes:[],edges:[],nodeLabels:[],edgeLabels:[]};},getHitInfo:function(_97,_98,_99){var res=this.getEmptyHitInfo(_97,_98);var hit=false;if(this._edgeLabelEvents){hit=this._rectangleHitTest(this._edgeLabels,_97,_98,_99,res.edgeLabels);}if(hit){res.firstHit=res.edgeLabels[0];res.hit=true;}if(res.hit&&_99){return res;}if(this._edgeEvents){hit=this._polyLineHitTest(this._edges,_97,_98,_99,res.edges);res.hit=res.hit||hit;}if(hit&&!res.firstHit){res.firstHit=res.edges[0];}if(res.hit&&_99){return res;}if(this._nodeLabelEvents){hit=this._rectangleHitTest(this._nodeLabels,_97,_98,_99,res.nodeLabels);res.hit=res.hit||hit;}if(hit&&!res.firstHit){res.firstHit=res.nodeLabels[0];}if(res.hit&&_99){return res;}if(this._nodeEvents){hit=this._rectangleHitTest(this._nodes,_97,_98,_99,res.nodes);res.hit=res.hit||hit;}if(hit&&!res.firstHit){res.firstHit=res.nodes[0];}if(res.hit&&_99){return res;}if(this._paperEvents){res.hit=true;}return res;},getOverlaps:function(x1,y1,x2,y2){var res=this.getEmptyHitInfo(x1,y1);if(this._nodeLabelEvents){this._rectangleOverlapTest(this._nodeLabels,x1,y1,x2,y2,res.nodeLabels);}if(this._nodeEvents){this._rectangleOverlapTest(this._nodes,x1,y1,x2,y2,res.nodes);}if(this._edgeLabelEvents){this._rectangleOverlapTest(this._edgeLabels,x1,y1,x2,y2,res.edgeLabels);}if(this._edgeEvents){this._polyLineOverlapTest(this._edges,x1,y1,x2,y2,res.edges);}return res;},getBoundsForId:function(id){var _a2=this._byId(id);if(_a2){if(_a2.t!="e"){return yfiles.client.tiles.HitTest._getRectBounds(_a2);}else{return yfiles.client.tiles.HitTest._getEdgeBounds(_a2);}}else{return null;}},getControlPoints:function(_a3){var _a4=this._byId(_a3);if(_a4&&_a4.t=="e"){return _a4.p;}else{return null;}},getLabelInfo:function(_a5){var _a6=this._byId(_a5);if(!_a6){return null;}var idx=_a5.lastIndexOf("-");if(idx){var _a8=_a5.substring(2,idx);var _a9=_a5.substring(0,1)+_a8;return {mainElementId:_a9,labelIndex:_a6.p};}else{return null;}},refresh:function(){this.clear();this._getElementBounds();},clear:function(){this._nodes.clear();this._nodeLabels.clear();this._edges.clear();this._edgeLabels.clear();},isActive:function(){return this._eventMask!=0;},onNewData:function(){},_createMaps:function(){this._nodes=new dojox.collections.Dictionary();this._nodeLabels=new dojox.collections.Dictionary();this._edges=new dojox.collections.Dictionary();this._edgeLabels=new dojox.collections.Dictionary();},_getElementBounds:function(_aa){var bb=_aa?_aa:this._worldBounds;if(!bb||!this._path||this._path==""){return;}var _ac=this;dojo.xhrPost({url:this._baseURL+"/getElementBounds?path="+this._path+"&x="+bb.minX+"&y="+bb.minY+"&width="+bb.width()+"&height="+bb.height()+"&types="+this._eventMask,load:function(_ad,_ae){setTimeout(dojo.hitch(_ac,_ac._createGraph,_ad,true),0);},handleAs:"json-comment-filtered"});},_getCategory:function(_af){switch(_af.t){case "n":return this._nodes;case "nl":return this._nodeLabels;case "e":return this._edges;case "el":return this._edgeLabels;}return null;},_removeGraph:function(){this._nodes.clear();this._nodeLabels.clear();this._edges.clear();this._edgeLabels.clear();},_byId:function(id,_b1){if(_b1){return _b1.item(id);}var _b2=null;var _b3=[this._nodes,this._edges,this._nodeLabels,this._edgeLabels];for(var i=0;i<_b3.length;i++){_b1=_b3[i];_b2=_b1.item(id);if(_b2){return _b2;}}return null;},_removeItem:function(_b5,_b6){if(!_b6){_b6=this._getCategory(_b5);}_b6.remove(_b5.i);},_createGraph:function(_b7,_b8){var _b9=_b7.length;for(var i=0;i<_b9;i++){var _bb=_b7[i];setTimeout(dojo.hitch(this,this._createElement,_bb,_b8,i==_b9-1),0);}},_createElement:function(_bc,_bd,_be){var id=_bc.i;var _c0=this._getCategory(_bc);var _c1=this._byId(id,_c0);if(_bd&&_c1){this._removeItem(_c1,_c0);}if(_bd||!_c1){_c0.add(id,_bc);}if(_be){this.onNewData();}},_rectangleHitTest:function(_c2,_c3,_c4,_c5,_c6){var hit=false;var _c8=_c2.getIterator();var _c9=_c8.get();while(_c9){var _ca=_c9.value;if(_ca.x<=_c3&&_ca.x+_ca.w>=_c3&&_ca.y<=_c4&&_ca.y+_ca.h>=_c4){_c6.push(_ca);if(_c5){return true;}else{hit=true;}}_c9=_c8.get();}return hit;},_rectangleOverlapTest:function(_cb,x1,y1,x2,y2,_d0){var _d1=_cb.getIterator();var _d2=_d1.get();while(_d2){var _d3=_d2.value;if(this._rectangleIntersection(x1,y1,x2,y2,_d3.x,_d3.y,_d3.x+_d3.w,_d3.y+_d3.h)){_d0.push(_d3);}_d2=_d1.get();}},_rectangleIntersection:function(ax1,ay1,ax2,ay2,bx1,by1,bx2,by2){return (Math.max(ax1,bx1)<=Math.min(ax2,bx2)&&Math.max(ay1,by1)<=Math.min(ay2,by2));},_lineSegmentIntersection:function(ax1,ay1,ax2,ay2,bx1,by1,bx2,by2){var a1=ay2-ay1;var b1=ax1-ax2;var c1=a1*ax1+b1*ay1;var a2=by2-by1;var b2=bx1-bx2;var c2=a2*bx1+b2*by1;var det=a1*b2-a2*b1;if(Math.abs(det)<=1e-7){return false;}else{var x=(b2*c1-b1*c2)/det;var y=(a1*c2-a2*c1)/det;return (Math.min(ax1,ax2)<=x&&x<=Math.max(ax1,ax2)&&Math.min(ay1,ay2)<=y&&y<=Math.max(ay1,ay2)&&Math.min(bx1,bx2)<=x&&x<=Math.max(bx1,bx2)&&Math.min(by1,by2)<=y&&y<=Math.max(by1,by2));}},_polyLineHitTest:function(_ed,_ee,_ef,_f0,_f1){var eps=this._edgeTestSensitivity;var hit=false;var _f4=_ed.getIterator();var _f5=_f4.get();while(_f5){var _f6=_f5.value;if(this._polyLineContains(_f6.p,_ee,_ef,eps)){_f1.push(_f6);if(_f0){return true;}else{hit=true;}}_f5=_f4.get();}return hit;},_polyLineOverlapTest:function(_f7,x1,y1,x2,y2,_fc){var _fd=_f7.getIterator();var _fe=_fd.get();while(_fe){var _ff=_fe.value;if(this._controlPointsIn(_ff.p,x1,y1,x2,y2)||this._intersects(_ff.p,x1,y1,x2,y2)){_fc.push(_ff);}_fe=_fd.get();}},_polyLineContains:function(_100,_101,_102,_103){var x1=_100[0].x;var y1=_100[0].y;var x2,y2;for(var i=1;i<_100.length;i++){x2=_100[i].x;y2=_100[i].y;if(this._lineContains(x1,y1,x2,y2,_101,_102,_103)){return true;}x1=x2;y1=y2;}return false;},_controlPointsIn:function(pts,x1,y1,x2,y2){for(var i=0;i<pts.length;i++){if(x1<=pts[i].x&&x2>=pts[i].x&&y1<=pts[i].y&&y2>=pts[i].y){return true;}}return false;},_intersects:function(pts,x1,y1,x2,y2){for(var i=1;i<pts.length;i++){var p0=pts[i-1];var p1=pts[i];if(this._lineSegmentIntersection(p0.x,p0.y,p1.x,p1.y,x1,y1,x2,y1)||this._lineSegmentIntersection(p0.x,p0.y,p1.x,p1.y,x2,y1,x2,y2)||this._lineSegmentIntersection(p0.x,p0.y,p1.x,p1.y,x1,y2,x2,y2)||this._lineSegmentIntersection(p0.x,p0.y,p1.x,p1.y,x1,y1,x1,y2)){return true;}}return false;},_lineContains:function(x1,y1,x2,y2,_11b,_11c,_11d){if(_11b+_11d<Math.min(x1,x2)||_11c+_11d<Math.min(y1,y2)||_11b-_11d>Math.max(x1,x2)||_11c-_11d>Math.max(y1,y2)){return false;}var tdx=_11b-x1;var tdy=_11c-y1;var _120=_11d*_11d;var tl12=tdx*tdx+tdy*tdy;if(tl12<_120){return true;}var tdx2=_11b-x2;var tdy2=_11c-y2;var tl22=tdx2*tdx2+tdy2*tdy2;if(tl22<_120){return true;}var dx=x2-x1;var dy=y2-y1;var l=Math.sqrt(dx*dx+dy*dy);if(l==0){return false;}var s=(dx*tdx+dy*tdy)/l;if(s<-_11d||s>l+_11d){return false;}var d2=tl12-s*s;return d2<_120;}});yfiles.client.tiles.HitTest.getElementType=function(_12a){if(!_12a){return null;}var _12b="";if(dojo.isString(_12a)){var idx=_12a.indexOf("-");if(idx>0){_12b=_12a.substring(0,idx);}}else{if(_12a.firstHit){_12b=_12a.firstHit.t;}}switch(_12b){case "n":return "Node";case "nl":return "NodeLabel";case "e":return "Edge";case "el":return "EdgeLabel";}return "Paper";};yfiles.client.tiles.HitTest.getHitId=function(_12d){if(_12d&&_12d.firstHit){return _12d.firstHit.i;}else{return null;}};yfiles.client.tiles.HitTest.getHitIds=function(_12e){var res=[];if(_12e){var _130=["nodes","edges","nodeLabels","edgeLabels"];for(var i=0;i<_130.length;i++){var _132=_12e[_130[i]];for(var j=0;j<_132.length;j++){res.push(_132[j].i);}}}return res;};yfiles.client.tiles.HitTest.getBounds=function(_134){if(!_134||!_134.firstHit){return null;}if(_134.t!="e"){return this._getRectBounds(_134.firstHit);}else{return this._getEdgeBounds(_134.firstHit);}};yfiles.client.tiles.HitTest.getHitCount=function(_135){if(!_135){return 0;}var _136=0;var _137=[_135.nodes,_135.edges,_135.nodeLabels,_135.edgeLabels];for(var i=0;i<_137.length;i++){var _139=_137[i];_136+=_139.length;}return _136;};yfiles.client.tiles.HitTest.getUrl=function(_13a){if(_13a&&_13a.firstHit&&_13a.firstHit.u){return _13a.firstHit.u;}else{return null;}};yfiles.client.tiles.HitTest.getDescription=function(_13b){if(_13b&&_13b.firstHit&&_13b.firstHit.d){return _13b.firstHit.d;}else{return null;}};yfiles.client.tiles.HitTest.setCoords=function(info,x,y){info.x=x;info.y=y;};yfiles.client.tiles.HitTest._getRectBounds=function(_13f){return new yfiles.client.tiles.GraphBounds(_13f.x,_13f.x+_13f.w,_13f.y,_13f.y+_13f.h);};yfiles.client.tiles.HitTest._getEdgeBounds=function(edge){var pts=edge.p;var p0=pts[0];var res=new yfiles.client.tiles.GraphBounds(p0.x,p0.x,p0.y,p0.y);for(var i=1;i<pts.length;i++){res=res.union(new yfiles.client.tiles.GraphBounds(pts[i].x,pts[i].x,pts[i].y,pts[i].y));}return res;};}if(!dojo._hasResource["yfiles.client.tiles.widget.GraphCanvas"]){dojo._hasResource["yfiles.client.tiles.widget.GraphCanvas"]=true;dojo.provide("yfiles.client.tiles.widget.GraphCanvas");dojo.declare("yfiles.client.tiles.widget.GraphCanvas",[dijit._Widget,dijit._Templated],{width:512,height:512,x:0,y:0,tileSize:512,zoom:1,nodeEvents:false,edgeEvents:false,nodeLabelEvents:false,edgeLabelEvents:false,paperEvents:false,baseURL:".",path:"",highlightNodeSurroundPixels:10,mouseWheelScrollFactor:1.2,tilesFrame:null,movables:null,tiles:null,oldTiles:null,overlays:null,_graph:null,_hitTest:null,_lastHit:null,_mover:null,_dragging:false,_moverConnectHandle:null,_mouseOver:false,_fixed:false,_worldBounds:null,_inputMode:"pan",_sequenceId:0,_mouse:null,_mouseDownPos:null,_worldCoords:null,_zoomDigits:4,_highlightMap:null,_requestedTiles:null,_recalculateTriggered:false,_updateViepointTriggered:false,templateString:"<div class=\"yFilesGraphCanvas\" dojoAttachPoint=\"tilesFrame\" style=\"overflow:hidden;position:relative;width:100%;height:100%;bottom:auto;right:auto;\"\n     dojoAttachEvent=\"onmousedown:_onMouseDown,onmousemove:_onMouseMove,onmouseout:onMouseOut,onmouseover:onMouseOver,onmouseup:onMouseUp,onclick:onClick,ondblclick:onDblClick\">\n  <div class=\"movables\" dojoAttachPoint=\"movables\" style=\"border-width:0;padding:0;margin:0;position:absolute;\">\n    <div class=\"oldTiles\" dojoAttachPoint=\"oldTiles\" style=\"position:absolute;z-index:0;\"></div>\n    <div class=\"tiles\" dojoAttachPoint=\"tiles\" style=\"position:absolute;z-index:1;\"></div>\n    <div class=\"overlays\" dojoAttachPoint=\"overlays\" style=\"position:absolute;z-index:2;\"></div>\n  </div>\n  <div class=\"contents\" dojoAttachPoint=\"containerNode\" style=\"position:absolute;z-index:3;\"></div>\n</div>\n",postCreate:function(){dojo.connect(this.movables,"ondragstart",dojo,"stopEvent");dojo.connect(this.movables,"onselectstart",dojo,"stopEvent");this._highlightMap=new dojox.collections.Dictionary();this._mouse={x:0,y:0};this._mouseDownPos={x:-100,y:-100};this._sequenceId=this._newSequenceId();try{this.tileSize=parseInt(this.tileSize);}catch(e){this.tileSize=512;}this._graph=new yfiles.client.tiles.Graph(this.baseURL);this._initializeGraphListeners();this._checkSize();this._requestedTiles={};this._hitTest=new yfiles.client.tiles.HitTest(this.baseURL,this.path,this._worldBounds,this.nodeEvents,this.edgeEvents,this.nodeLabelEvents,this.edgeLabelEvents,this.paperEvents);this._lastHit=this._hitTest.getEmptyHitInfo(0,0);this.connect(this._hitTest,"onNewData","_newHitTestData");if(this.tilesFrame.addEventListener){this.tilesFrame.addEventListener("DOMMouseScroll",dojo.hitch(this,"_mouseWheeled"),false);}else{this.connect(this.tilesFrame,"onmousewheel","_mouseWheeled");}this.connect(window,"onresized","_onResized");this.setPath(this.path);},_removeMover:function(){this.disconnect(this._moverConnectHandle);this._moverConnectHandle=null;if(this._mover){this._mover.destroy();this._mover=null;}},setBaseURL:function(_145){this.baseURL=_145;this._graph._baseURL=_145;},setPath:function(_146,_147){if(!_146||_146==""){return;}this.clear();this.path=_146;this.beforeRequest();this._graph.load(_146,_147);},getGraph:function(){return this._graph;},fitContent:function(){this._removeTiles();this._fitContent(false);},_fitContent:function(_148){this.beforeRequest();var self=this;dojo.xhrGet({url:this.baseURL+"/getWorldBounds?path="+this.path+"&seq="+this._sequenceId,load:function(_14a,_14b){self.requestDone(true);self._removeDOMChildren(self.oldTiles);self._initializeWorldBounds(_14a,_148,true);self._refreshOverlays();self.viewPortChanged(self.x,self.y,self.width,self.height,self.zoom);if(_148){self.unhighlightAll();}self.recalculateTiles(true);if(_148){self._hitTest.setGraphParameters(self.baseURL,self.path,self._worldBounds);}},error:function(_14c,_14d){self.requestDone(false);},handleAs:"json-comment-filtered"});},clear:function(){this._removeTiles();if(this._hitTest){this._hitTest.clear();}this._highlightMap.clear();this._sequenceId=this._newSequenceId();},refresh:function(_14e,_14f,_150){if(!_150){this.pushTiles();}this._sequenceId=this._newSequenceId();if(_14e){this.updateWorldBounds(_14e);}else{this.beforeRequest();var self=this;dojo.xhrGet({url:this.baseURL+"/getWorldBounds?path="+this.path+"&seq="+this._sequenceId,load:function(_152,_153){self.requestDone(true);var bb={minX:_152.x,minY:_152.y,maxX:_152.x+_152.width,maxY:_152.y+_152.height};self.updateWorldBounds(bb);},error:function(_155,_156){self.requestDone(false);},handleAs:"json-comment-filtered"});}if(_14f){this.shift(this.zoom*_14f.x,this.zoom*_14f.y,true);}this.recalculateTiles(true);},_initializeWorldBounds:function(_157,_158,_159){if(this.height==0){this.height=this.tileSize;}if(this.width==0){this.width=this.tileSize;}if(_159){var _15a=this.width/_157.width;var _15b=this.height/_157.height;this.zoom=this._round(Math.min(_15a,_15b)*0.95);}this._worldBounds=new yfiles.client.tiles.GraphBounds(_157.x,_157.x+_157.width,_157.y,_157.y+_157.height);if(_159){this.center(this.zoom*(_157.width/2+_157.x),this.zoom*(_157.height/2+_157.y));}},_round:function(x){var _15d=Math.pow(10,this._zoomDigits);var aux=Math.floor(_15d*x);return aux/_15d;},setZoom:function(zoom){var _160=this._round(zoom);if(_160>0){this._zoomChanged(_160);}},setPanMode:function(_161){this._inputMode="pan";if(this._fixed){this._fixed=false;this.recalculateTiles(_161);}else{if(_161){this.recalculateTiles(_161);}}},setViewPoint:function(newX,newY,_164){this.x=Math.round(newX);this.y=Math.round(newY);if(!this._dragging){if(_164){var oldX=parseInt(this.movables.style.left);var oldY=parseInt(this.movables.style.top);this.oldTiles.style.left=(oldX-newX)+"px";this.oldTiles.style.top=(oldY-newY)+"px";}this.movables.style.left=this.x+"px";this.movables.style.top=this.y+"px";}if(this._mouseOver&&!this._dragging&&this._inputMode=="pan"&&this._hitTest){this._mouseOverOutTest();}this._refreshOverlays();this.viewPortChanged(this.x,this.y,this.width,this.height,this.zoom);},center:function(cX,cY){this.setViewPoint(-cX+this.width/2,-cY+this.height/2);},shift:function(dx,dy,_16b){this.setViewPoint(this.x+dx,this.y+dy,_16b);},setNoInteractionMode:function(){this._inputMode="none";if(!this._fixed){this._fixed=true;this._removeMover();this._removeTiles();this.recalculateTiles();}},fix:function(){if(this._inputMode=="pan"){this._fixed=true;this._removeMover();}},release:function(){if(this._inputMode=="pan"){this._fixed=false;}},_zoomChanged:function(zoom){if(this.path==""){return;}var _16d=this.zoom;this.zoom=zoom;var _16e={"x":Math.floor(this.width/2),"y":Math.floor(this.height/2)};var _16f={"x":_16e.x-this.x,"y":_16e.y-this.y};var _170=this.zoom/_16d;var _171={"x":Math.floor(_16f.x*_170),"y":Math.floor(_16f.y*_170)};dojo.forEach(this.tiles.childNodes,function(t){dojo.style(t,"display","none");});this.setViewPoint(_16e.x-_171.x,_16e.y-_171.y);if(!this._recalculateTriggered){var old=[];dojo.forEach(this.oldTiles.childNodes,function(t){old.push(t);});this._shiftOldTiles();this._scaleTiles(this.oldTiles,_170);while(this.tiles.hasChildNodes()){var tile=this.tiles.firstChild;var img=tile.firstChild;if(img){this._scaleTile(tile,img,_170);this.tiles.removeChild(tile);tile.removeAttribute("id");this.oldTiles.appendChild(tile);dojo.style(tile,"display","block");}else{dojo._destroyElement(tile);}}setTimeout(dojo.hitch(this,this._removeDOMNodes,old),3000);}else{this._scaleTiles(this.oldTiles,_170);}this._resetRequestedTile();this.recalculateTiles();},_shiftOldTiles:function(){var _177=parseInt(this.oldTiles.style.left);var _178=parseInt(this.oldTiles.style.top);if(_177!=0||_178!=0){dojo.style(this.oldTiles,"left","0px");dojo.style(this.oldTiles,"top","0px");dojo.forEach(this.oldTiles.childNodes,function(t){this._shiftTile(t,_177,_178);},this);}},_shiftTile:function(tile,dx,dy){var _17d=parseInt(tile.style.left);var _17e=parseInt(tile.style.top);dojo.style(tile,"left",(_17d+dx)+"px");dojo.style(tile,"top",(_17e+dy)+"px");},_scaleTiles:function(_17f,_180){dojo.forEach(_17f.childNodes,function(tile){dojo.style(tile,"display","none");});dojo.forEach(_17f.childNodes,function(tile){var img=tile.firstChild;if(img){this._scaleTile(tile,img,_180);dojo.style(tile,"display","block");}else{dojo._destroyElement(tile);}},this);},_scaleTile:function(tile,img,_186){dojo.style(tile,"left",(parseInt(tile.style.left)*_186)+"px");dojo.style(tile,"top",(parseInt(tile.style.top)*_186)+"px");dojo.style(tile,"width",(parseInt(tile.style.width)*_186)+"px");dojo.style(tile,"height",(parseInt(tile.style.height)*_186)+"px");img.width=img.width*_186;img.height=img.height*_186;},_refreshOverlays:function(){var _187=this._highlightMap.getIterator();for(var _188=_187.get();_188;_188=_187.get()){this._refreshHighlight(_188.key);}},_dragMoved:function(_189,_18a){if(!this._dragging){this.tilesFrame.style.cursor="move";}this._dragging=true;if(!this._updateViepointTriggered){this._updateViepointTriggered=true;setTimeout(dojo.hitch(this,this._updateViewPoint,false),100);}this.recalculateTiles();},_updateViewPoint:function(){var x=parseInt(this.movables.style.left);var y=parseInt(this.movables.style.top);this.setViewPoint(x,y);this._updateViepointTriggered=false;},_mouseWheeled:function(evt){dojo.stopEvent(evt);if(this._inputMode=="none"){return;}var _18e=0;if(typeof evt.wheelDelta=="number"){_18e=evt.wheelDelta;}else{if(typeof evt.detail=="number"){_18e=-evt.detail;}}if(_18e>0){this.setZoom(this.zoom*this.mouseWheelScrollFactor);}else{if(_18e<0){this.setZoom(this.zoom/this.mouseWheelScrollFactor);}}},resize:function(_18f){dojo.marginBox(this.domNode,_18f);this._onResized();},_checkSize:function(){var cb=dojo.contentBox(this.domNode);this.width=cb.w;this.height=cb.h;},_onResized:function(e){this._checkSize();if(this._inputMode=="none"){this.setPath(this.path);}else{this.recalculateTiles();this._refreshOverlays();this.viewPortChanged(this.x,this.y,this.width,this.height,this.zoom);}},onMouseOver:function(evt){this._mouseOver=true;},onMouseOut:function(evt){this._mouseOver=false;},isMouseOver:function(){return this._mouseOver;},_onMouseDown:function(evt){this._mouseDownPos={x:this._mouse.x,y:this._mouse.y};this._mouseOver=true;if(this._inputMode!="none"){this._dragging=false;}if(!this._fixed){this._mover=new dojo.dnd.Mover(this.movables,evt,this);this._moverConnectHandle=this.connect(this._mover,"onMouseMove","_onMouseMove");}evt.preventDefault();this.onMouseDown(evt);},onMove:function(_195,_196){dojo.marginBox(_195.node,_196);this._dragMoved(_195,_196);},onFirstMove:function(){},onMouseDown:function(evt){},onClick:function(evt){if(this._inputMode!="none"&&this._hitTest&&this._hitTest.isActive()&&this._mouse.x==this._mouseDownPos.x&&this._mouse.y==this._mouseDownPos.y){this._fireGraphEvent(evt,"onClick",false);}},_getGraphEvent:function(_199){return this._hitTest.getHitInfo(this._worldCoords.x,this._worldCoords.y,_199);},_fireGraphEvent:function(evt,type,_19c){var info=this._getGraphEvent(_19c);this._fireEvent(info,type,evt);},_fireEvent:function(info,type,evt){var _1a1=yfiles.client.tiles.HitTest.getElementType(info);var _1a2=type+_1a1;var func=this[_1a2];if(func){if(_1a1!="Paper"){var id=yfiles.client.tiles.HitTest.getHitId(info);func.call(this,id,info,evt);}else{func.call(this,info,evt);}}},onDblClick:function(evt){if(this._inputMode!="none"&&this._hitTest&&this._hitTest.isActive()){this._fireGraphEvent(evt,"onDblClick",false);}},_fixLayerCoords:function(evt){var _1a7=dojo.mixin({},evt);var _1a8=dojo.coords(this.domNode,false);_1a7.layerX=evt.pageX-_1a8.x;_1a7.layerY=evt.pageY-_1a8.y;return _1a7;},_onMouseMove:function(evt){var _1aa=this._fixLayerCoords(evt);this._mouseOver=true;if(this._inputMode!="none"){this._mouse={x:_1aa.layerX,y:_1aa.layerY};if(!this._dragging&&this._hitTest&&this._hitTest.isActive()){this._mouseOverOutTest(_1aa);}}evt.preventDefault();this.onMouseMove(_1aa);},onMouseMove:function(evt){},_mouseOverOutTest:function(evt){this._setWorldCoords();var info=this._getGraphEvent(true);var _1ae=yfiles.client.tiles.HitTest.getHitId(info);var _1af=yfiles.client.tiles.HitTest.getHitId(this._lastHit);var _1b0=yfiles.client.tiles.HitTest.getElementType(info);if(_1ae!=_1af){if(_1af!=null){yfiles.client.tiles.HitTest.setCoords(this._lastHit,this._worldCoords.x,this._worldCoords.y);this._fireEvent(this._lastHit,"onMouseOut",evt);}if(_1ae!=null){this._fireEvent(info,"onMouseOver",evt);}}this._lastHit=info;},_setWorldCoords:function(){this._worldCoords={x:(this._mouse.x-this.x)/this.zoom,y:(this._mouse.y-this.y)/this.zoom};},onMouseUp:function(evt){if(this._inputMode!="none"){this._dragging=false;this.tilesFrame.style.cursor="default";this._removeMover();}},onClickNode:function(_1b2,info,evt){},onDblClickNode:function(_1b5,info,evt){},onMouseOverNode:function(_1b8,info,evt){},onMouseOutNode:function(_1bb,info,evt){},onClickNodeLabel:function(_1be,info,evt){},onDblClickNodeLabel:function(_1c1,info,evt){},onMouseOverNodeLabel:function(_1c4,info,evt){},onMouseOutNodeLabel:function(_1c7,info,evt){},onClickEdge:function(_1ca,info,evt){},onDblClickEdge:function(_1cd,info,evt){},onMouseOverEdge:function(_1d0,info,evt){},onMouseOutEdge:function(_1d3,info,evt){},onClickEdgeLabel:function(_1d6,info,evt){},onDblClickEdgeLabel:function(_1d9,info,evt){},onMouseOverEdgeLabel:function(_1dc,info,evt){},onMouseOutEdgeLabel:function(_1df,info,evt){},onClickPaper:function(info,evt){},_assembleTileRequestString:function(_1e4){var req=this.baseURL+"/"+_1e4.request+"?zoom="+_1e4.zoom+"&col="+_1e4.col+"&row="+_1e4.row;if(_1e4.size){req+="&size="+_1e4.size;}else{req+="&size="+this.tileSize;}if(_1e4.path){req+="&path="+_1e4.path;}else{if(this.path){req+="&path="+this.path;}}req+="&seq="+this._sequenceId;return req;},_getTileId:function(zoom,col,row){return "div_"+this.id+"_"+zoom+"_"+col+"_"+row;},pushTiles:function(){this._removeDOMChildren(this.oldTiles);this.oldTiles.style.left="0px";this.oldTiles.style.top="0px";while(this.tiles.hasChildNodes()){var tile=this.tiles.firstChild;this.tiles.removeChild(tile);tile.removeAttribute("id");this.oldTiles.appendChild(tile);}this._resetRequestedTile();},recalculateTiles:function(_1ea){if(this.path==""){return;}if(_1ea){this._sequenceId=this._newSequenceId();this._resetRequestedTile();this._recalculateTriggered=true;this._recalculateTiles(true);}else{if(!this._recalculateTriggered){this._recalculateTriggered=true;setTimeout(dojo.hitch(this,this._recalculateTiles,false),100);}}},_recalculateTiles:function(_1eb){var _1ec=new yfiles.client.tiles.GraphBounds(-this.x,this.width-this.x,-this.y,this.height-this.y);var _1ed=this._columnsAndRowsForArea(_1ec);this._loadTiles(_1ed,_1eb);},_tileWasRequested:function(col,row){return (this._requestedTiles[col]&&this._requestedTiles[col][row]);},_registerTileRequest:function(col,row){if(!this._requestedTiles[col]){this._requestedTiles[col]={};}this._requestedTiles[col][row]=true;},_resetRequestedTile:function(col,row){if(col&&row){if(!this._requestedTiles[col]){this._requestedTiles[col]={};}this._requestedTiles[col][row]=false;}else{this._requestedTiles={};}},_loadTiles:function(_1f4,_1f5){for(var col=_1f4.minX;col<=_1f4.maxX;col++){for(var row=_1f4.minY-1;row<=_1f4.maxY+1;row++){var _1f8=this._getTileId(this.zoom,col,row);if(_1f5||!this._tileWasRequested(col,row)){this._registerTileRequest(col,row);this._loadTile(_1f5,_1f8,col,row);}}}this._recalculateTriggered=false;},_loadTile:function(_1f9,_1fa,col,row){if(!this._tileWasRequested(col,row)){console.debug("  not requested "+col+" "+row);return;}if(_1f9){var _1fd=dojo.byId(_1fa);if(_1fd){this._removeDOMChildren(_1fd);dojo._destroyElement(_1fd);}}var _1fe={request:"getImage",zoom:this.zoom,col:col,row:row};var _1ff=this._assembleTileRequestString(_1fe);var div=dojo.doc.createElement("div");div.setAttribute("id",_1fa);this.tiles.appendChild(div);dojo.style(div,"display","block");dojo.style(div,"position","absolute");dojo.style(div,"left",(col*this.tileSize)+"px");dojo.style(div,"top",(row*this.tileSize)+"px");dojo.style(div,"width",this.tileSize+"px");dojo.style(div,"height",this.tileSize+"px");setTimeout(dojo.hitch(this,this._loadImage,_1ff,div,_1fa),0);},_loadImage:function(_201,div,_203){var img=new Image(this.tileSize,this.tileSize);dojo.style(img,"display","block");var self=this;img.onload=function(){img.onload=null;if(div&&div.parentNode){div.appendChild(img);self.tileLoaded(self.path,_203);}};img.src=_201;},_removeTiles:function(){if(!this.tiles){return;}this._removeDOMChildren(this.tiles);this._resetRequestedTile();},_columnsAndRowsForArea:function(area){return area.scale(1/this.tileSize).round();},tileLoaded:function(_207){},pathSet:function(path){},viewPortChanged:function(x,y,_20b,_20c,zoom){},beforeRequest:function(){},requestDone:function(_20e){},getMousePosition:function(){return {x:this._mouse.x,y:this._mouse.y};},getViewCoordinates:function(rawX,rawY){rawX=rawX?rawX:this._mouse.x;rawY=rawY?rawY:this._mouse.y;var x=(rawX-this.x);var y=(rawY-this.y);return {x:x,y:y};},getWorldCoordinates:function(x,y){var _215=this.getViewCoordinates(x,y);return {x:_215.x/this.zoom,y:_215.y/this.zoom};},getHitTest:function(){return this._hitTest;},getLastHitInfo:function(){return this._lastHit;},_newSequenceId:function(){return new dojox.uuid.Uuid(dojox.uuid.generateTimeBasedUuid());},_removeDOMChildren:function(_216){while(_216.hasChildNodes()){this._removeDOMChildren(_216.firstChild);dojo._destroyElement(_216.firstChild);}},_removeDOMNodes:function(_217){dojo.forEach(_217,function(_218){this._removeDOMChildren(_218);var _219=_218.parentNode;if(_219){_219.removeChild(_218);}dojo._destroyElement(_218);},this);},updateWorldBounds:function(_21a){if(this._worldBounds==null){this._initializeWorldBounds(_21a);}else{this._worldBounds=new yfiles.client.tiles.GraphBounds(_21a.minX,_21a.maxX,_21a.minY,_21a.maxY);}if(this._hitTest){this._hitTest.setGraphParameters(this.baseURL,this.path,this._worldBounds);}},_initializeGraphListeners:function(){this.connect(this._graph,"onLoad","_onLoad");this.connect(this._graph,"onLoadFailed","_onLoadFailed");this.connect(this._graph,"onNodeCreated","_onBoundsChange");this.connect(this._graph,"onEdgeCreated","_onBoundsChange");this.connect(this._graph,"onNodesMoved","_onBoundsChange");this.connect(this._graph,"onLabelSet","_onBoundsChange");this.connect(this._graph,"onRemove","_onBoundsChange");},_onLoad:function(name){this.requestDone(true);this._fitContent(true);this.pathSet(name);},_onLoadFailed:function(name){this.requestDone(false);},_onBoundsChange:function(){this.refresh();},_newHitTestData:function(){this._refreshOverlays();if(!this._dragging&&this._inputMode=="pan"&&this._hitTest&&this._hitTest.isActive()){this._mouseOverOutTest();}},highlight:function(id){if(!this._highlightMap.item(id)){var div=this._createHighlightDiv(id);if(div){this.overlays.appendChild(div);this._highlightMap.add(id,div);}}},unhighlight:function(id){var div=this._highlightMap.item(id);if(div){this._removeDOMChildren(div);dojo._destroyElement(div);}this._highlightMap.remove(id);},unhighlightAll:function(){this._highlightMap.clear();this._removeDOMChildren(this.overlays);},_createHighlightDiv:function(id){var type=yfiles.client.tiles.HitTest.getElementType(id);if(type!="Edge"){return this._highlightRect(id);}else{return this._highlightEdge(id);}},_refreshHighlight:function(id){var div=this._highlightMap.item(id);if(div){this._removeDOMChildren(div);dojo._destroyElement(div);}div=this._createHighlightDiv(id);if(div){this.overlays.appendChild(div);}this._highlightMap.add(id,div);},_highlightRect:function(id){var _226=this._hitTest.getBoundsForId(id);if(_226){var div=dojo.doc.createElement("div");var sur=this.highlightNodeSurroundPixels;dojo.style(div,"left",(_226.minX*this.zoom-sur)+"px");dojo.style(div,"top",(_226.minY*this.zoom-sur)+"px");dojo.style(div,"width",(_226.width()*this.zoom+2*sur)+"px");dojo.style(div,"height",(_226.height()*this.zoom+2*sur)+"px");dojo.style(div,"opacity",0.3);dojo.style(div,"display","block");dojo.style(div,"position","absolute");dojo.addClass(div,"yFilesGraphCanvasOverlay");return div;}else{return null;}},_highlightEdge:function(id){var pts=this._hitTest.getControlPoints(id);if(pts!=null){var div=dojo.doc.createElement("div");for(var i=0;i<pts.length;i++){var pt=pts[i];var _22e=dojo.doc.createElement("div");dojo.style(_22e,"left",(pt.x*this.zoom-5)+"px");dojo.style(_22e,"top",(pt.y*this.zoom-5)+"px");dojo.style(_22e,"width","10px");dojo.style(_22e,"height","10px");dojo.style(_22e,"opacity",0.7);dojo.style(_22e,"display","block");dojo.style(_22e,"position","absolute");dojo.addClass(_22e,"yFilesGraphCanvasOverlay");div.appendChild(_22e);if(i>0){var prev=pts[i-1];_22e=dojo.doc.createElement("div");var x=(pt.x+prev.x)/2;var y=(pt.y+prev.y)/2;dojo.style(_22e,"left",(x*this.zoom-5)+"px");dojo.style(_22e,"top",(y*this.zoom-5)+"px");dojo.style(_22e,"width","10px");dojo.style(_22e,"height","10px");dojo.style(_22e,"opacity",0.7);dojo.style(_22e,"display","block");dojo.style(_22e,"position","absolute");dojo.addClass(_22e,"yFilesGraphCanvasOverlay");div.appendChild(_22e);}}return div;}else{return null;}}});}if(!dojo._hasResource["yfiles.client.tiles.InputMode"]){dojo._hasResource["yfiles.client.tiles.InputMode"]=true;dojo.provide("yfiles.client.tiles.InputMode");dojo.declare("yfiles.client.tiles.InputMode",null,{_canvas:null,_hitTest:null,_active:false,_child:null,_oldCursor:null,_childDeactivateHandle:null,constructor:function(_232){this._active=false;this._child=null;this._canvas=_232;this._oldCursor=_232.domNode.style.cursor;this._hitTest=this._canvas.getHitTest();},isActive:function(){return this._active||(this._child&&this._child.isActive());},activate:function(){if(!this._active){if(this._child&&this._child.isActive()){this._child.deactivate();}else{this._child=null;this._active=true;this._attachEventListeners();}}},deactivate:function(){if(this._child){this._child.deactivate();}this._active=false;this._detachEventListeners();},getGraph:function(){return this._canvas.getGraph();},setCursor:function(_233,_234){if(!_234&&!this._oldCursor){this._oldCursor=this._canvas.domNode.style.cursor;}else{if(_234){this._oldCursor=_234;}}this._canvas.domNode.style.cursor=_233;},restoreCursor:function(){this._canvas.domNode.style.cursor=this._oldCursor;},setChild:function(_235){if(!this._active){return false;}this._child=_235;this._childDeactivateHandle=dojo.connect(this._child,"deactivate",this,"_reactivate");this._detachEventListeners();this._active=false;_235.activate();return true;},onReactivate:function(_236){},setEdgeTestSensitivity:function(_237){this._hitTest.setEdgeTestSensitivity(_237);},_attachEventListeners:function(){},_detachEventListeners:function(){},_reactivate:function(){dojo.disconnect(this._childDeactivateHandle);var _238=this._child;this._child=null;this._active=true;this._attachEventListeners();this.onReactivate(_238);}});}if(!dojo._hasResource["yfiles.client.tiles.widget.CanvasDragLine"]){dojo._hasResource["yfiles.client.tiles.widget.CanvasDragLine"]=true;dojo.provide("yfiles.client.tiles.widget.CanvasDragLine");dojo.declare("yfiles.client.tiles.widget.CanvasDragLine",[dijit._Widget,dijit._Templated],{templateString:"<div dojoAttachPoint=\"root\" class=\"canvasDragLineRoot\" style=\"overflow:hidden;width:100%;height:100%;\"></div>",root:null,canvas:null,_x1:0,_y1:0,_x2:0,_y2:0,_surface:null,_line:null,_mouseDownHandle:null,_dragLineHandle:null,_lineDoneHandle:null,activate:function(_239){this.canvas=_239;this._mouseDownHandle=this.connect(_239,"onMouseDown","_onMouseDown");},activateAt:function(_23a,pos){this.canvas=_23a;this._onMouseDownAt(pos);},deactivate:function(){this._hideArea();},onLineChange:function(x1,y1,x2,y2){},onLineDone:function(x1,y1,x2,y2){},onDeactivated:function(){},_onMouseDown:function(evt){var _245=this.canvas;this.disconnect(this._mouseDownHandle);var _246={x:evt.pageX,y:evt.pageY};this._onMouseDownAt(_246);},_onMouseDownAt:function(_247){var _248=this.canvas;var _249=dojo.coords(this.root.parentNode,false);this._x1=_247.x-_249.x;this._y1=_247.y-_249.y;var _24a=this.root;this._surface=dojox.gfx.createSurface(_24a,_248.width,_248.height);this._line=this._surface.createLine({x1:this._x1,y1:this._y1,x2:this._x1+1,y2:this._y1+1});this._line.setStroke({color:"blue"});this._dragLineHandle=this.connect(_248,"onMouseMove","_dragLine");this._lineDoneHandle=this.connect(_248,"onMouseUp","_dragLineDone");},_dragLine:function(evt){var _24c={x:evt.pageX,y:evt.pageY};var _24d=dojo.coords(this.root.parentNode,false);this._x2=_24c.x-_24d.x;this._y2=_24c.y-_24d.y;this._line.setShape({x1:this._x1,y1:this._y1,x2:this._x2,y2:this._y2});this.onLineChange(this._x1,this._y1,this._x2,this._y2);},_dragLineDone:function(){var _24e=this.canvas;var x1=this._x1-_24e.x;var x2=this._x2-_24e.x;var y1=this._y1-_24e.y;var y2=this._y2-_24e.y;this.onLineDone(x1,y1,x2,y2);this._hideArea();},_hideArea:function(){var _253=this.canvas;this.disconnect(this._mouseDownHandle);this.disconnect(this._dragLineHandle);this.disconnect(this._lineDoneHandle);if(this._surface){this._surface.remove(this._line,true);if(this._surface.clipNode){this.root.removeChild(this._surface.clipNode);}else{this.root.removeChild(this._surface.rawNode);}this._surface=null;}this.onDeactivated();}});}if(!dojo._hasResource["yfiles.client.tiles.CreateEdgeMode"]){dojo._hasResource["yfiles.client.tiles.CreateEdgeMode"]=true;dojo.provide("yfiles.client.tiles.CreateEdgeMode");dojo.declare("yfiles.client.tiles.CreateEdgeMode",yfiles.client.tiles.InputMode,{startNode:null,routeEdges:false,_dragLine:null,_endNode:null,constructor:function(_254,_255){if(_255){this.routeEdges=_255;}this._dragLine=new yfiles.client.tiles.widget.CanvasDragLine({canvas:this._canvas});this._canvas.containerNode.appendChild(this._dragLine.domNode);},activate:function(){this.inherited(arguments);if(!this.startNode){this.deactivate();}else{this._startCreateEdge(this.startNode);}},deactivate:function(){this.startNode=null;this._endNode=null;this._dragLine.deactivate();this.inherited(arguments);},_attachEventListeners:function(){this._mouseOverHandle=dojo.connect(this._canvas,"onMouseOverNode",this,"_onMouseOverNode");this._mouseOutHandle=dojo.connect(this._canvas,"onMouseOutNode",this,"_onMouseOutNode");this._mouseOverLabelHandle=dojo.connect(this._canvas,"onMouseOverNodeLabel",this,"_onMouseOverNodeLabel");this._mouseOutLabelHandle=dojo.connect(this._canvas,"onMouseOutNodeLabel",this,"_onMouseOutNodeLabel");},_detachEventListeners:function(){dojo.disconnect(this._mouseOverHandle);dojo.disconnect(this._mouseOutHandle);dojo.disconnect(this._mouseOverLabelHandle);dojo.disconnect(this._mouseOutLabelHandle);dojo.disconnect(this._lineDoneHandle);},_onMouseOverNode:function(_256){this._endNode=_256;},_onMouseOutNode:function(_257){this._endNode=null;},_onMouseOverNodeLabel:function(_258){var _259=this._canvas.getHitTest().getLabelInfo(_258);if(_259){this._endNode=_259.mainElementId;}},_onMouseOutNodeLabel:function(_25a){this._endNode=null;},_startCreateEdge:function(_25b){var _25c=this._canvas.getMousePosition();var _25d=dojo.coords(this._canvas.domNode,false);_25c.x+=_25d.x;_25c.y+=_25d.y;this._dragLine.activateAt(this._canvas,_25c);this._lineDoneHandle=dojo.connect(this._dragLine,"onLineDone",this,"_finishCreateEdge");},_finishCreateEdge:function(x1,y1,x2,y2){dojo.disconnect(this._lineDoneHandle);var _262=this._canvas;if(this.startNode&&this._endNode){var _263=_262.getGraph();_263.createEdge(this.startNode,this._endNode,this.routeEdges);}this.startNode=null;this._endNode=null;this.deactivate();}});}if(!dojo._hasResource["yfiles.client.tiles.widget.PlaceableDialog"]){dojo._hasResource["yfiles.client.tiles.widget.PlaceableDialog"]=true;dojo.provide("yfiles.client.tiles.widget.PlaceableDialog");dojo.declare("yfiles.client.tiles.widget.PlaceableDialog",dijit.Dialog,{x:0,y:-100,_position:function(){var mb=dojo.marginBox(this.domNode);var _265=dijit.getViewport();var _266=this.x;var _267=this.y;if(_266+mb.width>_265.w){_266-=mb.width;}if(_267<0){_267=10;}with(this.domNode.style){left=_266+"px";top=_267+"px";}}});}if(!dojo._hasResource["yfiles.client.tiles.EditLabelMode"]){dojo._hasResource["yfiles.client.tiles.EditLabelMode"]=true;dojo.provide("yfiles.client.tiles.EditLabelMode");dojo.declare("yfiles.client.tiles.EditLabelMode",yfiles.client.tiles.InputMode,{_labelDialog:null,_labelText:null,_okButton:null,_cancelButton:null,nodeOrLabel:null,constructor:function(_268){var div=dojo.doc.createElement("div");this._canvas.containerNode.appendChild(div);var inp=dojo.doc.createElement("input");inp.type="text";inp.name="label";inp.size=30;inp.maxsize=300;div.appendChild(inp);this._labelText=inp;var btn=dojo.doc.createElement("input");btn.type="button";btn.value="OK";div.appendChild(btn);this._okButton=btn;this._labelDialog=new yfiles.client.tiles.widget.PlaceableDialog({title:"Edit Label",duration:500},div);},activate:function(){this.inherited(arguments);if(this.nodeOrLabel){var type=yfiles.client.tiles.HitTest.getElementType(this.nodeOrLabel);if(type=="Node"||type=="NodeLabel"){this._editLabel();return;}}this.deactivate();},deactivate:function(){this.inherited(arguments);this._labelDialog.hide();},_attachEventListeners:function(){this._clickHandle=dojo.connect(this._okButton,"onclick",this,"_labelDone");this._hideHandle=dojo.connect(this._labelDialog,"hide",this,"deactivate");},_detachEventListeners:function(){dojo.disconnect(this._clickHandle);dojo.disconnect(this._hideHandle);},_editLabel:function(){var _26d=this._canvas.getGraph();_26d.getLabel(this.nodeOrLabel,this,this._openLabelEditor,this.deactivate);},_openLabelEditor:function(lbl){this._labelText.value=lbl;var _26f=this._canvas.getMousePosition();this._labelDialog.x=_26f.x;this._labelDialog.y=_26f.y-25;this._labelDialog.show();},_labelDone:function(){var _270=this._labelText.value;console.debug("new label: "+_270);var _271=this._canvas;var _272=this._canvas.getGraph();_272.setLabel(this.nodeOrLabel,_270);this.deactivate();}});}if(!dojo._hasResource["yfiles.client.tiles.HierarchyManager"]){dojo._hasResource["yfiles.client.tiles.HierarchyManager"]=true;dojo.provide("yfiles.client.tiles.HierarchyManager");dojo.declare("yfiles.client.tiles.HierarchyManager",null,{_graph:null,_type:null,_parent:null,_stateLabelBounds:null,_visibleGraphParent:null,constructor:function(_273){this._graph=_273;this._type=new Object();this._parent=new Object();this._stateLabelBounds=new Object();dojo.connect(_273,"onLoad",this,"refresh");dojo.connect(_273,"onRemove",this,"refresh");dojo.connect(_273,"onNodesMoved",this,"refresh");dojo.connect(_273,"onNodeCreated",this,"_onNewNode");this.refresh();},refresh:function(){if(this._graph){var name=this._graph.getName();if(name&&name.length>0){var _275={path:name};var self=this;dojo.xhrGet({url:this._graph.getBaseURL()+"/getHierarchyInfo",content:_275,load:function(info,_278){self._initializeHierarchyInfo(info,name);},preventCache:true,handleAs:"json-comment-filtered"});}else{this._clearHierarchyInfo();this.onNewHierarchyInfo(name);}}},_initializeHierarchyInfo:function(info,name){this._clearHierarchyInfo();for(var i=0;i<info.length;i++){var _27c=info[i];var id=_27c["i"];this._type[id]=_27c["t"];this._parent[id]=_27c["p"];this._stateLabelBounds[id]=_27c["s"];}this.onNewHierarchyInfo(name);},_clearHierarchyInfo:function(){delete this._type;this._type=new Object();delete this._parent;this._parent=new Object();delete this._stateLabelBounds;this._stateLabelBounds=new Object();},_onNewNode:function(id){this._type[id]=0;this._parent[id]=this._visibleGraphParent;},getGraph:function(){return this._graph;},getNodes:function(args){var _280=new Array();var _281={excludeNormalNodes:false,excludeFolderNodes:false,excludeGroupNodes:false,onlyVisible:true};var _282=dojo.delegate(_281,args);for(var idx in this._type){var type=this._type[idx];if((type==0&&!_282.excludeNormalNodes)||(type==1&&!_282.excludeGroupNodes)||(type==2&&!_282.excludeFolderNodes)){if(_282.onlyChildrenOf&&_282.onlyChildrenOf==this._parent[idx]){_280.push(idx);}}}return _280;},getVisibleGraphParent:function(_285){return this._visibleGraphParent;},isNormalNode:function(_286){return this._type[_286]?this._type[_286]==0:false;},isGroupNode:function(_287){return this._type[_287]?this._type[_287]==1:false;},isFolderNode:function(_288){return this._type[_288]?this._type[_288]==2:false;},getParent:function(_289){return this._parent[_289];},isInStateLabelBox:function(_28a,x,y){var box=this._stateLabelBounds[_28a];return box&&box.x<=x&&box.y<=y&&x<=box.x+box.w&&y<=box.y+box.h;},createGroup:function(args){var name=this._graph.getName();if(name){var _290=dojo.clone(args);if(_290.subNodeIds){_290.subNodeIds=this._createIdsString(_290.subNodeIds);}var _291={name:name,x:0,y:0};var _292=dojo.delegate(_291,_290);var self=this;dojo.xhrPost({url:this._graph.getBaseURL()+"/createGroup",content:_292,load:function(data,_295){self._initializeHierarchyInfo(data.hinfo,name);self.onCreateGroup(data.id,data.bounds,name);},error:function(_296,_297){self.onCreateGroupFailed(name);},handleAs:"json-comment-filtered"});}else{this.onCreateGroupFailed(null);}},moveToSubgraph:function(_298,_299){var name=this._graph.getName();if(name){var _29b=this._createIdsString(_298);var _29c={name:name,subNodeIds:_29b};if(_299){_29c.parentNodeId=_299;}var self=this;dojo.xhrPost({url:this._graph.getBaseURL()+"/moveToSubgraph",content:_29c,load:function(data,_29f){self._initializeHierarchyInfo(data.hinfo,name);self.onMoveToSubgraph(data.id,data.bounds,_298);},error:function(_2a0,_2a1){self.onMoveToSubgraphFailed(name,_299,_298);},handleAs:"json-comment-filtered"});}else{this.onMoveToSubgraphFailed(null,_299,_298);}},_createIdsString:function(ids){var _2a3="";dojo.forEach(ids,function(id){_2a3+=id+",";});if(_2a3.length>0){_2a3=_2a3.substring(0,_2a3.length-1);}return _2a3;},moveToParent:function(_2a5){var name=this._graph.getName();if(name){var _2a7=this._createIdsString(_2a5);var _2a8={name:name,subNodeIds:_2a7};var self=this;dojo.xhrPost({url:this._graph.getBaseURL()+"/moveToParent",content:_2a8,load:function(data,_2ab){self._initializeHierarchyInfo(data.hinfo,name);self.onMoveToParent(data.id,data.bounds,_2a5);},error:function(_2ac,_2ad){self.onMoveToParentFailed(name,_2a5);},handleAs:"json-comment-filtered"});}else{this.onMoveToParentFailed(null,_2a5);}},closeGroup:function(_2ae){var name=this._graph.getName();if(name){var _2b0={name:name,id:_2ae};var self=this;dojo.xhrPost({url:this._graph.getBaseURL()+"/closeGroup",content:_2b0,load:function(data,_2b3){self._initializeHierarchyInfo(data.hinfo,name);self.onCloseGroup(_2ae,data.bounds);},error:function(_2b4,_2b5){self.onCloseGroupFailed(name,_2ae);},handleAs:"json-comment-filtered"});}else{this.onCloseGroupFailed(null,_2ae);}},openGroup:function(_2b6){var name=this._graph.getName();var _2b8={name:name,id:_2b6};if(name){var self=this;dojo.xhrPost({url:this._graph.getBaseURL()+"/openGroup",content:_2b8,load:function(data,_2bb){self._initializeHierarchyInfo(data.hinfo,name);self.onOpenGroup(_2b6,data.bounds);},error:function(_2bc,_2bd){self.onOpenGroupFailed(name,_2b6);},handleAs:"json-comment-filtered"});}else{this.onOpenGroupFailed(null,_2b6);}},switchToSubgraph:function(_2be){var name=this._graph.getName();var _2c0={name:name,id:_2be};if(name){var self=this;dojo.xhrPost({url:this._graph.getBaseURL()+"/switchToSubgraph",content:_2c0,load:function(data,_2c3){self._visibleGraphParent=data.id;self._initializeHierarchyInfo(data.hinfo,name);self.onSwitchToSubgraph(data.id,data.bounds);},error:function(_2c4,_2c5){self.onSwitchToSubgraphFailed(name,_2be);},handleAs:"json-comment-filtered"});}else{this.onSwitchToSubgraphFailed(null,_2be);}},switchToParent:function(){var _2c6={name:this._graph.getName()};if(this._graph.getName()){var self=this;dojo.xhrPost({url:this._graph.getBaseURL()+"/switchToParent",content:_2c6,load:function(data,_2c9){self._visibleGraphParent=data.id;self._initializeHierarchyInfo(data.hinfo,name);self.onSwitchToParent(data.id,data.bounds);},error:function(_2ca,_2cb){self.onSwitchToParentFailed(self._graph.getName());},handleAs:"json-comment-filtered"});}else{this.onSwitchToParentFailed(null);}},onNewHierarchyInfo:function(name){},onCreateGroup:function(id,_2ce,name){},onCreateGroupFailed:function(name){},onCloseGroup:function(id,_2d2){},onOpenGroup:function(id,_2d4){},onCloseGroupFailed:function(name,id){},onOpenGroupFailed:function(name,id){},onSwitchToSubgraph:function(id,_2da){},onSwitchToSubgraphFailed:function(name,id){},onSwitchToParent:function(id,_2de){},onSwitchToParentFailed:function(name){},onMoveToSubgraph:function(_2e0,_2e1,_2e2){},onMoveToSubgraphFailed:function(name,_2e4,_2e5){},onMoveToParent:function(_2e6,_2e7,_2e8){},onMoveToParentFailed:function(name,_2ea){}});}if(!dojo._hasResource["yfiles.client.tiles.GroupNavigationMode"]){dojo._hasResource["yfiles.client.tiles.GroupNavigationMode"]=true;dojo.provide("yfiles.client.tiles.GroupNavigationMode");dojo.declare("yfiles.client.tiles.GroupNavigationMode",yfiles.client.tiles.InputMode,{_hierarchy:null,_currentNode:null,_currentNodeLabel:null,_mouseDown:false,_groupBorderWidth:5,_connectHandles:null,constructor:function(_2eb,_2ec){this._hierarchy=_2ec;this._connectHandles=[];},activate:function(){this.inherited(arguments);},deactivate:function(){this.inherited(arguments);},_onMouseOverNode:function(_2ed){this._currentNode=_2ed;},_onMouseOutNode:function(_2ee){this._currentNode=null;},_onMouseOverNodeLabel:function(_2ef){var _2f0=this._canvas.getHitTest().getLabelInfo(_2ef);if(_2f0){this._currentNode=_2f0.mainElementId;}},_onMouseOutNodeLabel:function(_2f1){this._currentNode=null;},_onClickNode:function(id,info,evt){if(evt.ctrlKey&&evt.shiftKey){if(!this._hierarchy.isNormalNode(id)){this._hierarchy.switchToSubgraph(id);}}else{this._updateGroupState(id,evt);}},_onClickNodeLabel:function(_2f5,info,evt){var _2f8=this._canvas.getHitTest().getLabelInfo(_2f5);if(_2f8){var _2f9=_2f8.mainElementId;this._updateGroupState(_2f9,evt);}},_onClickPaper:function(info,evt){if(evt.ctrlKey&&evt.shiftKey){this._hierarchy.switchToParent();}},_refreshCanvas:function(id,_2fd){this._canvas.refresh(_2fd,null,true);},_refreshCanvasOnGroupSwitch:function(id,_2ff){this._refreshCanvas(id,_2ff);this._canvas.fitContent();},_attachEventListeners:function(){if(this._connectHandles.length!=0){return;}this._connectHandles=[dojo.connect(this._canvas,"onMouseOverNode",this,"_onMouseOverNode"),dojo.connect(this._canvas,"onMouseOutNode",this,"_onMouseOutNode"),dojo.connect(this._canvas,"onMouseOverNodeLabel",this,"_onMouseOverNodeLabel"),dojo.connect(this._canvas,"onMouseOutNodeLabel",this,"_onMouseOutNodeLabel"),dojo.connect(this._canvas,"onClickPaper",this,"_onClickPaper"),dojo.connect(this._canvas,"onClickNode",this,"_onClickNode"),dojo.connect(this._canvas,"onClickNodeLabel",this,"_onClickNodeLabel"),dojo.connect(this._hierarchy,"onCloseGroup",this,"_refreshCanvas"),dojo.connect(this._hierarchy,"onOpenGroup",this,"_refreshCanvas"),dojo.connect(this._hierarchy,"onSwitchToSubgraph",this,"_refreshCanvasOnGroupSwitch"),dojo.connect(this._hierarchy,"onSwitchToParent",this,"_refreshCanvasOnGroupSwitch")];var info=this._canvas.getLastHitInfo();if("Node"==yfiles.client.tiles.HitTest.getElementType(info)){this._onMouseOverNode(yfiles.client.tiles.HitTest.getHitId(info));}else{this._currentNode=null;}},_detachEventListeners:function(){dojo.forEach(this._connectHandles,dojo.disconnect);this._connectHandles=[];},_updateGroupState:function(_301,evt){if(!evt.ctrlKey&&!evt.shiftKey&&!evt.altKey){if(!this._hierarchy.isNormalNode(_301)){var pos=this._canvas.getWorldCoordinates();if(this._hierarchy.isInStateLabelBox(_301,pos.x,pos.y)){if(this._hierarchy.isGroupNode(_301)){this._canvas.pushTiles();this._hierarchy.closeGroup(_301);}else{if(this._hierarchy.isFolderNode(_301)){this._canvas.pushTiles();this._hierarchy.openGroup(_301);}}}}}}});}if(!dojo._hasResource["yfiles.client.tiles.GraphSelection"]){dojo._hasResource["yfiles.client.tiles.GraphSelection"]=true;dojo.provide("yfiles.client.tiles.GraphSelection");dojo.declare("yfiles.client.tiles.GraphSelection",null,{_nodes:null,_edges:null,_size:0,constructor:function(_304,_305){this.setSelectNodes(_304);this.setSelectEdges(_305);this._size=0;},setSelectNodes:function(bool){if(bool){if(!this._nodes){this._nodes={};}}else{this.removeAll(this.getNodes());this._nodes=null;}},setSelectEdges:function(bool){if(bool){if(!this._edges){this._edges={};}}else{this.removeAll(this.getEdges());this._edges=null;}},getSize:function(){return this._size;},getNodes:function(){var res=[];this._getElems(this._nodes,res);return res;},getEdges:function(){var res=[];this._getElems(this._edges,res);return res;},get:function(){var res=[];this._getElems(this._nodes,res);this._getElems(this._edges,res);return res;},add:function(id){switch(yfiles.client.tiles.HitTest.getElementType(id)){case "Node":if(this._nodes&&!this._nodes[id]){this._nodes[id]=true;this._size++;this.onAddNode(id);return true;}break;case "Edge":if(this._edges&&!this._edges[id]){this._edges[id]=true;this._size++;this.onAddEdge(id);return true;}break;}return false;},remove:function(id){switch(yfiles.client.tiles.HitTest.getElementType(id)){case "Node":if(this._nodes&&this._nodes[id]){delete this._nodes[id];this._size--;this.onRemoveNode(id);return true;}break;case "Edge":if(this._edges&&this._edges[id]){delete this._edges[id];this._size--;this.onRemoveEdge(id);return true;}break;}return false;},toggle:function(id){if(this.isSelected(id)){return this.remove(id);}else{return this.add(id);}},addAll:function(ids){for(var i=0;i<ids.length;i++){this.add(ids[i]);}},removeAll:function(ids){for(var i=0;i<ids.length;i++){this.remove(ids[i]);}},toggleAll:function(ids){for(var i=0;i<ids.length;i++){this.toggle(ids[i]);}},isSelected:function(id){if((this._nodes&&this._nodes[id])||(this._edges&&this._edges[id])){return true;}else{return false;}},clear:function(){this.removeAll(this.getEdges());this.removeAll(this.getNodes());},onAddNode:function(_315){},onAddEdge:function(_316){},onRemoveNode:function(_317){},onRemoveEdge:function(_318){},_getElems:function(coll,res){if(coll){for(var idx in coll){if(coll[idx]){res.push(idx);}}}}});}if(!dojo._hasResource["yfiles.client.tiles.MoveSelectionMode"]){dojo._hasResource["yfiles.client.tiles.MoveSelectionMode"]=true;dojo.provide("yfiles.client.tiles.MoveSelectionMode");dojo.declare("yfiles.client.tiles.MoveSelectionMode",yfiles.client.tiles.InputMode,{_selection:null,_startPosition:null,_div:null,_drag:null,_hierarchy:null,_MouseUpHandle:null,_MouseMoveHandle:null,constructor:function(_31c,_31d,_31e){this._selection=_31d;if(_31e){this._hierarchy=_31e;}var _31f=dojo.doc.createElement("div");_31f.style.position="absolute";this._canvas.containerNode.appendChild(_31f);this._div=_31f;},activate:function(){this.inherited(arguments);if(this._selection.getNodes().length==0){this.deactivate();}else{this._startPosition=this._canvas.getMousePosition();this._showGhosts();}},deactivate:function(){this._hideGhosts();this.inherited(arguments);},_onMouseUp:function(evt){this._hideGhosts();this._moveNodesSwitchGroups(evt);this.deactivate();},_showGhosts:function(){this._div.style.left="0px";this._div.style.top="0px";var _321=this._selection.getNodes();for(var idx in _321){var id=_321[idx];var _324=this._hitTest.getBoundsForId(id);var zoom=this._canvas.zoom;var div=dojo.doc.createElement("div");this._div.appendChild(div);div.style.position="absolute";div.style.cursor="move";div.style.left=(this._canvas.x+(_324.minX-0.1*_324.width())*zoom)+"px";div.style.top=(this._canvas.y+(_324.minY-0.1*_324.height())*zoom)+"px";var _327=(1.2*_324.width()*zoom);div.style.width=_327+"px";var _328=(1.2*_324.height()*zoom);div.style.height=_328+"px";div.style.backgroundColor="yellow";dojo.style(div,"opacity",0.5);}this._MouseUpHandle=dojo.connect(this._canvas,"onMouseUp",this,"_onMouseUp");this._MouseMoveHandle=dojo.connect(this._canvas,"onMouseMove",this,"_moveGhosts");},_moveGhosts:function(){var pos=this._canvas.getMousePosition();var x=pos.x-this._startPosition.x;var y=pos.y-this._startPosition.y;this._div.style.left=x+"px";this._div.style.top=y+"px";},_hideGhosts:function(){this._moving=false;if(this._div){dojo.disconnect(this._MouseUpHandle);dojo.disconnect(this._MouseMoveHandle);while(this._div.hasChildNodes()){this._div.removeChild(this._div.firstChild);}}},_moveNodesSwitchGroups:function(evt){if(this._hierarchy&&evt.shiftKey){this._switchGroups();}else{this._moveNodes(this._selection.getNodes());}},_switchGroups:function(){var _32d=this._canvas;var _32e=this._selection.getNodes();var _32f=_32d.getHitTest();var _330=_32d.getWorldCoordinates();var info=_32f.getHitInfo(_330.x,_330.y,false);var _332=yfiles.client.tiles.HitTest.getHitIds(info);var _333=dojo.hitch(this,this._moveNodes,_32e);if(_332.length>0){for(var idx in _332){var id=_332[idx];if(!this._hierarchy.isNormalNode(id)){this._tmpMTSHandle=dojo.connect(this._hierarchy,"onMoveToSubgraph",this,_333);this._tmpMTSFHandle=dojo.connect(this._hierarchy,"onMoveToSubgraphFailed",this,_333);this._hierarchy.moveToSubgraph(_32e,id);break;}}}else{this._tmpMTSHandle=dojo.connect(this._hierarchy,"onMoveToSubgraph",this,_333);this._tmpMTSFHandle=dojo.connect(this._hierarchy,"onMoveToSubgraphFailed",this,_333);this._hierarchy.moveToSubgraph(_32e,this._hierarchy.getVisibleGraphParent());}},_moveNodes:function(_336){if(this._tmpMTSHandle){dojo.disconnect(this._tmpMTSHandle);delete this._tmpMTSHandle;}if(this._tmpMTSFHandle){dojo.disconnect(this._tmpMTSFHandle);delete this._tmpMTSFHandle;}var _337=this._canvas;var pos=_337.getMousePosition();var x=(pos.x-this._startPosition.x)/_337.zoom;var y=(pos.y-this._startPosition.y)/_337.zoom;_337.getGraph().moveNodes(_336,x,y);}});}if(!dojo._hasResource["yfiles.client.tiles.widget.Rubberband"]){dojo._hasResource["yfiles.client.tiles.widget.Rubberband"]=true;dojo.provide("yfiles.client.tiles.widget.Rubberband");dojo.declare("yfiles.client.tiles.widget.Rubberband",[dijit._Widget,dijit._Templated],{templateString:"<div dojoAttachPoint=\"root\" style=\"display:none;overflow:hidden;\"><div dojoAttachPoint=\"area\" class=\"yFilesRubberbandArea\" style=\"position:absolute;display:none;font-size:1px;\"></div></div>",fixCanvas:false,releaseCanvas:false,root:null,area:null,canvas:null,_mouseX:0,_mouseY:0,_initialX:0,_initialY:0,_resizeAreaHandle:null,_showAreaHandle:null,_mouseMoveHandle:null,activate:function(_33b){this.canvas=_33b;if(this.fixCanvas){this.canvas.fix();}this._showAreaHandle=this.connect(this.canvas,"onMouseDown","_showArea");},activateAt:function(_33c,pos){this.canvas=_33c;if(this.fixCanvas){this.canvas.fix();}this._showAreaAt(pos);},deactivate:function(){this._hideArea();this.onDeactivated();},onAreaResized:function(x,y,_340,_341){},onAreaDone:function(x,y,_344,_345){},onDeactivated:function(){},_showArea:function(){this.disconnect(this._showAreaHandle);var _346=this.canvas.getMousePosition();this._showAreaAt(_346);},_showAreaAt:function(pos){var x=pos.x;var y=pos.y;this._initialX=x;this._initialY=y;var area=this.area;area.style.width="1px";area.style.height="1px";area.style.left=this._initialX+"px";area.style.top=this._initialY+"px";dojo.style(area,"opacity",0.2);area.style.display="block";this.root.style.display="block";this._resizeAreaHandle=this.connect(this.canvas,"onMouseMove","_resizeArea");this._mouseMoveHandle=this.connect(this.canvas,"onMouseUp","_areaDone");},_resizeArea:function(evt){var pos=this.canvas.getMousePosition();this._mouseX=pos.x;this._mouseY=pos.y;var w=this._mouseX-this._initialX;var h=this._mouseY-this._initialY;var _34f=this._initialX;var _350=this._initialY;var _351=w;var _352=h;var area=this.area;if(w>=0){area.style.width=_351+"px";}else{_34f=this._initialX+w;_351=-w;area.style.left=_34f+"px";area.style.width=_351+"px";}if(h>=0){area.style.height=_352+"px";}else{_350=this._initialY+h;_352=-h;area.style.top=_350+"px";area.style.height=_352+"px";}this.onAreaResized(_34f,_350,_351,_352);},_areaDone:function(){var _354=this.canvas;var area=this.area;var x=parseInt(area.style.left)-_354.x;var y=parseInt(area.style.top)-_354.y;var w=parseInt(area.style.width);var h=parseInt(area.style.height);this._hideArea();this.onAreaDone(x,y,w,h);this.onDeactivated();},_hideArea:function(){if(this.releaseCanvas&&this.canvas){this.canvas.release();}this.disconnect(this._showAreaHandle);this.disconnect(this._mouseMoveHandle);this.disconnect(this._resizeAreaHandle);window.status="";var area=this.area;area.style.display="none";area.style.left="-10px";area.style.top="-10px";area.style.width="1px";area.style.height="1px";this.root.style.display="none";}});}if(!dojo._hasResource["yfiles.client.tiles.RectangularSelectionMode"]){dojo._hasResource["yfiles.client.tiles.RectangularSelectionMode"]=true;dojo.provide("yfiles.client.tiles.RectangularSelectionMode");dojo.declare("yfiles.client.tiles.RectangularSelectionMode",yfiles.client.tiles.InputMode,{_rubberBand:null,_selection:null,_hierarchy:null,_connectHandles:null,constructor:function(_35b,_35c,_35d){this._selection=_35c;this._rubberBand=new yfiles.client.tiles.widget.Rubberband({canvas:this._canvas,fixCanvas:true});this._canvas.containerNode.appendChild(this._rubberBand.domNode);this._connectHandles=[];this._hierarchy=_35d;},activate:function(){this.inherited(arguments);window.status="Drag to mark the selection area.";this._rubberBand.activateAt(this._canvas,this._canvas.getMousePosition());},deactivate:function(){if(this.isActive()){this._rubberBand.deactivate();window.status="";}this.inherited(arguments);},_attachEventListeners:function(){if(this._connectHandles.length==0){this._connectHandles=[dojo.connect(this._rubberBand,"onDeactivated",this,"_hideSelectionArea"),dojo.connect(this._rubberBand,"onAreaDone",this,"_applySelectionArea"),dojo.connect(this._selection,"onAddNode",this._canvas,"highlight"),dojo.connect(this._selection,"onRemoveNode",this._canvas,"unhighlight"),dojo.connect(this._selection,"onAddEdge",this._canvas,"highlight"),dojo.connect(this._selection,"onRemoveEdge",this._canvas,"unhighlight"),dojo.connect(this._canvas.getGraph(),"onRemove",this._selection,"removeAll")];}},_detachEventListeners:function(){dojo.forEach(this._connectHandles,dojo.disconnect);this._connectHandles=[];},_applySelectionArea:function(x,y,w,h){var _362=this._canvas;var zoom=this._canvas.zoom;var minX=x/zoom;var minY=y/zoom;var maxX=(x+w)/zoom;var maxY=(y+h)/zoom;var info=this._hitTest.getOverlaps(minX,minY,maxX,maxY);var ids=yfiles.client.tiles.HitTest.getHitIds(info);if(this._hierarchy){var _36a=[];for(var idx in ids){var id=ids[idx];if(this._hierarchy.isGroupNode(id)){var _36d=this._hitTest.getBoundsForId(id);if(minX<=_36d.minX&&minY<=_36d.minY&&_36d.maxX<=maxX&&_36d.maxY<=maxY){_36a.push(id);}}else{_36a.push(id);}}this._selection.addAll(_36a);}else{this._selection.addAll(ids);}this.deactivate();},_hideSelectionArea:function(){window.status="";}});}if(!dojo._hasResource["yfiles.client.tiles.EditMode"]){dojo._hasResource["yfiles.client.tiles.EditMode"]=true;dojo.provide("yfiles.client.tiles.EditMode");dojo.declare("yfiles.client.tiles.EditMode",yfiles.client.tiles.InputMode,{nodeType:null,_hierarchy:null,_groupNavigationMode:null,_createEdgeMode:null,_moveSelectionMode:null,_rectangularSelectionMode:null,_editLabelMode:null,_currentNode:null,_currentNodeLabel:null,_selection:null,_selectNodes:false,_selectEdges:false,_mouseDown:false,_edgeTestSensitivity:5,_groupBorderWidth:5,_connectHandles:null,constructor:function(_36e,_36f,_370,_371,_372){this._selectNodes=_36f;this._selectEdges=_370;if(_36f||_370){this._selection=new yfiles.client.tiles.GraphSelection(_36f,_370);}if(_372){this._hierarchy=_372;this._groupNavigationMode=new yfiles.client.tiles.GroupNavigationMode(_36e,_372);this._groupNavigationMode.activate();}this._createEdgeMode=new yfiles.client.tiles.CreateEdgeMode(_36e,_371);this._moveSelectionMode=new yfiles.client.tiles.MoveSelectionMode(_36e,this._selection,_372);this._rectangularSelectionMode=new yfiles.client.tiles.RectangularSelectionMode(_36e,this._selection,_372);this._editLabelMode=new yfiles.client.tiles.EditLabelMode(_36e);this._connectHandles=[];},getSelection:function(){return this._selection;},clearSelection:function(){this._selection.clear();},activate:function(){this.inherited(arguments);this._canvas.fix();this.setCursor("crosshair","crosshair");},deactivate:function(){this._selection.clear();this._canvas.unhighlightAll();this._canvas.release();this.setCursor("default","default");this.inherited(arguments);},editLabel:function(id){this._editLabelMode.nodeOrLabel=id;this.setChild(this._editLabelMode);},getEdgeTestSensitivity:function(){return this._edgeTestSensitivity;},setEdgeTestSensitivity:function(_374){this._edgeTestSensitivity=_374;this._hitTest.setEdgeTestSensitivity(this._edgeTestSensitivity/this._canvas.zoom);},_onMouseOverNode:function(_375){this._currentNode=_375;this.setCursor("pointer","crosshair");},_onMouseOutNode:function(_376){this._currentNode=null;this.restoreCursor();},_onMouseOverNodeLabel:function(_377){var _378=this._canvas.getHitTest().getLabelInfo(_377);if(_378){this._currentNode=_378.mainElementId;}this.setCursor("pointer","crosshair");},_onMouseOutNodeLabel:function(_379){this._currentNode=null;this.restoreCursor();},_onMouseOverEdge:function(){this.setCursor("pointer","crosshair");},_onMouseOutEdge:function(){this.restoreCursor();},_onMouseDown:function(evt){var info=this._canvas.getLastHitInfo();var _37c=yfiles.client.tiles.HitTest.getElementType(info);if(_37c!="Node"&&_37c!="NodeLabel"){this._currentNode=null;if(this._selectNodes){this.restoreCursor();}}this._mouseDown=true;},_onMouseUp:function(evt){this._mouseDown=false;},_onClickNodeOrEdge:function(id,info,evt){this._updateSelection(id,info,evt);},_onClickNodeLabel:function(_381,info,evt){var _384=this._canvas.getHitTest().getLabelInfo(_381);if(_384){var _385=_384.mainElementId;this._updateSelection(_385,info,evt);}},_onClickPaper:function(info,evt){if(!evt.ctrlKey&&!evt.shiftKey&&!evt.altKey){var _388=this._selection.getSize();this.clearSelection();if(_388==0){var _389=this._canvas;var _38a=_389.getWorldCoordinates();_389.getGraph().createNode(_38a.x,_38a.y,this.nodeType);}}},_onMouseMove:function(evt){if(this._mouseDown){this._mouseDown=false;if(this._currentNode){if(this._selection){if(!this._selection.isSelected(this._currentNode)){if(this._hierarchy&&this._strictlyInsideGroupNode(this._currentNode)){this._startSelection(evt);}else{this._createEdgeMode.startNode=this._currentNode;this.setChild(this._createEdgeMode);}}else{this.setChild(this._moveSelectionMode);}}else{if(!this._hierarchy||!this._strictlyInsideGroupNode(this._currentNode)){this._createEdgeMode.startNode=this._currentNode;this.setChild(this._createEdgeMode);}}}else{if(this._selection){this._startSelection(evt);}}}},_onKeyPress:function(evt){if(this._canvas.isMouseOver()&&evt.keyCode==dojo.keys.DELETE){var _38d=this._selection.get();this.getGraph().remove(_38d);}},_attachEventListeners:function(){if(this._connectHandles.length!=0){return;}this._canvas.fix();this._connectHandles=[dojo.connect(this._canvas,"onMouseDown",this,"_onMouseDown"),dojo.connect(this._canvas,"onMouseUp",this,"_onMouseUp"),dojo.connect(this._canvas,"onClickPaper",this,"_onClickPaper"),dojo.connect(this._canvas,"onMouseMove",this,"_onMouseMove"),dojo.connect(this._canvas,"viewPortChanged",this,"_viewPortChanged")];this._connectHandles.push(dojo.connect(this._canvas,"onMouseOverNode",this,"_onMouseOverNode"));this._connectHandles.push(dojo.connect(this._canvas,"onMouseOutNode",this,"_onMouseOutNode"));this._connectHandles.push(dojo.connect(this._canvas,"onClickNode",this,"_onClickNodeOrEdge"));this._connectHandles.push(dojo.connect(this._canvas,"onDblClickNode",this,"editLabel"));this._connectHandles.push(dojo.connect(this._canvas,"onMouseOverNodeLabel",this,"_onMouseOverNodeLabel"));this._connectHandles.push(dojo.connect(this._canvas,"onMouseOutNodeLabel",this,"_onMouseOutNodeLabel"));this._connectHandles.push(dojo.connect(this._canvas,"onClickNodeLabel",this,"_onClickNodeLabel"));this._connectHandles.push(dojo.connect(this._canvas,"onClickEdge",this,"_onClickNodeOrEdge"));this._connectHandles.push(dojo.connect(this._canvas,"onMouseOverEdge",this,"_onMouseOverEdge"));this._connectHandles.push(dojo.connect(this._canvas,"onMouseOutEdge",this,"_onMouseOutEdge"));if(this._selectNodes){this._connectHandles.push(dojo.connect(this._selection,"onAddNode",this._canvas,"highlight"));this._connectHandles.push(dojo.connect(this._selection,"onRemoveNode",this._canvas,"unhighlight"));}if(this._selectEdges){this._connectHandles.push(dojo.connect(this._selection,"onAddEdge",this._canvas,"highlight"));this._connectHandles.push(dojo.connect(this._selection,"onRemoveEdge",this._canvas,"unhighlight"));}this._connectHandles.push(dojo.connect(this._canvas,"onClickPaper",this._selection,"clear"));this._connectHandles.push(dojo.connect(this.getGraph(),"onRemove",this._selection,"removeAll"));this._connectHandles.push(dojo.connect(dojo.doc,"onkeypress",this,"_onKeyPress"));this._hitTest.setEdgeTestSensitivity(this._edgeTestSensitivity/this._canvas.zoom);var info=this._canvas.getLastHitInfo();if("Node"==yfiles.client.tiles.HitTest.getElementType(info)){this._onMouseOverNode(yfiles.client.tiles.HitTest.getHitId(info));}else{this._currentNode=null;}},_detachEventListeners:function(){dojo.forEach(this._connectHandles,dojo.disconnect);this._connectHandles=[];},_startSelection:function(evt){if(this._selection){if(!evt.ctrlKey){this.clearSelection();}this.setChild(this._rectangularSelectionMode);}},_strictlyInsideGroupNode:function(node){if(this._hierarchy&&this._hierarchy.isGroupNode(node)){var _391=this._canvas.getHitTest().getBoundsForId(node);var pos=this._canvas.getWorldCoordinates();var gbw=this._groupBorderWidth;return (pos.x-_391.minX>gbw)&&(pos.y-_391.minY>gbw)&&(_391.maxX-pos.x>gbw)&&(_391.maxY-pos.y>gbw);}else{return false;}},_updateSelection:function(id,info,evt){if(this._selection){if(evt.ctrlKey&&evt.shiftKey){return;}if(!evt.ctrlKey){this.clearSelection();}if(!this._selectNodes||!this._selectEdges){var _397=this._canvas.getHitTest().getElementType(id);if((_397=="Node"&&!this._selectNodes)||(_397=="Edge"&&!this._selectEdges)){return;}}this._selection.toggle(id);}},_viewPortChanged:function(x,y,_39a,_39b,zoom){this._hitTest.setEdgeTestSensitivity(this._edgeTestSensitivity/zoom);}});}if(!dojo._hasResource["yfiles.client.tiles.SquelchClickMode"]){dojo._hasResource["yfiles.client.tiles.SquelchClickMode"]=true;dojo.provide("yfiles.client.tiles.SquelchClickMode");dojo.declare("yfiles.client.tiles.SquelchClickMode",yfiles.client.tiles.InputMode,{_clickHandle:null,_attachEventListeners:function(){this._clickHandle=dojo.connect(this._canvas,"onClick",this,"deactivate");},_detachEventListeners:function(){dojo.disconnect(this._clickHandle);}});}if(!dojo._hasResource["yfiles.client.tiles.ZoomAreaMode"]){dojo._hasResource["yfiles.client.tiles.ZoomAreaMode"]=true;dojo.provide("yfiles.client.tiles.ZoomAreaMode");dojo.declare("yfiles.client.tiles.ZoomAreaMode",yfiles.client.tiles.InputMode,{_rubberBand:null,_hideHandle:null,_applyHandle:null,constructor:function(_39d){this._rubberBand=this._labelDialog=new yfiles.client.tiles.widget.Rubberband({canvas:this._canvas,fixCanvas:true,releaseCanvas:true});this._canvas.containerNode.appendChild(this._rubberBand.domNode);},activate:function(){this.inherited(arguments);this._showZoomArea();},deactivate:function(){if(this.isActive()){this._hideZoomArea();}this.inherited(arguments);},_showZoomArea:function(){if(this._rubberBand){window.status="Click and drag to mark the zoom area.";this._rubberBand.activate(this._canvas);this._hideHandle=dojo.connect(this._rubberBand,"onDeactivated",this,"_hideZoomArea");this._applyHandle=dojo.connect(this._rubberBand,"onAreaDone",this,"_applyZoomArea");}},_hideZoomArea:function(){if(this._rubberBand){dojo.disconnect(this._hideHandle);dojo.disconnect(this._applyHandle);this._rubberBand.deactivate();window.status="";}},_applyZoomArea:function(x,y,w,h){var _3a2=this._canvas;if(w>9&&h>9){var cx=x+w/2;var cy=y+h/2;var _3a5=_3a2.zoom;var _3a6=_3a5*Math.min(_3a2.width/w,_3a2.height/h);_3a2.center(cx,cy);_3a2.setZoom(_3a6);}this.deactivate();}});}if(!dojo._hasResource["yfiles.client.tiles.widget.ViewPortMarker"]){dojo._hasResource["yfiles.client.tiles.widget.ViewPortMarker"]=true;dojo.provide("yfiles.client.tiles.widget.ViewPortMarker");dojo.declare("yfiles.client.tiles.widget.ViewPortMarker",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"yFilesViewPortMarker\" dojoAttachPoint=\"marker\" style=\"padding:0pt;margin:0pt;position:absolute;display:block;font-size:1px;cursor:move;z-index:10;\"></div>",marker:null,canvasId:"",overviewId:"",lastBounds:null,canvas:null,overview:null,markerParent:null,_changeTriggered:false,_lateInitHandle:null,postCreate:function(){dojo.style(this.marker,"opacity",0.3);this.drag=new dojo.dnd.Moveable(this.marker);this.connect(this.drag,"onMoved","markerChanged");if(!this.overview){this.overview=dijit.byId(this.overviewId);}this.markerParent=this.overview.domNode;this.connect(this.overview,"viewPortChanged","overviewChanged");this.connect(this.markerParent,"ondblclick","centerMarker");if(!this.canvas){this.canvas=dijit.byId(this.canvasId);}if(this.canvas==null){this._lateInitHandle=this.connect(dijit.registry,"add","lateInitialization");}else{with(this.canvas){this.lastBounds={width:width,height:height,x:x,y:y,zoom:zoom};}this.connect(this.canvas,"viewPortChanged","canvasChanged");}},lateInitialization:function(_3a7){if(_3a7.id==this.canvasId){this.canvas=_3a7;with(this.canvas){this.lastBounds={width:width,height:height,x:x,y:y,zoom:zoom};}this.connect(this.canvas,"viewPortChanged","canvasChanged");this.disconnect(this._lateInitHandle);}},overviewChanged:function(){if(this.lastBounds){this.canvasChanged(this.lastBounds.x,this.lastBounds.y,this.lastBounds.width,this.lastBounds.height,this.lastBounds.zoom);}},canvasChanged:function(x,y,_3aa,_3ab,zoom){this.lastBounds={width:_3aa,height:_3ab,x:x,y:y,zoom:zoom};var _3ad=this.overview.zoom/zoom;this.marker.style.width=(_3aa*_3ad)+"px";this.marker.style.height=(_3ab*_3ad)+"px";this.marker.style.left=(this.overview.x-x*_3ad)+"px";this.marker.style.top=(this.overview.y-y*_3ad)+"px";},markerChanged:function(){if(!this._changeTriggered){this._changeTriggered=true;setTimeout(dojo.hitch(this,this._markerChanged),100);}},_markerChanged:function(){var _3ae=parseInt(this.marker.style.left);var _3af=parseInt(this.marker.style.top);var _3b0=this.canvas.zoom/this.overview.zoom;this.canvas.setViewPoint(_3b0*(this.overview.x-_3ae),_3b0*(this.overview.y-_3af));this.canvas.recalculateTiles();this._changeTriggered=false;},centerMarker:function(evt){var pos=dojo.coords(this.markerParent,false);var x=evt.pageX-pos.x-parseInt(this.marker.style.width)/2;var y=evt.pageY-pos.y-parseInt(this.marker.style.height)/2;this.marker.style.left=Math.round(x)+"px";this.marker.style.top=Math.round(y)+"px";this.markerChanged();}});}
