function Tween(A,C,F,D,E,B){this.target=A;this.id=A.getPositionable().id;this.time=0;this.duration=B;this.position=D;this.finish=parseFloat(E);this._prop=C;this._ease=F;this._start=parseFloat(D);this._change=this.finish-this._start;this._animate=false;this.start()}Tween.aStack=[];Tween._poll=function(){for(var A=0;A<this.aStack.length;A++){this.aStack[A]._onMotion()}};Tween._add=function(A){this.aStack[this.aStack.length]=A};Tween._remove=function(B){for(var A=0;A<this.aStack.length;A++){if(this.aStack[A]==B){this.aStack.splice(A,1);break}}};Tween._inStack=function(B){for(var A=0;A<this.aStack.length;A++){if(this.aStack[A]==B){return true}}return false};Tween.prototype._onMotion=function(){if(this._animate){if(this.time<this.duration){this.time++;this.position=this._ease(this.time,this._start,this._change,this.duration,50,1.06);if(this._prop){this.target[this._prop](this.position)}this.onMotionChanged()}else{this.onMotionFinished();this.stop()}}};Tween.prototype.onMotionChanged=function(){return };Tween.prototype.onMotionFinished=function(){return };Tween.prototype.start=function(){if(!this._animate){this._animate=true;this.time=0;if(!this.constructor._inStack(this)){this.constructor._add(this)}}};Tween.prototype.stop=function(){this._animate=false;this.constructor._remove(this)};Tween.prototype.runing=function(){return this._animate};Tween.prototype.resume=function(){this._animate=true;if(!this.constructor._inStack(this)){this.constructor._add(this)}};setInterval("Tween._poll()",15);var RunMap=Class.create({initialize:function(C,G,F,A,D,E,B){this.oCityMap=new CityMap(C,B);this.oMiniMap=new MiniMap(G,F,B);this.oCentralMiniMap=new CentralMiniMap(A,D,B);this.oFrameConnector=new FrameConnector(E,B.CentralMiniMap.sConnectorColor);this.fCx=B.MiniMap.fCx;this.fCy=B.MiniMap.fCy;this.fmCx=B.CityMap.fCx;this.fmCy=B.CityMap.fCy;this.fcmCx=B.CentralMiniMap.fCx;this.fcmCy=B.CentralMiniMap.fCy;this.icmXsh=B.CentralMiniMap.iLeft;this.icmYsh=B.CentralMiniMap.iTop;this.notifyer=B.MapNotifyer;this.notifyer.add(C.id,"drag_start",this,"onMoveStart");this.notifyer.add(C.id,"drag",this,"onCityMapMove");this.notifyer.add(C.id,"tween",this,"onCityMapMove");this.notifyer.add(F.id,"drag_start",this,"onMoveStart");this.notifyer.add(F.id,"drag",this,"onMiniMapFrameMove");this.notifyer.add(F.id,"resize",this,"onMiniMapFrameResize");this.onMiniMapFrameResize();this.onMiniMapFrameMove()},onMoveStart:function(){this.oCityMap.stopTweens()},onCityMapMove:function(){var C=parseFloat(Math.abs(this.oCityMap.getX()))*this.fmCx;var B=parseFloat(Math.abs(this.oCityMap.getY()))*this.fmCy;this.oMiniMap.setX(C);this.oMiniMap.setY(B);var D=this.fcmCx*C;var A=this.fcmCy*B;this.oCentralMiniMap.setX(D);this.oCentralMiniMap.setY(A);this.oFrameConnector.drawConnector({left:C+(this.oMiniMap.getWidth()/2),top:B+(this.oMiniMap.getHeight()/2)},{left:D+this.icmXsh+(this.oCentralMiniMap.getWidth()/2),top:A+this.icmYsh+(this.oCentralMiniMap.getHeight()/2)})},onMiniMapFrameMove:function(){var C=parseFloat(this.oMiniMap.getX());var B=parseFloat(this.oMiniMap.getY());var E=-Math.round(C*this.fCx);var D=-Math.round(B*this.fCy);this.oCityMap.setX(E);this.oCityMap.setY(D);var F=this.fcmCx*C;var A=this.fcmCy*B;this.oCentralMiniMap.setX(F);this.oCentralMiniMap.setY(A);this.oFrameConnector.drawConnector({left:C+(this.oMiniMap.getWidth()/2),top:B+(this.oMiniMap.getHeight()/2)},{left:F+this.icmXsh+(this.oCentralMiniMap.getWidth()/2),top:A+this.icmYsh+(this.oCentralMiniMap.getHeight()/2)})},onMiniMapFrameResize:function(){this.oCentralMiniMap.setWidth(parseFloat(this.oMiniMap.getWidth())*this.fcmCx);this.oCentralMiniMap.setHeight(parseFloat(this.oMiniMap.getHeight())*this.fcmCy)},scrollTo:function(A,B){this.oCityMap.scrollTo(A,B)},scrollBy:function(B,A){this.oCityMap.scrollBy(B,A)},jumpTo:function(A,B){this.oCityMap.jumpTo(A,B);this.onCityMapMove()},getMapId:function(){return this.oCityMap.getPositionable().id},getMiniMapId:function(){return this.oMiniMap.getPositionable().id},getLimitsShifts:function(){return this.oCityMap.getLimitsShifts()}});var Positionable=Class.create({initialize:function(A){this.eVis=A},setNotifyer:function(A){this.notifyer=A},scrollTo:function(A,E){var A=A||null,E=E||null;if(A!=null&&E!=null){var A=this.limitX(-A+Math.round(window.iMapW/2));var E=this.limitY(-E+Math.round(window.iMapH/2));var C=this.getX();var D=this.getY();var B=Math.round(Math.sqrt(Math.pow(A-C,2)+Math.pow(E-D,2))/15);this.stopTweens();this.twX=new Tween(this,"setX",Math.easeInOutCubic,C,A,B);this.twY=new Tween(this,"setY",Math.easeInOutCubic,D,E,B);this.bindTweenNotifyer(this.twX);this.bindTweenNotifyer(this.twY)}},scrollBy:function(C,B){if(B=="horizontal"||B=="vertical"){this.stopTweens();var A=this[B=="horizontal"?"getX":"getY"]();var D=Math.round(parseFloat(A+C));var D=this[B=="horizontal"?"limitX":"limitY"](D);var B=B=="horizontal"?"setX":"setY";this.twSc=new Tween(this,B,Math.easeInOutCubic,A,D,Math.round(Math.abs(D-A)/20));this.bindTweenNotifyer(this.twSc)}},jumpTo:function(A,B){var A=A||null,B=B||null;if(A!=null&&B!=null){this.stopTweens();this.setX(this.limitX(-A+Math.round(window.iMapW/2)));this.setY(this.limitY(-B+Math.round(window.iMapH/2)))}},bindTweenNotifyer:function(A){if(this.notifyer){var B=this.notifyer;var C=A.id;A.onMotionChanged=function(){B.notify(C,"tween")};A.onMotionFinished=function(){B.notify(C,"tween_end")}}},stopTweens:function(){if(this.twX){this.twX.stop()}if(this.twY){this.twY.stop()}if(this.twSc){this.twSc.stop()}},limitX:function(A){return A},limitY:function(A){return A},getPositionable:function(){return this.eVis},initPropWrapper:function(){this.wrap_iX=parseInt(this.eVis.style.left);this.wrap_iY=parseInt(this.eVis.style.top);this.wrap_iW=parseInt(this.eVis.style.width);this.wrap_iH=parseInt(this.eVis.style.height)},getX:function(){return this.wrap_iX},getY:function(){return this.wrap_iY},getWidth:function(){return this.wrap_iW},getHeight:function(){return this.wrap_iH},setX:function(B){var A=parseInt(B);this.wrap_iX=A;this.eVis.style.left=A+"px"},setY:function(B){var A=parseInt(B);this.wrap_iY=A;this.eVis.style.top=A+"px"},setWidth:function(B){var A=parseInt(B);this.wrap_iW=A;this.eVis.style.width=A+"px"},setHeight:function(B){var A=parseInt(B);this.wrap_iH=A;this.eVis.style.height=A+"px"}});var GenericMap=Class.create(Object.extend(new Positionable(),{init:function(B,A){this.eVis=B;this.initPropWrapper();if(A){DragNDrop.add(this)}},snap:function(A,B){return[A,B]}}));var DragNDrop={oDraggable:null,eDraggable:null,dragging:false,iLastX:null,iLastY:null,iLastMouseX:null,iLastMouseY:null,notifyer:null,zIndex:0,halfLife:false,init:function(A){this.notifyer=A;var B=this;window.document.observe("mousemove",function(C){if(B.dragging){B.halfLife=!B.halfLife;if(B.halfLife){var D=B.oDraggable.snap((B.iLastX+C.pointerX()-B.iLastMouseX),(B.iLastY+C.pointerY()-B.iLastMouseY));B.oDraggable.setX(D[0]);B.oDraggable.setY(D[1]);A.notify(B.notifyId,"drag")}Event.stop(C)}});window.document.observe("mouseup",function(){if(B.dragging){B.dragging=false;B.eDraggable.style.zIndex=B.zIndex}})},add:function(A){var B=A.getPositionable();var C=this;B.observe("mousedown",function(D){C.iLastX=parseInt(A.getX());C.iLastY=parseInt(A.getY());C.iLastMouseX=D.pointerX();C.iLastMouseY=D.pointerY();C.oDraggable=A;C.eDraggable=B;C.notifyer.notify(B.id,"drag_start");C.notifyId=B.id;C.zIndex=B.getStyle("z-index");C.dragging=true;B.style.zIndex=1000;Event.stop(D)})}};var CityMap=Class.create(Object.extend(new GenericMap(),{initialize:function(C,A){this.init(C,true);this.initGeometry(A);var B=this;this.snap=function(D,F){function E(I,G,H){if(I>H){return H}else{if(I<G){return G}else{return I}}}return[E(D,-(B.getWidth()-window.iMapW),0),E(F,-(B.getHeight()-window.iMapH),0)]};Event.observe(window,"resize",this.stopTweens.bindAsEventListener(this));Event.observe(window,"resize",this.onWindowResize.bindAsEventListener(this));this.setNotifyer(A.MapNotifyer)},initGeometry:function(A){this.iMapW=A.CityMap.iWidth;this.iMapH=A.CityMap.iHeight},limitX:function(A){if(A>0){return 0}var B=window.iMapW+A;if((-A+window.iMapW)>this.iMapW){return -this.iMapW+window.iMapW}return A},limitY:function(B){if(B>0){return 0}var A=window.iMapH+B;if((-B+window.iMapH)>this.iMapH){return -this.iMapH+window.iMapH}return B},getLimitsShifts:function(){return{iRight:this.iMapW-window.iMapW-Math.abs(this.getX()),iLeft:this.getX(),iTop:this.getY(),iBottom:this.iMapH-window.iMapH-Math.abs(this.getY())}},onWindowResize:function(){var A=Math.abs(this.getX());var D=Math.abs(this.getY());var C=window.iMapW+A;var B=window.iMapH+D;if(this.iMapW<C){this.setX(-(this.iMapW-window.iMapW))}if(this.iMapH<B){this.setY(-(this.iMapH-window.iMapH))}}}));var MiniMapGeneral=Class.create({initialize:function(B,A){this.eMap=B;this.oFrame=A},initGeometry:function(){this.width=parseInt(this.eMap.style.width);this.height=parseInt(this.eMap.style.height)},setX:function(A){this.oFrame.setX(A)},setY:function(A){this.oFrame.setY(A)},setWidth:function(A){this.oFrame.setWidth(A)},setHeight:function(A){this.oFrame.setHeight(A)},getX:function(){return this.oFrame.getX()},getY:function(){return this.oFrame.getY()},getPositionable:function(){return this.oFrame.getPositionable()},getWidth:function(){return this.oFrame.getWidth()},getHeight:function(){return this.oFrame.getHeight()}});var MiniMap=Class.create(Object.extend(new MiniMapGeneral(),{initialize:function(C,B,A){this.eMap=C;B.parentNode.style.display="block";this.oFrame=new MiniMapFrame(B,A);this.initGeometry();this.notifyer=A.MapNotifyer}}));var CentralMiniMap=Class.create(Object.extend(new MiniMapGeneral(),{initialize:function(C,B,A){this.eMap=C;C.style.display="block";this.oFrame=new Positionable(B);this.oFrame.initPropWrapper();this.initGeometry()}}));var MiniMapFrame=Class.create(Object.extend(new GenericMap(),{initialize:function(B,A){this.init(B,true);this.eParent=(this.getPositionable()).up();this.initGeometry(A);var C=this;this.snap=function(D,F){function E(I,G,H){if(I>H){return H}else{if(I<G){return G}else{return I}}}return[E(D,0,C.iParentW-C.getWidth()),E(F,0,C.iParentH-C.getHeight())]};this.notifyer=A.MapNotifyer;Event.observe(window,"resize",this.onWindowResize.bindAsEventListener(this));this.onWindowResize()},initGeometry:function(A){this.fCx=A.CityMap.fCx;this.fCy=A.CityMap.fCy;this.iWp=A.MiniMap.iWidth;this.iHp=A.MiniMap.iHeight;this.iParentW=this.eParent.getWidth();this.iParentH=this.eParent.getHeight()},onWindowResize:function(){this.iParentW=this.eParent.getWidth();this.iParentH=this.eParent.getHeight();var B=Math.round(parseFloat(window.iMapW)*this.fCx);var C=Math.round(parseFloat(window.iMapH)*this.fCy);var B=B>this.iWp?this.iWp:B;var C=C>this.iHp?this.iHp:C;this.setWidth(B);this.setHeight(C);var A=this.getX();var D=this.getY();this.setX(this.iWp>=(B+A)?A:this.iWp-B);this.setY(this.iHp>=(C+D)?D:this.iHp-C);this.notifyer.notify(this.getPositionable().id,"resize")}}));var FrameConnector=Class.create({initialize:function(A,B){this.eCanvas=$(A);this.sColor=B;this.isConnectors=false;if(this.eCanvas&&this.eCanvas.getContext){this.isConnectors=true;this.ctx=this.eCanvas.getContext("2d");this.ctx.lineWidth=1}},drawConnector:function(A,B){if(this.isConnectors){this.ctx.clearRect(0,0,500,500);this.ctx.strokeStyle=this.sColor;this.ctx.beginPath();this.ctx.moveTo(A.left,A.top);this.ctx.lineTo(B.left,B.top);this.ctx.closePath();this.ctx.stroke()}}});var RunArrowMapControl=Class.create({initialize:function(G,D,E,C,B,A){var F=this;$(G,D,E,C).each(function(H){F[H.id]=H;H.observe("click",function(){F["on"+H.id+"Click"]()});H.style.display="block"});this.oMap=B;this.sMapId=B.getMapId();this.sMiniMapId=this.oMap.getMiniMapId();this.notifyer=A.MapNotifyer;document.onkeydown=function(J){if(window.event){J=window.event}if(J.ctrlKey){var I=null;var H=null;switch(J.keyCode?J.keyCode:J.which?J.which:null){case 39:F.onMapArrowRClick();break;case 37:F.onMapArrowLClick();break;case 38:F.onMapArrowTClick();break;case 40:F.onMapArrowBClick();break;case 36:document.location=$("HomeLink").getAttribute("href");break}}};this.iScrollShiftPerc=A.CityMap.Tween.iScrollShiftPerc;new PeriodicalExecuter(this.checkEnabled.bindAsEventListener(this),1)},getScrollShift:function(A){return A=="horizontal"?Math.round(window.iMapW*this.iScrollShiftPerc/100):Math.round(window.iMapH*this.iScrollShiftPerc/100)},handleArrowClick:function(B,A){this.oMap.scrollBy(B,A)},onMapArrowRClick:function(){this.handleArrowClick(-this.getScrollShift("horizontal"),"horizontal")},onMapArrowLClick:function(){this.handleArrowClick(this.getScrollShift("horizontal"),"horizontal")},onMapArrowTClick:function(){this.handleArrowClick(this.getScrollShift("vertical"),"vertical")},onMapArrowBClick:function(){this.handleArrowClick(-this.getScrollShift("vertical"),"vertical")},checkEnabled:function(){var A=this.oMap.getLimitsShifts();this.MapArrowR[(Math.abs(A.iRight)<50)?"addClassName":"removeClassName"]("inactive");this.MapArrowL[(Math.abs(A.iLeft)<50)?"addClassName":"removeClassName"]("inactive");this.MapArrowT[(Math.abs(A.iTop)<50)?"addClassName":"removeClassName"]("inactive");this.MapArrowB[(Math.abs(A.iBottom)<50)?"addClassName":"removeClassName"]("inactive")}});var OnMapObjectsCollection=Class.create({initialize:function(){this.objs=new Hash()},add:function(A){if(A instanceof OnMapObject){this.objs.set(A.getId(),A)}},get:function(A){return this.objs.get(A)},enumerable:function(){return this.objs}});var RunOnMapObjects=Class.create({initialize:function(C,A){var D=C.length;(new OnMapObjectGeneral).setTotal(D);for(var B=0;B<D;B++){A.OnMapObjects.add(new OnMapObject(C[B],A))}}});var OnMapObjectGeneral=Class.create({_loaded:[0],_total:[0],setTotal:function(A){this._total[0]=parseInt(A)},incLoaded:function(){this.isLoaded=true;this._loaded[0]++},isLoadComplete:function(){return this._total[0]==this._loaded[0]},loaded:function(){return this._loaded[0]}});var OnMapObject=Class.create(Object.extend(new OnMapObjectGeneral(),{initialize:function(B,A){this.eVis=B;this.iW=this.eVis.getWidth();this.iH=this.eVis.getHeight();this.iX=Math.round(parseInt(this.eVis.style.left)+this.iW/2);this.iY=Math.round(parseInt(this.eVis.style.top)+this.iH/2);this.isLoaded=false;this.cfg=A},load:function(){var A=new Image();var B=this;A.onload=function(){B.eVis.style.backgroundImage="url("+A.src+")";var C=B.eVis.select("img.preview").first()||null;if(C){A.onload=function(){C.style.backgroundImage="url("+A.src+")";B.incLoaded();A=null;B.notify()};A.src=C.readAttribute("zh_back")}else{B.incLoaded();A=null;B.notify()}};A.src=this.eVis.readAttribute("zh_back")},notify:function(){if(this.isLoadComplete()){this.cfg.MapNotifyer.notify("OnMapObjects","load")}},getId:function(){return this.eVis.id},getCenterX:function(){return this.iX},getCenterY:function(){return this.iY}}));var RunClickMapControl=Class.create({initialize:function(C,B,A){this.oMap=B;this.aLinks=new Array();this.objs=A.OnMapObjects;for(var D=0,E=C.length;D<E;D++){C[D].onclick=function(){return false};this.aLinks.push(new MapClickButton(C[D],A.MapNotifyer))}A.MapNotifyer.add("GoToClickable","click",this,"onGoToClick")},onGoToClick:function(B){var A=this.objs.get(B.getAttribute("for"));this.oMap.scrollTo(A.getCenterX(),A.getCenterY())}});var MapClickButton=Class.create({initialize:function(B,A){this.eClickable=B;this.notifyer=A;Event.observe(this.eClickable,"click",this.onClickableClick.bindAsEventListener(this))},onClickableClick:function(){this.notifyer.notify(this.eClickable.getAttribute("for"),"click",this.eClickable);this.notifyer.notify("GoToClickable","click",this.eClickable)}});var RunMapCheckpoints=Class.create({initialize:function(C,B,A){this.oMap=B;this.aPoints=C;this.iLength=C.length;o=this;C.each(function(E,D){Event.observe(E,"click",o.onCeckpointClick.bindAsEventListener(o,D))})},onCeckpointClick:function(C,B){var A=this.aPoints[((++B)==this.iLength)?0:B]||null;if(A){this.oMap.jumpTo(parseInt(A.style.left),parseInt(A.style.top))}}});var RunMapObjectsLoader=Class.create({initialize:function(L,A,Q,P,D,O,K){this.eBase=L;this.sSelector1=A;this.sSelector2=Q;this.sSelector3=P;this.aOmobjs=(K.OnMapObjects.enumerable()).values();var N=O[0];var M=O[1];var E=parseFloat(M)/parseFloat(O[0]);var I=O[0]+window.iMapW/2;var C=O[1]+window.iMapH/2;var H=window.iMapH;var G=-E*parseFloat(window.iMapW);var J=0;var F=new OnMapObjectGeneral();this.aOmobjs.each(function(S){if(S.iX<I&&S.iY<C){var R=S.iY-E*parseFloat(S.iX);if(R<H&&R>G){S.load();J++}}});var B=this;new PeriodicalExecuter(function(R){if(F.loaded()==J){R.stop();B.loadPeriphery();D.scrollTo(O[0],O[1])}},0.3);K.MapNotifyer.add("OnMapObjects","load",this,"loadDecorObjects")},loadPeriphery:function(){this.aOmobjs.each(function(A){if(!A.isLoaded){A.load()}})},loadDecorObjects:function(){this.eBase.select(this.sSelector1).invoke("addClassName","show-place");this.eBase.select(this.sSelector2).invoke("addClassName","show-tree");this.eBase.select(this.sSelector3).invoke("addClassName","show-letter")}});var MapEventer=Class.create({initialize:function(){this.obs=[]},add:function(D,C,A,B){this.obs[D]=this.obs[D]||[];this.obs[D][C]=this.obs[D][C]||[];(this.obs[D][C]).push([A,B])},notify:function(C,B,D){var A=this.obs[C]&&this.obs[C][B]?this.obs[C][B]:null;if(A){A.each(function(E){E[0][E[1]](D)})}}});MapWindow={init:function(A){this.frame=A;this._update();Event.observe(window,"resize",this._update.bindAsEventListener(this))},_update:function(){var A=this.frame.getDimensions();window.iMapW=A.width;window.iMapH=A.height}};Math.easeInOutCubic=function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B+A}return D/2*((B-=2)*B*B+2)+A};