(function(e,h){var a=e.document;var d={};d.geId=function(i){return a.getElementById(i)};d.crEl=function(i){return a.createElement(i)};if(!d){var d={}}d.Mobile={modules:[],loadModule:function(j,k){if(this.modules[j]){k()}var i=d.crEl("script");i.onload=this.moduleLoaded.bind(this,j,k);i.src="modules/"+j+".js";a.body.appendChild(i)},moduleLoaded:function(i,j){this.modules[i]=true;j()}};var g=d.Mobile;d.Window={isMobile:function(){return/bada|android|blackberry|fennec|ip(hone|od|ad)|maemo|opera mob/i.test(navigator.userAgent||navigator.vendor||e.opera)},isBada:function(){return/bada/i.test(navigator.userAgent||navigator.vendor||e.opera)},isIOS:function(){return/ip(hone|od|ad)/i.test(navigator.userAgent||navigator.vendor||e.opera)},isSafari:function(){console.log(navigator.userAgent);console.log(navigator.vendor);console.log(e.opera);return/Safari/i.test(navigator.userAgent||navigator.vendor||e.opera)},isAndroid:function(){return/deviceAndroid/i.test(navigator.userAgent||navigator.vendor||e.opera)},isIe:function(){if(a.all){return true}},isChrome:function(){return navigator.userAgent.toLowerCase().indexOf("chrome")>-1},hasCSSTransforms:function(){return(d.Window.isChrome()||d.Window.isIOS())},getDpr:function(){if(this.isIe()||!this.isMobile()){return 1}if(/bada/i.test(navigator.userAgent||navigator.vendor||e.opera)){return e.outerWidth/e.innerWidth}if(e.devicePixelRatio){return e.devicePixelRatio}if(a.documentElement.clientWidth!=e.innerWidth){return Math.floor((e.innerWidth/a.documentElement.clientWidth)*100)/100}if(a.documentElement.clientWidth<480){return 1}return 1},getViewport:function(){if(this.isIe()){return{width:a.body.clientWidth,height:a.body.clientHeight}}var i=this.getDpr();if(e.opera){return{width:e.innerWidth,height:Math.ceil(e.outerHeight/i)}}if(/bada/i.test(navigator.userAgent||navigator.vendor)){return{width:e.innerWidth,height:e.innerHeight}}if(e.devicePixelRatio){return{width:e.innerWidth,height:e.innerHeight}}return{width:e.innerWidth/i,height:e.innerHeight/i}}};d.Touch={observedElements:[],events:{touchstart:"touchstart",touchend:"touchend",touchmove:"touchmove",tap:"tap",doubletap:"doubletap",alttap:"alttap",longtouch:"longtouch",mousedown:"touchstart",mouseup:"touchend",mousemove:"touchmove",click:"tap",doubleclick:"doubletap",rightclick:"alttap",longclick:"longtouch",dragstart:"touchstart",dragend:"touchend",dragmove:"touchmove",press:"tap",doublepress:"doubletap",altpress:"alttap",longpress:"longtouch"},LONG_TAP_TIME:1500,DOUBLE_TAP_TOLERANCE:10,DOUBLE_TAP_TIME:300,MAX_TAP_DISTANCE:10,touchable:/webos|bada|android|blackberry|fennec|ip(hone|od|ad)|maemo|opera mob/i.test(navigator.userAgent||navigator.vendor||e.opera),withinDistance:function(k,i,j){return Math.sqrt(Math.pow(k.x-i.x,2)+Math.pow(k.y-i.y,2))<=j},attachListener:function(l,j,m,i){var k=this.getElement(j);k.attachListener(l,m,i)},removeListener:function(k,i,l){var j=this.getElement(i);j.removeListener(k,l)},getElement:function(k){for(var j=0;j<this.observedElements.length;j++){if(this.observedElements[j].element==k){return this.observedElements[j]}}var l=new d.Touch.ObservedElement(k);this.observedElements.push(l);return this.observedElements[j]}};d.Touch.ObservedElement=function(j){this.element=j;this.preventDefault=false;this.listeners={};var i=function(k,m,l){this.x=k;this.y=m;this.t=l};this.startPoint=null;this.endPoint=null;this.lastPoint=null;this.moveTrail=[];this.longTouchListener=null;this.lastTapTime=0;this.lastTapLocation=null;this.start=function(l){if(this.preventDefault&&l.preventDefault){l.preventDefault()}var k=this.normalizeEvent(l);if(l.touches&&l.touches.length==2){this.startTouchDistance=g.Utilities.pixelDistance({x:l.touches[0].pageX,y:l.touches[0].pageY},{x:l.touches[1].pageX,y:l.touches[1].pageY})}this.trigger("touchstart",k,l);this.startPoint=new i(k.pageX,k.pageY,new Date().getTime());this.lastPoint=this.startPoint;this.longTouchListener=setTimeout(this.longTouch.bind(this,k),d.Touch.LONG_TAP_TIME)};this.move=function(o){if(this.preventDefault&&o.preventDefault){o.preventDefault()}var m=this.normalizeEvent(o);var r=(o.scale||1);if(r==1&&o.touches&&o.touches.length==2&&(e.opera||e.PalmSystem)){var q=g.Utilities.pixelDistance({x:o.touches[0].pageX,y:o.touches[0].pageY},{x:o.touches[1].pageX,y:o.touches[1].pageY});r=q/this.startTouchDistance}if(r){m.scale=r;if(o.touches&&o.touches.length>1){this.preventDouble=true;var k=0;var s=0;for(var l=0;l<o.touches.length;l++){k+=o.touches[l].pageX;s+=o.touches[l].pageY}m.centerX=k/o.touches.length;m.centerY=s/o.touches.length}}if(d.Window.isIe()){m.pageX=(m.clientX+a.documentElement.scrollLeft);m.pageY=(m.clientY+a.documentElement.scrollTop)}this.trigger("touchmove",m,o);var n=new i(m.pageX,m.pageY,new Date().getTime());this.lastPoint=n;this.moveTrail.push(n)};this.end=function(m){if(this.preventDefault&&m.preventDefault){m.preventDefault()}var l=this.normalizeEvent(m);this.trigger("touchend",l,m);this.endPoint=new i(l.pageX,l.pageY,new Date().getTime());if(this.preventDouble){setTimeout(function(){this.preventDouble=false}.bind(this),d.Touch.DOUBLE_TAP_TIME)}if(!this.preventDouble&&this.lastTapLocation&&(new Date().getTime())-this.lastTapTime<d.Touch.DOUBLE_TAP_TIME){this.lastTapLocation=this.startPoint;var k=g.Utilities.getObjectPosition(this.element);if(this.longTouchListener){clearInterval(this.longTouchListener);this.longTouchListener=null}this.trigger("doubletap",{layerX:this.startPoint.x-k.x,layerY:this.startPoint.y-k.y,pageX:this.startPoint.x-k.x,pageY:this.startPoint.y-k.y},m);return}if(this.longTouchListener){clearInterval(this.longTouchListener);this.longTouchListener=null;this.lastTapLocation=this.startPoint;this.lastTapTime=new Date().getTime();if(d.Touch.withinDistance(this.startPoint,this.lastPoint,3)){if(m.button&&m.button==2){this.trigger("alttap",l,m)}else{this.trigger("tap",l,m)}}return}};this.longTouch=function(l){if(d.Touch.withinDistance(this.startPoint,this.lastPoint,d.Touch.MAX_TAP_DISTANCE)){if(this.longTouchListener!=null){this.longTouchListener=null;var k=g.Utilities.getObjectPosition(this.element);var m={layerX:this.startPoint.x-k.x,layerY:this.startPoint.y-k.y,pageX:this.startPoint.x-k.x,pageY:this.startPoint.y-k.y};this.trigger("longTouch",m,l)}}else{this.longTouchListener=null}};this.normalizeEvent=function(k){var l=null;if(k.targetTouches&&k.targetTouches[0]){l=k.targetTouches[0]}else{l=k}if(d.Window.isIe()){k.pageX=(k.clientX+a.documentElement.scrollLeft);k.pageY=(k.clientY+a.documentElement.scrollTop)}return g.Utilities.extendObject({},l)};this.attachListener=function(l,m,k){if(!d.Touch.events[l.toLowerCase()]){throw ("Unknown event : "+l+". What are you trying to do? Think carefully!")}l=d.Touch.events[l.toLowerCase()].toLowerCase();if(!this.preventDefault){this.preventDefault=k}if(!this.listeners[l]){this.listeners[l]=[]}this.listeners[l].push({listener:m,preventDefault:k})};this.removeListener=function(l,m){if(!this.listeners[l]){return}for(var k=0;k<this.listeners[l].length;k++){if(this.listeners[l][k].listener==m){this.listeners[l].splice(k,1)}}};this.trigger=function(l,n,k){if(this.listeners[l]){for(var m=0;m<this.listeners[l].length;m++){this.listeners[l][m].listener(n,k)}}};this.attach=function(m,l,k){if(d.Window.isIe()){this.element.attachEvent("on"+m,l)}else{this.element.addEventListener(m,l,k)}};if(d.Touch.touchable){this.attach("touchstart",this.start.bind(this),false);this.attach("touchend",this.end.bind(this),false);this.attach("touchmove",this.move.bind(this),false)}else{this.attach("mousedown",this.start.bind(this),false);this.attach("mouseup",this.end.bind(this),false);this.attach("mousemove",this.move.bind(this),false)}};g.Map=function(i){this.options={mode:"html",id:null,zoom:3,center:new g.Position(37.689107,-122.427957),onReady:null,onError:null,easing:true,digitalZoom:true,layers:null,controls:null,doubleTapZoom:true,draggable:true,limitFps:true,maxFps:30,controlZ:1000,resizeable:true,maxZoom:19,minZoom:2,scrollWheelEnabled:true,bindToServerCallback:h,skipBindingToServer:false,skipResources:false,forceResourceSTAGRequest:false,boundaries:{top:87,bottom:-87,left:null,right:null},avoidEvents:false};this.options=g.Utilities.extendObject(this.options,i);this.containerElement=d.geId(i.id);if(!this.options.id||!this.containerElement){g.Exception.raise("Map creation failed: no DOM id set in the options, or it is invalid")}if(this.options.mode=="canvas"){this.canvas=d.crEl("canvas")}else{this.canvas=d.crEl("div");this.canvas.style.overflow="hidden"}this.canvas.className="deCarta-Mobile-Map";this.canvas.style.position="absolute";this.containerElement.appendChild(this.canvas);this.topPosition=(this.options.boundaries.top)?new g.Position(this.options.boundaries.top,0):null;this.btmPosition=(this.options.boundaries.bottom)?new g.Position(this.options.boundaries.bottom,0):null;this.leftPosition=(this.options.boundaries.left)?new g.Position(0,this.options.boundaries.left):null;this.rightPosition=(this.options.boundaries.right)?new g.Position(0,this.options.boundaries.right):null;this.panVector={x:0,y:0,v:0};this.layers=[];this.controls=[];this.ofsX=this.ofsY=0;this.zoom=this.options.zoom;this.targetZoom=this.options.zoom;this.maxZoom=(typeof this.options.maxZoom!=="undefined")?this.options.maxZoom:20;this.minZoom=(typeof this.options.minZoom!=="undefined")?this.options.minZoom:2;this.zooming=false;this.dragging=false;this.easing=false;this.dragStartX=this.dragStartY=0;this.lastDragEvent=null;this.center=this.options.center;this.targetCenter=this.center.clone();this.console=d.geId("console");this.tileGrid=new g.TileGrid();this.rendering=false;this.debugInfo={renderings:0,totalRenderTime:0,skippedRenders:0,moveEvents:0};this.createListenProps();this.ready=false;g.EventManager.listen("tileLoad",function(k){this.render(true)}.bind(this));var j=null;if(d.Window.getDpr()>=1.3){if(g.Configuration.baseHiResImagePack){j=g.Configuration.baseHiResImagePack}}else{if(g.Configuration.baseImagePack){j=g.Configuration.baseImagePack}}if(!this.options.skipResources){if(j){g.ImagePack.load(g.Configuration.resourceBase+j,this.imagePackLoaded.bind(this),this.options.forceResourceSTAGRequest)}}else{this.imagePackLoaded()}if(this.options.skipBindingToServer){setTimeout(function(){this.init()}.bind(this),1)}else{g.JSRequest.init(function(k){if(k.success){this.init()}else{if(this.options.onError){this.options.onError(k.msg)}if(!typeof this.options.bindToServerCallback==="function"){g.Exception.raise(k.msg)}}if(typeof this.options.bindToServerCallback==="function"){this.options.bindToServerCallback(k)}}.bind(this))}};g.Map.prototype={createListenProps:function(){var i=g.EventManager.eventNames;for(var j in i){if(this[j]){j="on"+j}this[j]=function(l,m){var k=g.EventManager.listen(l,m);return function(){g.EventManager.stopListeningByIdx(l,k)}}.bind(this,j)}},imagePackLoaded:function(){if(this.ready){this.doneControls()}else{setTimeout(this.imagePackLoaded.bind(this),100)}},doneControls:function(){if(this.options.controls){for(var j=0;j<this.options.controls.length;j++){this.addControl(this.options.controls[j],true)}}this.drawControls();this.resize();if(typeof this.options.onImagesLoaded==="function"){this.options.onImagesLoaded()}},resize:function(){var j=0;if(this.options.mode=="canvas"){this.width=this.canvas.width=parseFloat(this.containerElement.style.width);this.height=this.canvas.height=parseFloat(this.containerElement.style.height)}else{this.width=parseFloat(this.containerElement.style.width);this.height=parseFloat(this.containerElement.style.height);if(!this.width||!this.height){this.width=parseFloat(this.containerElement.clientWidth);this.height=parseFloat(this.containerElement.clientHeight)}this.canvas.style.width=this.width+"px";this.canvas.style.height=this.height+"px"}this.tileGrid.resize(this.width,this.height);for(j=0;j<this.layers.length;j++){this.layers[j].resize(this.width,this.height)}for(j=0;j<this.controls.length;j++){this.controls[j].position()}g.EventManager.trigger("resize",{map:this,zoom:this.zoom,center:this.center,size:{width:this.width,height:this.height}});this.render()},getHighestZ:function(){var j=0;try{for(var k=0;k<this.layers.length;k++){if(this.layers[k].options.zIndex){if(this.layers[k].options.zIndex>j){j=this.layers[k].options.zIndex}}}}catch(l){}return g.Configuration.baseOvlZ+j},init:function(){var j=0;this.baseZoom=this.zoom;this.lastTouchTime=0;if(!this.options.layers){this.addLayer(new g.MapLayer({name:"Map View",visible:true,tileStore:new g.StreetTileStore({precache:!d.Window.isMobile()})}))}else{for(j=0;j<this.options.layers.length;j++){this.addLayer(this.options.layers[j])}}if(!this.options.avoidEvents){d.Touch.attachListener("touchstart",this.canvas,this.touchStart.bind(this),true);d.Touch.attachListener("touchmove",this.canvas,this.touchMove.bind(this),true);d.Touch.attachListener("touchend",this.canvas,this.touchEnd.bind(this),true);d.Touch.attachListener("doubleTap",this.canvas,this.doubleTap.bind(this),true);d.Touch.attachListener("longTouch",this.canvas,this.longTouch.bind(this),true);d.Touch.attachListener("tap",this.canvas,this.tap.bind(this),true);d.Touch.attachListener("altTap",this.canvas,this.altTap.bind(this),true)}this.count=0;g.EventManager.trigger("zoomEnd",{map:this,zoom:this.zoom,targetZoom:this.targetZoom});this.resize();setTimeout(function(){if(!d.Window.isMobile()&&this.options.scrollWheelEnabled){new g.ZoomFramer(this)}this._ready()}.bind(this),1)},addLayer:function(i){if(!i.render||!i.resize){g.Exception.raise('The layer you are trying to add does not support required methods "render" or "resize".')}i.setOwner({owner:this,canvas:this.canvas});this.layers.push(i);return i},removeLayer:function(k){for(var j=0;j<this.layers.length;j++){if(this.layers[j]==k){this.layers.splice(j,1);return true}}return false},addOverlay:function(i){return this.addLayer(i)},removeOverlay:function(i){return this.removeLayer(i)},setDraggable:function(i){this.options.draggable=i},render:function(k){var m;if(k&&this.animating()){return}this.rendering=true;try{if(this.options.limitFps){var l=1000/this.options.maxFps;if(!this.animating()){m=(new Date().getTime()-this.lastRender);if(this.renderTimeout){this.debugInfo.skippedRenders++;clearTimeout(this.renderTimeout)}if(m<l){this.renderTimeout=setTimeout(this.render.bind(this),(l-m));this.rendering=false;return}}else{if(this.renderTimeout){clearTimeout(this.renderTimeout)}}}this.debugInfo.renderings++;this.checkBounds();this.lastRender=new Date().getTime();this.tileGrid.prepare(this.center,this.zoom);for(var j=0;j<this.layers.length;j++){this.layers[j].render(this.tileGrid)}m=(new Date().getTime()-this.lastRender);this.debugInfo.minFrameTime=l;this.debugInfo.totalRenderTime+=m;this.debugInfo.avgRenderTime=(this.debugInfo.totalRenderTime/this.debugInfo.renderings)+" msec";this.debugInfo.animating=this.animating()}catch(n){this.debugInfo.renderError=n.toString()}},setBoundary:function(i){this.boundary=i},checkBounds:function(){if(!this.leftPosition||!this.rightPosition||!this.btmPosition||!this.topPosition){return}if(this.boundary){if(!this.boundary.checkPosition(this.center)){var j=this.boundary.getClosestPosition(this.center);var o=new g.Position(j.getLat(),j.getLon());this.center=o}}else{var l=(this.leftPosition)?this.leftPosition.getX(this.zoom):null;var t=(this.rightPosition)?this.rightPosition.getX(this.zoom):null;var k=(this.btmPosition)?this.btmPosition.getY(this.zoom):null;var r=(this.topPosition)?this.topPosition.getY(this.zoom):null;if(this.options.boundaries.top){var u=r-(this.height/2);var m=this.center.getY(this.zoom);if(m>u){m=u}this.center.setXY(this.center.getX(this.zoom),m,this.zoom)}if(this.options.boundaries.bottom){var s=k+(this.height/2);var m=this.center.getY(this.zoom);if(m<s){m=s}this.center.setXY(this.center.getX(this.zoom),m,this.zoom)}if(this.options.boundaries.left){var q=l+(this.width/2);var n=this.center.getX(this.zoom);if(n<q){n=q}this.center.setXY(n,this.center.getY(this.zoom),this.zoom)}if(this.options.boundaries.right){var w=t-(this.width/2);var n=this.center.getX(this.zoom);if(n>w){n=w}this.center.setXY(n,this.center.getY(this.zoom),this.zoom)}if(this.options.boundaries.top&&this.options.boundaries.bottom){var v=Math.abs(k-r);if(v<this.height){var m=(k+r)/2;this.center.setXY(this.center.getX(this.zoom),m,this.zoom)}}if(this.options.boundaries.left&&this.options.boundaries.right){var i=Math.abs(t-l);if(i<this.width){var n=(t+l)/2;this.center.setXY(n,this.center.getY(this.zoom),this.zoom)}}}},drawConsole:function(){if(!this.console){return}var i="";for(var j in this.debugInfo){i+=j+" : "+this.debugInfo[j]+" <br />"}this.console.innerHTML=i},altTap:function(k){var i=this.positionFromXY(k.layerX,k.layerY);var j={position:i,center:this.center,zoom:this.zoom,map:this,originalEvent:k};g.EventManager.trigger("rightclick",j)},tap:function(k){var i=this.positionFromXY(k.layerX,k.layerY);var j={position:i,center:this.center,zoom:this.zoom,map:this,originalEvent:k};g.EventManager.trigger("click",j)},doubleTap:function(k){if(!this.options.doubleTapZoom){return}var i=this.positionFromXY(k.layerX,k.layerY);var j={position:i,center:this.center,zoom:this.zoom,map:this,originalEvent:k};g.EventManager.trigger("doubletap",j);this.zoomIn(1,i);this.render()},longTouch:function(i){var j=this.positionFromXY(i.layerX,i.layerY);g.EventManager.trigger("longtouch",{position:j,center:this.center,zoom:this.zoom,map:this,originalEvent:i})},touchStart:function(i,k){if(!this.options.draggable){return}var j=this.positionFromXY(i.layerX,i.layerY);this.dragging=true;this.panVector.v=0;this.lastMoveX=i.pageX;this.lastMoveY=i.pageY;g.EventManager.trigger("movestart",{position:j,center:this.center,zoom:this.zoom,map:this,originalEvent:i});if(k.preventDefault){k.preventDefault()}return false},touchEnd:function(i,j){this.dragging=false;if(this.startZoom==this.zoom||!this.startZoom){this._ease()}this.startZoom=null;if(j.preventDefault){j.preventDefault()}return false},touchMove:function(n,q){if(!this.dragging||!this.options.draggable){return false}this.debugInfo.tScale=n.scale;if(n.scale&&n.scale!=1){if(!this.startZoom){this.startZoom=this.zoom}var r=this.zoom;var i=this.startZoom+((Math.log(n.scale))/(Math.log(2)));var o=this.positionFromXY(n.centerX,n.centerY);this.zoom=i;this.center=g.Utilities.getCenterToFixPositionAtNewZoom(o,this.center,r,this.zoom);g.EventManager.trigger("zoomChange",{position:o,map:this,zoom:this.zoom,targetZoom:this.zoom,originalEvent:n})}else{var m=n.pageX-this.lastMoveX;var k=n.pageY-this.lastMoveY;this.lastMoveX=n.pageX;this.lastMoveY=n.pageY;var l=this.center.getX(this.zoom);var j=this.center.getY(this.zoom);this.center.setXY(l-m,j+k,this.zoom);this.panVector.x=m;this.panVector.y=k;this.panVector.v=1;g.EventManager.trigger("move",{position:this.center,center:this.center,zoom:this.zoom,map:this,originalEvent:n})}this.debugInfo.moveEvents++;this.render();if(q.preventDefault){q.preventDefault()}return false},zoomTo:function(k,j,i){if(k==this.zoom){return}if(Math.abs(k-this.zoom)<4&&!i){this.targetZoom=k;if(!j){j=this.center}this._xzoom(this.targetZoom>this.zoom,j)}else{this.zoom=k;this.targetZoom=k;g.EventManager.trigger("zoomEnd",{position:j,map:this,zoom:this.zoom,targetZoom:this.targetZoom});this.render()}},centerOn:function(j,i){if(!i){i={animated:true,duration:500}}if(!i.duration){i.duration=500}if(!i.onDraw){i.onDraw=null}if(i.animated){this.targetCenter=new g.Position(j.getLat(),j.getLon());this.targetCenterTime=new Date().getTime()+i.duration;this._pan(i.onDraw)}else{delete this.center;this.center=new g.Position(j.getLat(),j.getLon());this.center.quantize(this.zoom);this.render();g.EventManager.trigger("moveend",{center:this.center,zoom:this.zoom,map:this})}},pan:function(i,j){var l=this.center.getPixelPoint(this.zoom);switch(i){case"north":if(!j){var j=this.height/2}l.y+=j;break;case"east":if(!j){var j=this.width/2}l.x+=j;break;case"south":if(!j){var j=this.height/2}l.y-=j;break;case"west":if(!j){var j=this.width/2}l.x-=j;break}var k=new g.Position(0,0);k.setXY(l.x,l.y,this.zoom);this.centerOn(k,{animated:true,duration:200})},zoomIn:function(k,j){if(this.zoom==this.maxZoom){return}var i=false;if(!k){k=1;i=true}if(!j){j=this.center}if(this.zooming){return}this.zooming=true;this.targetZoom=this.zoom+k;if(i){this.targetZoom=Math.round(this.targetZoom)}if(this.targetZoom>this.maxZoom){this.targetZoom=this.maxZoom}this._xzoom(true,j)},zoomOut:function(k,j){if(this.zoom==this.minZoom){return}var i=false;if(!k){k=1;i=true}if(!j){j=this.center}if(this.zooming){return}this.zooming=true;this.targetZoom=this.zoom-k;if(i){this.targetZoom=Math.round(this.targetZoom)}if(this.targetZoom<this.minZoom){this.targetZoom=this.minZoom}this._xzoom(false,j)},_xzoom:function(o,m){g.EventManager.trigger("zoomStart",{map:this,zoom:this.zoom,targetZoom:this.targetZoom});if(!this.options.digitalZoom){this.zoom=this.targetZoom;g.EventManager.trigger("zoomEnd",{map:this,zoom:this.zoom,targetZoom:this.targetZoom});this.zooming=false;this.render();return}var n=300;var l=new Date().getTime();var q=this.zoom;var i=this.center;var r=this.zoom;var k=d.Easing("cubicinout");var j=function(){var s=new Date().getTime();if(s>=l+n){r=this.zoom;this.zoom=this.targetZoom;this.center=g.Utilities.getCenterToFixPositionAtNewZoom(m,i,q,this.zoom);g.EventManager.trigger("zoomEnd",{map:this,zoom:this.zoom,targetZoom:this.targetZoom});this.render();this.zooming=false}else{r=this.zoom;this.zoom=k(s-l,q,this.targetZoom-q,n);g.EventManager.trigger("zoomChange",{map:this,zoom:this.zoom,targetZoom:this.targetZoom});this.center=g.Utilities.getCenterToFixPositionAtNewZoom(m,this.center,r,this.zoom);this.render();requestAnimFrame(j)}}.bind(this);j()},_ease:function(){if(!this.options.easing){g.EventManager.trigger("moveend",{center:this.center,zoom:this.zoom,map:this});return}this.easing=true;var k=33;var i=1000/k;var j=0.9;var l=function(){if(this.dragging){return}this.panVector.v*=j;var n=this.panVector.x*this.panVector.v;var m=this.panVector.y*this.panVector.v;var q=this.center.getX(this.zoom);var o=this.center.getY(this.zoom);this.center.setXY(Math.round(q-n),Math.round(o+m),this.zoom);g.EventManager.trigger("move",{center:this.center,zoom:this.zoom,map:this});this.render();if(this.panVector.v>0.05){requestAnimFrame(l,null,i)}else{g.EventManager.trigger("moveend",{center:this.center,zoom:this.zoom,map:this});this.easing=false}}.bind(this);l()},_pan:function(n){var l=this.center.getX(this.zoom);var k=this.center.getY(this.zoom);var r=this.targetCenter.getX(this.zoom);var q=this.targetCenter.getY(this.zoom);var m=this.targetCenterTime-new Date().getTime();var o=Math.floor(m/(1000/20));if(o>0){var j=(r-l)/o;var i=(q-k)/o;var t=l+j;var s=k+i;this.center.setXY(t,s,this.zoom);if(n){n(this.center)}this.render();requestAnimFrame(function(){this._pan(n)}.bind(this),null,1000/20)}else{this.center.setXY(r,q,this.zoom);this.render()}},_ready:function(){this.ready=true;if(typeof this.options.onReady==="function"){this.options.onReady(this)}},animating:function(){return(this.easing||this.zooming)},getZoom:function(){return this.zoom},getCenter:function(){return this.center},getRadius:function(){var k=new g.Position(0,0);var i=this.center.getX(this.zoom)-(this.width/2);var l=this.center.getY(this.zoom)-(this.height/2);k.setXY(i,l,this.zoom);var j=g.Utilities.getPointDistance(this.center,k);return new g.Radius(j,"KM")},positionFromXY:function(i,o){var n=this.center.getX(this.zoom);var m=this.center.getY(this.zoom);var k=new g.Position(0,0);var l=(i-(this.width/2));var j=(o-(this.height/2));k.setXY(n+l,m-j,this.zoom);return k},getVisibleRect:function(){var k=new g.Position(0,0);var i=this.center.getX(this.zoom)-(this.width/2);var n=this.center.getY(this.zoom)-(this.height/2);k.setXY(i,n,this.zoom);var j=new g.Position(0,0);var i=this.center.getX(this.zoom)+(this.width/2);var n=this.center.getY(this.zoom)-(this.height/2);j.setXY(i,n,this.zoom);var m=new g.Position(0,0);var i=this.center.getX(this.zoom)-(this.width/2);var n=this.center.getY(this.zoom)+(this.height/2);m.setXY(i,n,this.zoom);var l=new g.Position(0,0);var i=this.center.getX(this.zoom)+(this.width/2);var n=this.center.getY(this.zoom)+(this.height/2);l.setXY(i,n,this.zoom);return[m,l,j,k]},addControl:function(i,j){i.setOwner(this);this.controls.push(i);if(!j){this.drawControls()}},drawControls:function(){for(var j=0;j<this.controls.length;j++){this.controls[j].setZ(this.options.controlZ);this.controls[j].render(this.containerElement)}},setTileSize:function(i){g.Constants.TILE_SIZE=i},suspendResizing:function(){this._wasResizeable=this.options.resizeable;this.options.resizeable=false},resumeResizing:function(){if(typeof this._wasResizeable==="undefined"){return}this.options.resizeable=this._wasResizeable},isResizeable:function(){return this.options.resizeable},toJSON:function(){var i={center:this.center,zoom:this.zoom};return JSON.stringify(i)}};g.MapLayer=function c(i){this.options={canvas:null,owner:null,name:"Unnamed Layer",visible:true,tileStore:new g.StreetTileStore()};this.options=g.Utilities.extendObject(this.options,i);this.ready=false};g.MapLayer.prototype={_initialize:function(){if(!this.options.canvas||!this.options.owner){g.Exception.raise("MapLayer requires a canvas and an owner for instantiation.")}this.owner=this.options.owner;this.canvas=this.options.canvas;this.name=this.options.name;this.visible=this.options.visible;this.options.tileStore.setOwner(this.owner);this.options.tileStore.startPrecaching();if(this.canvas.nodeName=="CANVAS"){this.renderer=new g.CanvasRenderer(this.canvas)}else{if(g.Configuration.useHardwareAcceleration&&d.Window.hasCSSTransforms()){this.renderer=new g.CSS3Renderer(this.canvas)}else{this.renderer=new g.HTMLRenderer(this.canvas)}}this.resize();this.tileStore=this.options.tileStore;this.ready=true},render:function(r){if(!this.visible){return}var n=[];var j={};var i=r.getGrid();var k=i.tiles;for(var o=0;o<k.length;o++){var l=k[o];var q=this.tileStore.getTile(l.E,l.N,l.Z);if(!j[q.name]){var m={img:q.img,x:l.dX+(q.ofsX*l.size),y:l.dY+(q.ofsY*l.size),size:l.size*q.scale};if(!(m.x>=this.width||m.y>=this.height||m.x+m.size<0||m.y+m.size<0)){n.push(m)}j[q.name]=true}}this.tileStore.purgeLoadRequests(i.centerTile,i.zoom,Math.max(i.width,i.height));n.sort(function(t,s){return s.size-t.size});this.renderer.render(n)},setOwner:function(i){this.options.owner=i.owner;this.options.canvas=i.canvas;this._initialize()},resize:function(j,i){this.width=j;this.height=i;this.renderer.resize(j,i)},show:function(){this.visible=true;this.renderer.show()},hide:function(){this.visible=false;this.renderer.hide()},toJSON:function(){var i={name:this.options.name,visible:this.options.visible,tileStore:this.options.tileStore};return i}};g.MapOverlay=function(i){this.options={canvas:null,owner:null,name:"Unnamed Layer",visible:true,zIndex:0,clustering:false,onClusterClick:function(j){}};this.options=g.Utilities.extendObject(this.options,i)};g.MapOverlay.prototype={_initialize:function(){if(!this.options.canvas||!this.options.owner){g.Exception.raise("MapOverlay requires a canvas and an owner for instantiation.")}this.owner=this.options.owner;this.canvas=this.options.canvas;this.name=this.options.name;this.objects={};this.pins=[];this.shapes=[];this.images=[];this.videos=[];this.sounds=[];this.clusters=[];this.visiblePins={};this.visibleShapes={};this.visible=this.options.visible;this.domElement=d.crEl("div");this.domElement.id="deCarta-Mob-Ovl-"+Math.floor(Math.random()*10000);this.domElement.style.position="absolute";this.domElement.style.top=0;this.domElement.style.left=0;this.canvas.appendChild(this.domElement);this.width=this.owner.width;this.height=this.owner.height;this.baseHandle=0;this.lastFullZoom=this.currentZoom=this.owner.zoom;g.EventManager.listen("zoomEnd",this._setZoom.bind(this));g.EventManager.listen("zoomChange",this._setZoom.bind(this));g.EventManager.listen("zoomStart",this._setZoom.bind(this))},addObject:function(i){var j=i.type;i.setZIndex(g.Configuration.baseOvlZ+this.options.zIndex);var k=this._genHandle();i.handle=k;this.objects[k]=i;switch(j.toLowerCase()){case"pin":this.indexObject(this.pins,i,k);break;case"image":case"shape":this.shapes.push(i);break;default:throw ("Adding "+j+' to overlay is not yet supported. Also depending on what "'+j+'" is, it might never be');break}i.registerOwner(this);return k},indexObject:function(m,i,l){var q=g.Utilities.normalizeZoom(this.currentZoom);if(!m[q]){m[q]={}}if(this.options.clustering){var o=false;for(var k=0;k<this.clusters.length;k++){if(this.clusters[k].addPin(i)){o=true;break}}if(!o){var r=new g.ClusteredPin({onClick:this.options.onClusterClick,zoom:g.Utilities.normalizeZoom(this.currentZoom)});r.addPin(i);this.clusters.push(r);var n=r.getPosition().getTileAtZoom(q);var s=g.Utilities.getTileKey(n.E,n.N,this.currentZoom);if(!m[q][s]){m[q][s]=[]}var l=this._genHandle();r.handle=l;this.objects[l]=r;m[q][s].push(l);r.registerOwner(this)}}else{var n=i.getPosition().getTileAtZoom(q);var s=g.Utilities.getTileKey(n.E,n.N,this.currentZoom);if(!m[q][s]){m[q][s]=[]}m[q][s].push(l);i.registerOwner(this)}},refreshObjects:function(){this._deleteClusters();this.pins=[];for(var j in this.objects){var i=this.objects[j];if(i.type=="pin"){this.indexObject(this.pins,i,j)}}},removeObjectHandle:function(i){if(this.objects[i]){delete this.objects[i]}},removeObject:function(j,i){this.removeObjectHandle(j.handle);try{if(!i){this.refreshObjects()}}catch(k){}},show:function(){this.visible=true;this.domElement.style.display="block"},hide:function(){this.visible=false;this.domElement.style.display="none"},render:function(n){if(!this.visible){return}var l=n.getGrid();var j=l.tiles;var i=l.position.getX(this.currentZoom);var o=l.position.getY(this.currentZoom);var m=i-l.x;var k=o+l.y;this.renderShapes(m,k,j);this.renderPins(m,k,j)},renderShapes:function(l,j,w){var r={};for(var n=0;n<this.shapes.length;n++){try{var m=this.shapes[n];var u=m.getPosition();var v=u.getX(this.currentZoom)-l;var t=j-u.getY(this.currentZoom);var k=this.shapes[n].render(v,t,this.currentZoom,w);if(k){if(!k.parentNode){this.visibleShapes[k.id]=k;r[k.id]=true;this.domElement.appendChild(k)}else{r[k.id]=true}}}catch(q){console.log("Error rendering shape : ",m,q)}}for(var s in this.visibleShapes){if(!r[s]){var o=this.visibleShapes[s];o.parentNode.removeChild(o);this.visibleShapes[s]=null;delete this.visibleShapes[s]}}},renderPins:function(n,m,s){var q={};var k=[];for(var o=0;o<s.length;o++){var r=g.Utilities.getTileKey(s[o].E,s[o].N,s[o].Z);k=k.concat(this.renderTilePins(r,n,m))}k.sort(function(t,i){return(parseFloat(t.style.top)-parseFloat(i.style.top))});for(o=0;o<k.length;o++){if(!k[o].parentNode){this.visiblePins[k[o].id]=k[o];q[k[o].id]=true;this.domElement.appendChild(k[o])}else{q[k[o].id]=true}}for(var l in this.visiblePins){if(!q[l]){var j=this.visiblePins[l];j.parentNode.removeChild(j);this.visiblePins[l]=null;delete this.visiblePins[l]}}},renderTilePins:function(w,n,k){var r=0;var m=g.Utilities.normalizeZoom(this.currentZoom);var j=[];var q=0;if(this.pins[m]){if(this.pins[m][w]){for(q=0;q<this.pins[m][w].length;q++){var s=this.pins[m][w][q];var o=this.objects[s];var u=o.getPosition();var v=u.getX(this.currentZoom)-n;var t=k-u.getY(this.currentZoom);var A=o.getSize();if(v>this.owner.width||t>this.owner.height||v+A.width<0||t+A.height<0){}else{var l=o.render(v,t);j.push(l);r++}}}}return j},resize:function(j,i){this.width=j;this.height=i;this.domElement.style.width=j+"px";this.domElement.style.height=i+"px"},setOwner:function(i){this.options.owner=i.owner;this.options.canvas=i.canvas;this._initialize()},clear:function(){this._clear()},_clear:function(){this.objects={};this.pins=[];this.shapes=[];this.images=[];this.videos=[];this.sounds=[];this.clusters=[]},_genHandle:function(){return"dcO_"+this.name.replace(" ","_")+"_"+(this.baseHandle++).toString(16)},_deleteClusters:function(){for(var j=0;j<this.clusters.length;j++){this.objects[this.clusters[j].handle]=null;delete this.objects[this.clusters[j].handle]}this.clusters=[]},_setZoom:function(k){if(k.map!=this.owner){return}this.currentZoom=k.zoom;var l=g.Utilities.normalizeZoom(k.zoom);if(this.lastFullZoom!=l){this.refreshObjects();this.lastFullZoom=l}for(var j=0;j<this.shapes.length;j++){this.shapes[j].setZoom(k.zoom)}},toJSON:function(){var i={};return i}};g.MapBoundary=function(){this.edges=[];this.Edge=function(j,i){this.lat=j;this.lon=i;this.scale=1.1703344634137277e-8;this.pos2point=function(k){return{x:g.Utilities.lon2pix(k.getLon(),this.scale),y:g.Utilities.lat2pix(k.getLat(),this.scale)}};this.a=this.pos2point(j);this.b=this.pos2point(i);this.rayIntersect=function(q){var q=this.pos2point(q);var n=this.a;var l=this.b;var o=9.9999999999911e+29;if(n.y>l.y){n=this.b;l=this.a}if(q.y==n.y||q.y==l.y){q.y+=1e-7}if(q.y<n.y||q.y>l.y){return 0}if(q.x>Math.max(n.x,l.x)){return 0}if(q.x<Math.min(n.x,l.x)){return 1}if(n.x!=l.x){var m=(l.y-n.y)/(l.x-n.x)}else{var m=o}if(n.x!=q.x){var k=(q.y-n.y)/(q.x-n.x)}else{var k=o}return(k>=m)?1:0};this.pointDistance=function(A){var A=this.pos2point(A);var D=this.a.x;var m=this.a.y;var B=this.b.x;var k=this.b.y;var v=A.x;var t=A.y;var F=Math.abs((((m-k)*v)+((B-D)*t)+((D*k)-(B*m)))/Math.sqrt(Math.pow(B-D,2)+Math.pow(k-m,2)));var u=(k-m)/(B-D);if(u>1e+26){u=1e+26}if(u==0){u=1e-18}var s=-(1/u);var H=(k-u*B);var G=t-(s*v);var o=(G-H)/(u-s);var n=(s*o)+G;var q=Math.min(m,k);var C=Math.max(m,k);var r=Math.min(D,B);var E=Math.max(D,B);if(q<=n&&n<=C&&r<=o&&o<=E){}else{var l=Math.sqrt(Math.pow(v-D,2)+Math.pow(t-m,2));var w=Math.sqrt(Math.pow(v-B,2)+Math.pow(t-k,2));if(l<w){F=l;n=m;o=D}else{F=w;n=k;o=B}}var I=new g.Position(g.Utilities.pix2lat(n,this.scale),g.Utilities.pix2lon(o,this.scale));return{distance:F,position:I}}}};g.MapBoundary.prototype={fromPoly:function(i){this.setPositions(i.options.vertices)},setPositions:function(j){this.edges=[];if(j.length<3){throw ("I believe you need at least 3 vertices to define a polygon, and a MapBoundary happens to be a polygon.")}for(var k=0;k<j.length;k++){if(j[k+1]){this.edges.push(new this.Edge(j[k],j[k+1]))}else{this.edges.push(new this.Edge(j[k],j[0]))}}},checkPosition:function(j){var l=0;for(var k=0;k<this.edges.length;k++){var m=this.edges[k];l+=m.rayIntersect(j)}return(l%2==1)},getClosestPosition:function(j){var k=parseFloat("Infinity");var o=null;for(var m=0;m<this.edges.length;m++){var n=this.edges[m];var l=this.edges[m].pointDistance(j);if(l.distance<k){k=l.distance;o=l.position}}return o}};g.TileGrid=function(){this.tiles=[];this.zoom=0;this.width=this.height=0};g.TileGrid.prototype={prepare:function(i,B){this.zoom=B;var j=this.width;var w=this.height;var r=i.getX(B);var n=i.getY(B);var A=g.Utilities.tileSizeForZoom(B);var s=Math.floor(r/A);var k=Math.floor(n/A);this.centerTile={E:s,N:k,Z:B,lat:i.getLat(),lon:i.getLon()};var q=r%A;var m=n%A;this.xTiles=Math.floor((j+(2*A))/A);this.yTiles=Math.floor((w+(2*A))/A);var o=Math.ceil(((j/2)-q-A)/A);var l=Math.ceil(((w/2)+m-A)/A);this.gridX=((j/2)-q-A)-(A*o);this.gridY=((w/2)+m-A)-(A*l);this.tiles=[];for(var v=0;v<this.xTiles;v++){for(var u=0;u<this.yTiles;u++){var t={};t.size=A;t.E=s-(o-v);t.N=k+(l-u);t.Z=B;if(k<0){t.N+=1}if(s>=0){t.E-=1}t.dX=this.gridX+(A*v);t.dY=this.gridY+(A*u);if(u==0&&v==0){this.gridPosition=g.Utilities.getTilePosition(t.E,t.N,t.Z)}this.tiles.push(t)}}this.tiles.sort(function(y,x){var D=Math.sqrt(Math.pow(y.E-s,2)+Math.pow(y.N-k,2));var C=Math.sqrt(Math.pow(x.E-s,2)+Math.pow(x.N-k,2));return D-C});return},getGrid:function(){return{tiles:this.tiles,x:this.gridX,y:this.gridY,position:this.gridPosition,centerTile:this.centerTile,zoom:this.zoom,width:this.xTiles,height:this.yTiles}},resize:function(j,i){this.width=j;this.height=i}};g.EventManager={events:{zoomstart:[],zoomchange:[],zoomend:[],movestart:[],move:[],moveend:[],click:[],doubleclick:[],rightclick:[],resize:[],showpintext:[],hidepintext:[],tileload:[],longtouch:[]},eventNames:{zoomstart:"zoomstart",zoomchange:"zoomchange",zoomend:"zoomend",movestart:"movestart",move:"move",moveend:"moveend",click:"click",tap:"click",press:"click",doubleclick:"doubleclick",doubletap:"doubleclick",doublepress:"doubleclick",rightclick:"rightclick",alttap:"rightclick",rightpress:"rightclick",resize:"resize",showpintext:"showpintext",hidepintext:"hidepintext",tileload:"tileload",longtouch:"longtouch",longclick:"longtouch",longpress:"longtouch"},listen:function(k,l){k=this.eventNames[k.toLowerCase()];k=k.toLowerCase();if(this.events[k]){for(var j=0;j<this.events[k].length;j++){if(this.events[k][j]==null){this.events[k][j]=l;return j}}this.events[k].push(l);return this.events[k].length-1}else{throw ("Event "+k+" is not supported")}},trigger:function(k,l){k=this.eventNames[k.toLowerCase()];l.eventType=k;if(!this.events[k]){throw ('You are trying to trigger the event "'+k+'", but it does not exist.')}for(var j=0;j<this.events[k].length;j++){if(this.events[k][j]){this.events[k][j](l)}}},stopListeningByIdx:function(k,j){this.events[k][j]=null},stopListening:function(k,l){for(var j=0;j<this.events[k].length;j++){if(this.events[k][j]==l){this.events[k][j]=null;return}}}};g.Utilities={isArray:function(i){return Object.prototype.toString.call(i)==="[object Array]"},makeArrayFix:function(i){return g.Utilities.isArray(i)?i:[i]},lat2pix:function(k,i){var j=g.Utilities["lat2pix_"+g.Configuration.projection];if(!j){throw ("Bad projection in the config! This is extremely bad.")}return j(k,i)},lat2pix_EPSG3395:function(n,l){var k=2*Math.PI/(g.Utilities.tileSizeForZoom(l)*Math.pow(2,Math.floor(l)));var o=(parseFloat(n)*(2*Math.PI))/360;var j=0.08181919084262157;var i=Math.sin(o);var q=j*i;var m=Math.log(((1+i)/(1-i))*Math.pow((1-q)/(1+q),j))/2;return(m/k)},lat2pix_EPSG3857:function(j,i){return g.Utilities.forwardMercator(j,0,i).y},lat2pix_Spherical:function(j,i){return g.Utilities.forwardMercator(j,0,i).y},forwardMercator:function(l,m,k){var j=(g.Utilities.tileSizeForZoom(k)*Math.pow(2,Math.floor(k-1)));var i=m*j/180;var n=Math.log(Math.tan((90+l)*Math.PI/360))/(Math.PI/180);n=n*j/180;return{x:i,y:n}},inverseMercator:function(j,n,k){var i=(g.Utilities.tileSizeForZoom(k)*Math.pow(2,Math.floor(k-1)));var m=(j/i)*180;var l=(n/i)*180;l=180/Math.PI*(2*Math.atan(Math.exp(l*Math.PI/180))-Math.PI/2);return new g.Position(l,m)},lon2pix:function(k,j){var i=2*Math.PI/(g.Utilities.tileSizeForZoom(j)*Math.pow(2,Math.floor(j)));return((k/180)*Math.PI)/i},pix2lon:function(i,k){var j=2*Math.PI/(g.Utilities.tileSizeForZoom(k)*Math.pow(2,Math.floor(k)));return((i*j)*180/Math.PI)},pix2lat:function(k,i){var j=g.Utilities["pix2lat_"+g.Configuration.projection];if(!j){throw ("Bad projection in the config! This is extremely bad.")}return j(k,i)},pix2lat_EPSG3395:function(l,q){var o=2*Math.PI/(g.Utilities.tileSizeForZoom(q)*Math.pow(2,Math.floor(q)));var k=1e-7;var i=12;var r=Math.pow(Math.E,-l*o);var m=g.Utilities.mercatorUnproject(r);var j=g.Utilities.findRadPhi(m,r);var n=0;while(n<i&&Math.abs(m-j)>k){m=j;j=g.Utilities.findRadPhi(m,r);n++}return j*180/Math.PI},pix2lat_EPSG3857:function(j,i){return g.Utilities.inverseMercator(0,j,i).getLat()},pix2lat_Spherical:function(j,i){return g.Utilities.inverseMercator(0,j,i).getLat()},metersPerPixelAtZoom:function(i,l){var k=156543.04;var j=k*Math.cos(i.lat*(Math.PI/180))/(Math.pow(2,l));return j},mercatorUnproject:function(i){return(Math.PI/2)-2*Math.atan(i)},findRadPhi:function(k,j){var i=0.08181919084262157;var l=i*Math.sin(k);return(Math.PI/2)-(2*Math.atan(j*Math.pow((1-l)/(1+l),i/2)))},deCartaToGXZoomLevel:function(j){var i=Math.abs(21-parseInt(g.Utilities.normalizeZoom(j),10));return i},tileSizeForZoom:function(k,m){var j=d.Window.getDpr();if(!m){m=g.Constants.TILE_SIZE/j}var l=m;var i=k-Math.floor(k);if(i<0){return(l*(1+(1-Math.abs(i))))/2}else{return l*(1+i)}},getTilePosition:function(m,r,q){try{var k=g.Constants._ll_LUT[Math.floor(q)].split(",");var i=(m)*k[1];var o=g.Utilities.tileSizeForZoom(q)*(r+1);var l=g.Utilities.pix2lat(o,q);return new g.Position(l,i)}catch(j){console.log("GetTilePos",j)}},getPointDistance:function(u,t){var k=u.getLat();var j=t.getLat();var n=u.getLon();var m=t.getLon();var l=6378.137;var q=(j-k).toRad();var i=(m-n).toRad();var s=Math.sin(q/2)*Math.sin(q/2)+Math.cos(k.toRad())*Math.cos(j.toRad())*Math.sin(i/2)*Math.sin(i/2);var r=2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s));var o=l*r;return o},getAngle:function(k,j,i){var m=k.getX(21);var o=k.getY(21);var l=j.getX(21);var n=j.getY(21);var q=Math.atan2(n-o,l-m);if(i){return q}return((q*180/Math.PI)+360)%360},getCenterToFixPositionAtNewZoom:function(t,m,r,s){var i=new g.Position();var q=m.getX(r);var o=m.getY(r);var k=t.getX(r);var j=t.getY(r);var n=k-q;var l=j-o;i.setXY(t.getX(s)-n,t.getY(s)-l,s);return i},bestZoomForBB:function(i,s,l){for(var o=20;o>0;o--){var k=s.getX(o);var r=s.getY(o);var j=l.getX(o);var q=l.getY(o);var n=Math.abs(j-k);var m=Math.abs(q-r);if(n<=i.width&&m<=i.height){return o}}return o},getTileKey:function(i,k,j){return g.Utilities.normalizeZoom(j)+"_"+i+"_"+k},splitTileKey:function(j){var i=j.split("_");return{x:i[1],y:i[2],z:i[0]}},tripleToQuadKey:function(i,n,m){var k="";for(var j=(1<<(m-1));j>0;j=j>>1){var l=0;if((i&j)!=0){l+=1}if((n&j)!=0){l+=2}k+=l}return k},normalizeZoom:function(i){return Math.floor(i)},getRequestId:function(){return Math.floor(Math.random()*10000000)},urlParse:function(m){var s={};var q=m.split("#")[0].split("?");s.baseUrl=q[0];s.queryParameters={};var l={};try{var k=q[1].split("&");for(var n=0;n<k.length;n++){var j=k[n].split("=");l[j[0]]=j[1]}}catch(o){}s.queryParameters=l;try{q=s.baseUrl.split("://");s.proto=q[0];var r=q[1].split("/");s.host=r[0];r[0]="";s.path=r.join("/")}catch(o){s.proto="unknown"}return s},urlCompose:function(i){var m=i.baseUrl+"?";var l=true;var k=i.queryParameters;for(var j in k){if(!l){m+="&"}else{l=false}m+=j+"="+k[j]}return m},removeElementToReinsert:function(k){var i=k.parentNode;var l=k.nextSibling;i.removeChild(k);return function j(){if(l){i.insertBefore(k,l)}else{i.appendChild(k)}}},setOpacity:function(l,k){var j=(k/100);var i=l.style;i.opacity=j;i.MozOpacity=(k/100);i.KhtmlOpacity=(k/100);i.filter="alpha(opacity="+k+")";return true},extendObject:function(k,j){for(var i in j){if(typeof k[i]=="Array"||typeof k[i]=="Object"){k[i]=g.Utilities.extendObject(k[i],j[i])}k[i]=j[i]}return k},inherit:function(k,j){for(var i in j){if(!k[i]){if(typeof k[i]=="Array"||typeof k[i]=="Object"){k[i]=g.Utilities.inherit(k[i],j[i])}k[i]=j[i]}}return k},domPosition:function(j){var k=0;var i=0;if(j.offsetParent){do{k+=j.offsetLeft;i+=j.offsetTop}while(j=j.offsetParent)}return{top:i,left:k}},extendStyle:function(l,k){for(var i in k){try{l[i]=k[i]}catch(j){console.log(j)}}return l},fixEvent:function(j){var i=0;var k=0;if(!j){var j=e.event}if(j.pageX||j.pageY){i=j.pageX;k=j.pageY}else{if(j.clientX||j.clientY){j.pageX=i=j.clientX+a.body.scrollLeft+a.documentElement.scrollLeft;j.pageY=k=j.clientY+a.body.scrollTop+a.documentElement.scrollTop}}return j},getClassName:function(j){var l=j.constructor.toString();var k=l.indexOf("function ")+9;var i=l.indexOf("(");l=l.substring(k,i);return l},getObjectPosition:function(j){var k=j;var l=0;if(j.offsetParent){while(1){l+=j.offsetLeft;if(!j.offsetParent){break}j=j.offsetParent}}else{if(j.x){l+=j.x}}j=k;var i=0;if(j.offsetParent){while(1){i+=j.offsetTop;if(!j.offsetParent){break}j=j.offsetParent}}else{if(j.y){i+=j.y}}return{x:l,y:i}},domRemove:function(i){i.parentNode.removeChild(i)},pixelDistance:function(j,i){return Math.sqrt(Math.pow(j.x-i.x,2)+Math.pow(j.y-i.y,2))}};if(!Function.prototype.bind){Function.prototype.bind=function(k){var l=Array.prototype.slice;function n(s,o){var r=s.length,q=o.length;while(q--){s[r+q]=o[q]}return s}function m(q,o){q=l.call(q,0);return n(q,o)}if(arguments.length<2&&(typeof arguments[0]==="Undefined")){return this}var i=this,j=l.call(arguments,1);return function(){var o=m(j,arguments);return i.apply(k,o)}}}if(typeof(String.prototype.toRad)==="undefined"){Number.prototype.toRad=function(){return this*Math.PI/180}}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(j){var i=this.length>>>0;var k=Number(arguments[1])||0;k=(k<0)?Math.ceil(k):Math.floor(k);if(k<0){k+=i}for(;k<i;k++){if(k in this&&this[k]===j){return k}}return -1}}e.requestAnimFrame=(function(){return e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(k,i,j){if(!j){j=1000/60}e.setTimeout(k,j)}})();g.Configuration={clientName:null,clientPassword:null,url:"http://ws.decarta.com/openls/JSON",language:"EN",country:"US",projection:"EPSG3395",metric:false,vocalExceptions:true,baseOvlZ:100,streetTileHosts:["http://ws.decarta.com"],defaultConfig:"global-decarta",defaultHighResConfig:"global-decarta-hi-res",resourceBase:"resources/",baseImagePack:"StdResImages.js",baseHiResImagePack:"HiResImages.js",additionalImagePacks:{hiRes:[],loRes:[]},resourceTimeout:20000,requestTimeout:15000,digitalGlobeKey:"2hq3AwyaQsMahDA5vYh1iBTaCMlFojTxLtCuzcIT2Ip7dY5d04VLPJEZvSSQd8u9",digitalGlobeHosts:["http://www1.globexplorer.com","http://www2.globexplorer.com","http://www3.globexplorer.com"],useHardwareAcceleration:false,buildDate:"2012/01/12 10:35",version:"1.0.beta.287"};g.ZoomFramer=function(j,i){this.map=j;this.dom;this.scrollWheeling=false;this.options={stepsPerScroll:3,min:20,max:120};this.options=g.Utilities.extendObject(this.options,i);this.init()};g.ZoomFramer.prototype={init:function(){this.dom=d.crEl("div");this.map.containerElement.appendChild(this.dom);this.dom.style.zIndex=1000;this.dom.style.backgroundColor="#999";this.dom.style.border="2px solid #444";this.dom.style.borderRadius="100em";this.dom.style.display="block";this.dom.style.position="absolute";g.Utilities.setOpacity(this.dom,20);if(this.map.containerElement.addEventListener){this.map.containerElement.addEventListener("DOMMouseScroll",this.scrollWheel.bind(this),false)}this.map.containerElement.onmousewheel=this.scrollWheel.bind(this);this.map.zoomstart(function(m){if(!this.scrollWheeling){return}this.steps=0;var k=(m.zoom-m.targetZoom<0)?this.options.min:this.options.max;this.dom.style.height=k+"px";this.dom.style.width=k+"px";var j=parseFloat(this.dom.style.top);var i=parseFloat(this.dom.style.left);this.dom.style.top=j-(k/2)+"px";this.dom.style.left=i-(k/2)+"px";this.dom.style.display="block"}.bind(this));this.map.zoomchange(function(i){if(!this.scrollWheeling){return}this.steps++;var o=this.dom;var j=(i.zoom-i.targetZoom<0)?1.2:0.6;var n=parseFloat(o.style.height);var r=parseFloat(o.style.width);var s=parseFloat(o.style.top);var k=parseFloat(o.style.left);var q=n*j;var m=r*j;o.style.height=q+"px";o.style.width=m+"px";o.style.top=s+((n-q)/2)+"px";o.style.left=k+((r-m)/2)+"px"}.bind(this));this.map.zoomend(function(){this.scrollWheeling=false;this.dom.style.display="none"}.bind(this))},scrollWheel:function(l){this.scrollWheeling=true;l=l?l:e.event;var j=l.detail?l.detail:l.wheelDelta;var i=l.clientX-this.map.containerElement.offsetLeft;var m=l.clientY-this.map.containerElement.offsetTop;this.dom.style.top=m+"px";this.dom.style.left=i+"px";this.dom.style.height="0px";this.dom.style.width="0px";var k=this.map.positionFromXY(i,m);if(j>0){this.map.zoomIn(this.options.stepsPerScroll,k,true)}else{this.map.zoomOut(this.options.stepsPerScroll,k,true)}}};g.TilePrecacher=function(j,i){this.maxRequests=4;this.map=j;this.tileStore=i;this.grid=new g.TileGrid();this.init()};g.TilePrecacher.prototype={init:function(){this.precachePoll()},precachePoll:function(){var n=false;for(var o in this.tileStore.loadRequests){n=true;break}if(n){}else{var r=0;this.grid.resize(this.map.width,this.map.height);for(var q=1;q<21&&r<this.maxRequests;q+=5){this.grid.prepare(this.map.center,q);var l=this.grid.getGrid();for(var k=0;k<l.tiles.length;k++){var m=l.tiles[k];var j=g.Utilities.getTileKey(m.E,m.N,m.Z);if(!this.tileStore.availableTiles[j]){this.tileStore.getTile(m.E,m.N,m.Z);r++}}}}setTimeout(this.precachePoll.bind(this),500)}};g.TileStore=function(i){this.opts={baseConfig:"global-decarta",hiResConfig:null,precache:false};this.opts=g.Utilities.extendObject(this.opts,i);this.tileTimeout=10000;this.tileCacheSize=d.Window.isMobile()?100:500;this.availableTiles={};this.tileCount=0;this.keyStack=[];this.loadingTiles={};this.loadRequests={};this.blankTiles={};this.tileTimeouts=[];this.blankTile="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==";this.blankTileImg=new Image();this.blankTileImg.src=this.blankTile;g.EventManager.listen("zoomEnd",this.zoomEnd.bind(this))};g.TileStore.prototype={getKey:function(i,k,j){return g.Utilities.getTileKey(i,k,j)},getTile:function(i,n,m){m=Math.floor(m);var k=this.getKey(i,n,m);if(this.availableTiles[k]&&this.availableTiles[k].src){var j={};j.name=k;j.img=this.availableTiles[k];j.scale=1;j.ofsX=0;j.ofsY=0;return j}if(this.loadingTiles[k]){return this.getNextBestTile(i,n,m)}this.loadingTiles[k]=true;var l=new Image();l.key=k;l.store=this;l.timeout=setTimeout(this.purgeRequest.bind(this,k),this.tileTimeout);l.onload=function(r){clearTimeout(r.timeout);var q=new Date().getTime();r.loadTime=q;this.availableTiles[k]=r;this.keyStack.push(k);this.tileCount++;delete this.loadingTiles[k];delete this.loadRequests[k];this.removeBlankTile(k);r.onload=null;if(this.tileCount>this.tileCacheSize){var o=this.keyStack.shift(k);delete this.availableTiles[o];this.tileCount--}g.EventManager.trigger("tileLoad",r)}.bind(this,l);l.onerror=function(o){this.purgeRequest(this.key)}.bind(this);this.loadRequests[k]=l;l.src=this.getTileUrl(i,n,m);return this.getNextBestTile(i,n,m)},purgeLoadRequests:function(l,k,i){k=g.Utilities.normalizeZoom(k);for(var j in this.loadRequests){var m=g.Utilities.splitTileKey(j);if(m.z!=k){continue}var n=Math.floor(Math.sqrt(Math.pow(l.E-m.x,2)+Math.pow(l.N-m.y,2)));if(n>(i/2)+1){this.purgeRequest(j)}}},purgeRequest:function(i){if(this.loadRequests[i]){this.loadRequests[i].onload=null;this.loadRequests[i].src=null;delete this.loadRequests[i]}if(this.loadingTiles[i]){delete this.loadingTiles[i]}},zoomEnd:function(j){this.currentZoom=j.zoom;for(var i in this.loadRequests){var l=g.Utilities.splitTileKey(i);if(l.z!=this.currentZoom){if(!this.availableTiles[i]){this.purgeRequest(i)}}}},getTileUrl:function(){throw ("This is a base class. Extend it and override this method. ")},getNextBestTile:function(w,v,u){u=Math.round(u);for(var q=1;q<6;q++){var o=u-q;var t=w/Math.pow(2,q);var s=v/Math.pow(2,q);if(t<0){t=Math.floor(t)}else{t=Math.floor(t)}if(s<0){s=Math.floor(s)}else{s=Math.floor(s)}var r=t*Math.pow(2,q);var n=s*Math.pow(2,q);var k=r-w;var j=n-v;var A=this.getKey(t,s,o);if(this.availableTiles[A]){var m=Math.pow(2,q);j=Math.abs(j)-(m-1);var l={};l.name=A;l.img=this.availableTiles[A];l.scale=Math.pow(2,q);l.ofsX=k;l.ofsY=j;return l}}var A=this.getKey(w,v,u);l={};l.name="empty_"+A;l.img=this.getBlankTile(A);l.img.empty=true;l.scale=1;l.ofsX=0;l.ofsY=0;return l},getBlankTile:function(i){if(this.blankTiles[i]){return this.blankTiles[i]}this.blankTiles[i]=this.blankTileImg.cloneNode(true);this.blankTiles[i].id="empty_"+i;this.blankTiles[i].key="empty_"+i;return this.blankTiles[i]},removeBlankTile:function(i){if(this.blankTiles[i]){delete this.blankTiles[i]}},setOwner:function(i){this.owner=i},startPrecaching:function(){if(!this.opts.precache){return}if(!this.precacher){this.precacher=new g.TilePrecacher(this.owner,this)}},toJSON:function(){var i={opts:this.opts};return i}};g.StreetTileStore=function(i){g.TileStore.call(this,i);this._ll_LUT=g.Constants._ll_LUT;this.hostIdx=0};g.StreetTileStore.prototype={getTileUrl:function(i,n,m){var l=d.Window.getDpr();var k=(l>1)?g.Configuration.defaultHighResConfig:g.Configuration.defaultConfig;var j=g.Configuration.streetTileHosts[this.hostIdx]+"/openls/image-cache/TILE?LLMIN=0.0,0.0&LLMAX="+this._ll_LUT[Math.round(m)]+"&CACHEABLE=true&DS=navteq-world&WIDTH="+(256)+"&HEIGHT="+(256)+"&CLIENTNAME="+g.Configuration.clientName+"&SESSIONID="+g.JSRequest.sessionId+"&FORMAT=PNG&CONFIG="+k+"&N="+n+"&E="+i;this.hostIdx=(this.hostIdx+1)%g.Configuration.streetTileHosts.length;return j}};g.StreetTileStore.prototype=g.Utilities.inherit(g.StreetTileStore.prototype,g.TileStore.prototype);g.SatelliteTileStore=function(i){g.TileStore.call(this,i);this.hosts=g.Configuration.digitalGlobeHosts;this.hostIdx=0};g.SatelliteTileStore.prototype={getTileUrl:function(i,q,n){var k=1;var o=g.Utilities.getTilePosition(i,q,n);var l=o.getLat()%180;var m=o.getLon()%360;if(m<-180){m=360+m}if(m>180){m=m-360}var j=this.hosts[this.hostIdx]+"/tiles/decarta?key="+g.Configuration.digitalGlobeKey+"&LL="+l+","+m+"&ZOOM="+n+"&CACHEABLE=true&DS=navteq&WIDTH="+256+"&HEIGHT="+256+"&FORMAT=PNG&CLIENTNAME="+g.Configuration.clientName+"&SESSIONID=9809958&CONFIG=transparent-tile&N=0&E=0";return j}};g.SatelliteTileStore.prototype=g.Utilities.inherit(g.SatelliteTileStore.prototype,g.TileStore.prototype);g.MapControl=function(i){this.options={position:"topLeft",marginX:10,marginY:10};this.options=g.Utilities.extendObject(this.options,i);this.domElement=null};g.MapControl.prototype={render:function(){throw ("You are rendering a base MapControl. It does NOTHING!")},position:function(){switch(this.options.position){case"topRight":this.domElement.style.left=this.options.map.width-this.width-this.options.marginX+"px";this.domElement.style.top=this.options.marginY+"px";break;case"bottomLeft":this.domElement.style.left=this.options.marginX+"px";this.domElement.style.top=this.options.map.height-this.height-this.options.marginY+"px";break;case"bottomRight":this.domElement.style.left=this.options.map.width-this.width-this.options.marginX+"px";this.domElement.style.top=this.options.map.height-this.height-this.options.marginY+"px";break;case"topLeft":default:this.domElement.style.top=this.options.marginY+"px";this.domElement.style.left=this.options.marginX+"px";break}},setOwner:function(i){this.options.map=i},setZ:function(i){if(this.domElement){this.domElement.style.zIndex=i}this.z=i},toJSON:function(){var i={marginX:this.options.marginX,marginY:this.options.marginY,position:this.options.position};return i}};g.ZoomControl=function(i){g.MapControl.call(this,i)};g.ZoomControl.prototype={ready:false,zoomLevels:21,zoomOfs:0,initElements:function(){this.domElement=d.crEl("div");this.domElement.style.position="absolute";this.zoomIn=d.crEl("div");this.zoomIn.style.position="absolute";this.zoomOut=d.crEl("div");this.zoomOut.style.position="absolute";this.zoomLevels=this.options.map.maxZoom-this.options.map.minZoom+1;this.zoomOfs=this.options.map.minZoom;if(this.options.style=="auto"){if(d.Window.isMobile()){this.options.style="mobile"}else{this.options.style="desktop"}}if(this.options.style=="desktop"){this.desktopStyle()}else{this.mobileStyle()}if(this.z){this.domElement.style.zIndex=this.z}this.zoomIn.onclick=function(){this.options.map.zoomIn()}.bind(this);this.zoomOut.onclick=function(){this.options.map.zoomOut()}.bind(this);this.position();this.ready=true},mobileStyle:function(){this.zoomInImg=g.ImagePack.zoomin_unselected;this.zoomOutImg=g.ImagePack.zoomout_unselected;this.width=this.zoomInImg.width+this.zoomOutImg.width;this.height=Math.max(this.zoomOutImg.height,this.zoomInImg.height);this.zoomOut.style.cursor=this.zoomIn.style.cursor="pointer";this.zoomIn.style.left=parseFloat(this.zoomOutImg.width)+"px";this.zoomIn.appendChild(this.zoomInImg);this.zoomOut.appendChild(this.zoomOutImg);this.domElement.appendChild(this.zoomIn);this.domElement.appendChild(this.zoomOut)},desktopStyle:function(){this.positionCursor=function(){this.cursor.style.top=(this.zoomLevels-this.options.map.zoom+this.zoomOfs-1)*10+"px"}.bind(this);g.EventManager.listen("zoomend",this.positionCursor);g.Utilities.extendStyle(this.zoomIn.style,{backgroundImage:"url(resources/zoom_in.png)",height:"20px",width:"20px",marginLeft:"4px",cursor:"pointer"});g.Utilities.extendObject(this.zoomOut.style,{backgroundImage:"url(resources/zoom_out.png)",height:"20px",width:"20px",marginLeft:"4px",cursor:"pointer",position:"relative",top:"20px"});this.pillar=d.crEl("div");this.pillar.unselectable="on";g.Utilities.extendObject(this.pillar.style,{backgroundImage:"url(resources/zoom_rail.png)",height:(10*this.zoomLevels)+"px",width:"28px",position:"relative",top:"20px",cursor:"pointer"});this.cursor=d.crEl("div");this.cursor.unselectable="on";g.Utilities.extendObject(this.cursor.style,{backgroundImage:"url(resources/zoom_handle.png)",backgroundRepeat:"no-repeat",height:"10px",lineHeight:"10px",width:"28px",position:"absolute"});var i=function(k){if(this.cursorDragging){return}k=g.Utilities.fixEvent(k);var l=k.pageY-g.Utilities.domPosition(this.domElement).top;this.options.map.zoomTo(this.zoomLevels+this.zoomOfs-Math.floor(l/10)+1);k.returnValue=false}.bind(this);d.Touch.attachListener("tap",this.pillar,i,true);d.Touch.attachListener("touchstart",this.cursor,function(k){this.cursorDragging=true}.bind(this),true);d.Touch.attachListener("touchmove",this.pillar,function(l,k){if(!this.cursorDragging){return}var m=k.pageY-g.Utilities.domPosition(this.domElement).top;this.cursor.style.top=m-20+"px";if(this.options.continuousZoom){this.options.map.zoomTo(this.zoomLevels+this.zoomOfs-(m/10)+1,null,true)}}.bind(this),true);d.Touch.attachListener("touchend",this.pillar,function(k){if(this.cursorDragging){this.cursorDragging=false;var l=parseInt(this.cursor.style.top)+20;this.options.map.zoomTo(this.zoomLevels+this.zoomOfs-Math.floor(l/10)+1)}}.bind(this),true);var j=function(k){if(!k.relatedTarget){k.relatedTarget=k.toElement}if(!(k.relatedTarget==this.cursor||k.relatedTarget==this.pillar)){this.cursorDragging=false;var l=parseInt(this.cursor.style.top)+20;this.options.map.zoomTo(this.zoomLevels+this.zoomOfs-Math.floor(l/10)+1)}}.bind(this);if(d.Window.isIe()){this.domElement.attachEvent("onmouseout",j)}else{this.domElement.addEventListener("mouseout",j,true)}this.pillar.appendChild(this.cursor);this.domElement.appendChild(this.zoomIn);this.domElement.appendChild(this.pillar);this.domElement.appendChild(this.zoomOut);this.positionCursor()},render:function(i){if(!this.ready){this.initElements()}i.appendChild(this.domElement)},position:function(){switch(this.options.position){case"topRight":this.domElement.style.left=this.options.map.width-this.width-this.options.marginX+"px";this.domElement.style.top=this.options.marginY+"px";break;case"bottomLeft":this.domElement.style.left=this.options.marginX+"px";this.domElement.style.top=this.options.map.height-this.height-this.options.marginY+"px";break;case"bottomRight":this.domElement.style.left=this.options.map.width-this.width-this.options.marginX+"px";this.domElement.style.top=this.options.map.height-this.height-this.options.marginY+"px";break;case"topLeft":default:this.domElement.style.top=this.options.marginY+"px";this.domElement.style.left=this.options.marginX+"px";break}}};g.ZoomControl.prototype=g.Utilities.inherit(g.ZoomControl.prototype,g.MapControl.prototype);g.PanControl=function(i){g.MapControl.call(this,i);this.locateTimeout=10000;this.locateHighAccuracy=false;this.locateMaxAge=1000*60*60*24};g.PanControl.prototype={initElements:function(){this.top=d.crEl("div");this.top.style.textAlign="center";this.center=d.crEl("div");this.center.style.textAlign="center";this.bottom=d.crEl("div");this.bottom.style.textAlign="center";this.panNorth=new Image();this.panNorth.src="resources/pan_north.png";this.panNorth.style.cursor="pointer";d.Touch.attachListener("tap",this.panNorth,this.options.map.pan.bind(this.options.map,"north",50),true);this.panEast=new Image();this.panEast.src="resources/pan_east.png";this.panEast.style.cursor="pointer";d.Touch.attachListener("tap",this.panEast,this.options.map.pan.bind(this.options.map,"east",50),true);this.panSouth=new Image();this.panSouth.src="resources/pan_south.png";this.panSouth.style.cursor="pointer";d.Touch.attachListener("tap",this.panSouth,this.options.map.pan.bind(this.options.map,"south",50),true);this.panWest=new Image();this.panWest.src="resources/pan_west.png";this.panWest.style.cursor="pointer";d.Touch.attachListener("tap",this.panWest,this.options.map.pan.bind(this.options.map,"west",50),true);this.locate=new Image();this.locate.src="resources/pan_center.png";this.locate.style.cursor="pointer";d.Touch.attachListener("tap",this.locate,this.geoLocate.bind(this),true);this.top.appendChild(this.panNorth);this.center.appendChild(this.panWest);this.center.appendChild(this.locate);this.center.appendChild(this.panEast);this.bottom.appendChild(this.panSouth);this.domElement=d.crEl("div");this.domElement.style.position="absolute";this.domElement.appendChild(this.top);this.domElement.appendChild(this.center);this.domElement.appendChild(this.bottom);this.ready=true},geoLocate:function(){if(!navigator.geolocation){return}var j=this.options.map;var i=this.locate;i.src="resources/pan_spinner.gif";navigator.geolocation.getCurrentPosition(function(k){var l=new g.Position(k.coords.latitude,k.coords.longitude);j.centerOn(l);i.src="resources/pan_center.png"},function(k){},{timeout:this.locateTimeout,maximumAge:this.locateMaxAge,enableHighAccuracy:this.locateHighAccuracy})},render:function(i){if(!this.ready){this.initElements()}i.appendChild(this.domElement)}};g.PanControl.prototype=g.Utilities.inherit(g.PanControl.prototype,g.MapControl.prototype);g.CopyrightControl=function(i){g.MapControl.call(this,i)};g.CopyrightControl.prototype={ready:false,initElements:function(){this.domElement=d.crEl("div");this.domElement.style.position="absolute";this.domElement.className="deCarta-copyright";this.domElement.innerHTML=this.options.text;this.position();this.ready=true;this.height=20},render:function(i){if(!this.ready){this.initElements()}i.appendChild(this.domElement)}};g.CopyrightControl.prototype=g.Utilities.inherit(g.CopyrightControl.prototype,g.MapControl.prototype);g.OverviewControl=function(i){g.MapControl.call(this,i)};g.OverviewControl.prototype={ready:false,ZOOM_DIFF:5,initElements:function(){this.width=120;this.height=120;this.domElement=d.crEl("div");this.domElement.style.position="absolute";this.domElement.className="deCarta-mapOverview";this.domElement.style.width=this.width;this.domElement.style.height=this.height;this.domElement.style.border="2px solid gray";this.domElement.style.overflow="hidden";this.mapControl=d.crEl("div");this.mapControl.id="mapOverviewWindow";this.mapControl.style.width="120px";this.mapControl.style.height="120px";this.domElement.appendChild(this.mapControl);var i=this.sync.bind(this);g.EventManager.listen("moveend",i);if(!this.options.style=="mobile"){g.EventManager.listen("move",i)}g.EventManager.listen("zoomend",i);this.position();this.ready=true},render:function(i){if(!this.ready){this.initElements()}this.position();i.appendChild(this.domElement);if(!this.tinyMap){var j=new g.Position(this.options.map.center.getLat(),this.options.map.center.getLon());this.tinyMap=new g.Map({id:this.mapControl.id,skipBindingToServer:true,skipResources:true,resizeable:false,draggable:this.options.style=="mobile",doubleTapZoom:false,digitalZoom:false,easing:false,center:j,zoom:Math.max(1,this.options.map.zoom-this.ZOOM_DIFF),onReady:function(){this.tinyMap.addOverlay(this.areaOverlay);this.areaOverlay.addObject(this.area)}.bind(this)});this.areaOverlay=new g.MapOverlay({name:"view"});this.area=new g.Polygon({vertices:this.options.map.getVisibleRect(),draggable:!(this.options.style=="mobile"),scroll:this.tinyMap,onDrop:function(k){this.preventRecenter=true;this.options.map.centerOn(k);this.tinyMap.centerOn(k)}.bind(this)})}},sync:function(i){if(i.map!=this.tinyMap){this.area.setVertices(this.options.map.getVisibleRect());if(this.recenterFromMain){this.recenterFromMain=false;return}if(i.center){this.tinyMap.centerOn(i.center,{animated:false})}if(i.zoom){this.tinyMap.zoomTo(Math.max(1,i.zoom-this.ZOOM_DIFF))}}else{if(this.preventRecenter){this.preventRecenter=false;return}this.recenterFromMain=true;if(i.center){this.options.map.centerOn(i.center,{animated:(this.options.style!="mobile")})}}}};g.OverviewControl.prototype=g.Utilities.inherit(g.OverviewControl.prototype,g.MapControl.prototype);g.OverlayObject=function(i){this.useCSSTransforms=(g.Configuration.useHardwareAcceleration&&d.Window.hasCSSTransforms())};g.OverlayObject.prototype={getPosition:function(){return this.options.position},setZIndex:function(i){this.zIndex=i},getSize:function(){if(!this.domElement){return{width:0,height:0}}return{width:parseFloat(this.domElement.style.width),height:parseFloat(this.domElement.style.height)}},setPosition:function(i){this.options.position=new g.Position(i.lat,i.lon);if(this.owner&&this.owner.refreshObjects){this.owner.refreshObjects()}},domPosition:function(i,k,j){this.domX=i;this.domY=k;if(!j){j=this.domElement}i=Math.floor(i);k=Math.floor(k);if(!this.useCSSTransforms){j.style.top=k+"px";j.style.left=i+"px"}else{j.style.webkitTransform="translate3d("+i+"px, "+k+"px, 0)";j.style.MozTransform="translate3d("+i+"px, "+k+"px, 0)";j.style.OTransform="translate3d("+i+"px, "+k+"px, 0)"}},registerOwner:function(i){this.owner=i},setZoom:function(i){},show:function(){this.visible=true},hide:function(){this.visible=false}};g.Pin=function(i){g.OverlayObject.call(this,i);this.options={text:"",textElement:null,position:null,image:null,imageSrc:null,xOffset:0,yOffset:0,onClick:null,onLabelClick:null,textVisible:false,textBackground:"#EDEDED",textZIndex:1000,textBorderColor:"#666666",textBorderWidth:2};this.zIndex=1;this.options=g.Utilities.extendObject(this.options,i);this.type="pin";this.domElement=null;this.textEnabled=true;g.EventManager.listen("showPinText",this.pinTextShown.bind(this))};g.Pin.prototype={setImage:function(j,i,k){this.options.image=j;if(i){this.options.xOffset=i}if(k){this.options.yOffset=k}if(this.domElement){this._render(parseFloat(this.domElement.style.left),parseFloat(this.domElement.style.top),true)}},setImageSrc:function(k,i,j){this.options.imageSrc=k;if(i){this.options.xOffset=i}if(j){this.options.yOffset=j}if(this.domElement){this._render(parseFloat(this.domElement.style.left),parseFloat(this.domElement.style.top),true)}},getImage:function(){return(this.options.image||this.options.imageSrc)},setText:function(i){this.options.text=i;this._render()},setRotation:function(i){this.domElement.style.MozTransform="rotate(-"+Math.round(i)+"deg)";this.domElement.style.webkitTransform="rotate(-"+Math.round(i)+"deg)";this.domElement.style.WebkitTransform="rotate(-"+Math.round(i)+"deg)";this.domElement.style.oTransform="rotate(-"+Math.round(i)+"deg)";this.domElement.style.OTransform="rotate(-"+Math.round(i)+"deg)"},pinTextShown:function(i){if(this==i.pin){return}if(this.textView){this.textView.style.display="none"}},render:function(i,j){if(!this.domElement){this.domElement=this._render()}this.domPosition(i,j);return this.domElement},_render:function(i,m,l){if(typeof l==="undefined"){l=false}if(!this.domElement){this.domElement=d.crEl("div");this.domElement.style.position="absolute";this.domElement.className="deCarta-Mobile-Pin";this.domElement.style.zIndex=this.zIndex;this.domElement.pin=this;this.domElement.id=("deCarta-pin-"+Math.random()).replace(".","")}if(this.options.imageSrc){if(this.pinImage){g.Utilities.domRemove(this.pinImage);delete this.pinImage}this.pinImage=new Image();this.pinImage.style.display="none";this.pinImage.onload=function(){this.style.display="block"};this.pinImage.src=this.options.imageSrc}else{if(this.options.image){this.pinImage=this.options.image}else{this.pinImage=g.ImagePack.pinDefaultImage.cloneNode(true)}}this.pinImage.style.position="absolute";this.pinImage.style.top="-"+this.options.yOffset+"px";this.pinImage.style.left="-"+this.options.xOffset+"px";if(this.options.text||this.options.textElement){try{if(this.textView){g.Utilities.domRemove(this.textView);delete this.textView}this.textView=d.crEl("div");this.textView.style.cssText="background-color:"+this.options.textBackground+";border:"+this.options.textBorderWidth+"px solid "+this.options.textBorderColor+";font-size:12px;line-height:1.3em;margin:10px auto;padding:5px;position:absolute;text-align:center;z-index: "+this.options.textZIndex+"-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;-moz-box-shadow:0 0 5px #888888;-webkit-box-shadow:0 0 5px #888888;box-shadow:0 0 5px #888888;font-family: Arial";if(this.options.text){var j=d.crEl("div");j.style.color="#222";j.innerHTML=this.options.text;this.options.textElement=j}if(this.options.textElement){this.textView.appendChild(this.options.textElement)}this.arrowBorder=d.crEl("div");this.arrowBorder.style.cssText="border-color: "+this.options.textBorderColor+" transparent transparent transparent;border-style: solid;border-width: 10px;height:0;width:0;position:absolute;bottom:-22px;left:30px;";this.textArrow=d.crEl("div");this.textArrow.style.cssText="border-color: "+this.options.textBackground+" transparent transparent transparent;border-style: solid;border-width: 10px;height:0;width:0;position:absolute;bottom:-19px;left:30px;";this.textView.appendChild(this.arrowBorder);this.textView.appendChild(this.textArrow);if(typeof this.options.onLabelClick==="function"){d.Touch.attachListener("tap",this.textView,this.options.onLabelClick,true)}this.textView.style.bottom=(this.options.yOffset)+"px";this.textView.style.display=(!this.options.textVisible)?"none":"block";this.prepareInfoWin()}catch(k){console.log("Pin",k)}}if(!l){d.Touch.attachListener("tap",this.domElement,function(n){if(this.options.onClick){if(!this.options.onClick(this,n)){return}}if(this.textView){if(this.textView.style.display=="block"){this.hideText()}else{this.showText()}}}.bind(this),true)}this.domElement.appendChild(this.pinImage);if(this.textView){this.domElement.appendChild(this.textView)}return this.domElement},prepareInfoWin:function(){var i=this.options.textElement.clientWidth;if(i==0){return}if(i<80){i=120}this.textView.style.width=i+"px";this.textView.style.left=-(i/2)-5+"px";this.arrowBorder.style.left=(parseFloat(this.textView.style.width)-10)/2+"px";this.textArrow.style.left=(parseFloat(this.textView.style.width)-10)/2+"px"},hideText:function(){g.EventManager.trigger("hidePinText",{pin:this});this.textView.style.display="none"},showText:function(){if(!this.textEnabled){return}g.EventManager.trigger("showPinText",{pin:this});this.textView.style.display="block";this.prepareInfoWin()},disableText:function(){this.hideText();this.textEnabled=false},enableText:function(){this.textEnabled=true},click:function(i){this.options.onClick=i}};g.Pin.prototype=g.Utilities.inherit(g.Pin.prototype,g.OverlayObject.prototype);g.ClusteredPin=function(i){g.OverlayObject.call(this,i);this.options={threshold:50,zoom:null,onClick:function(){}};this.options=g.Utilities.extendObject(this.options,i);if(!this.options.zoom){d.Exception.raise("You cannot instantiate a ClusteredPin without specifying the zoom")}this.pin=null;this.cluster=null;this.point=null;this.threshold=40;this.domElement=null};g.ClusteredPin.prototype={addPin:function(j){if(!this.cluster){this.cluster=[];this.cluster.push(j);this.options.position=j.getPosition();this.centerPoint=this.options.position.getPixelPoint(this.options.zoom);return true}else{var i=j.getPosition().getPixelPoint(this.options.zoom);if(g.Utilities.pixelDistance(this.centerPoint,i)<this.options.threshold){this.cluster.push(j);return true}else{return false}}},render:function(i,n){if(this.cluster.length==1){return this.cluster[0].render(i,n)}var m=this.cluster[0].zIndex;if(!this.domElement){this.domElement=d.crEl("div");this.domElement.className="deCarta-mob-pinCluster";this.domElement.style.zIndex=m;this.domElement.id=("deCarta-pin-"+Math.random()).replace(".","");this.domElement.style.position="absolute";this.imgElement=this.chooseIcon();this.imgElement.style.position="absolute;";this.labelElement=d.crEl("div");this.labelElement.className="deCarta-mob-pinCluster-label";this.labelElement.style.cssText="text-align: center; \n                    width: 20px;\n                    height: 18px;\n                    border-radius: 10px; \n                    -moz-border-radius: 10px; \n                    position: absolute; \n                    top: -3px; \n                    left: -3px; \n                    padding: 0px; \n                    border: 2px solid white; \n                    background-color: #A00; \n                    color: #FFF; \n                    font-size: 12px; \n                    font-family: arial; \n                    font-weight: bold;\n                    background-image: -webkit-gradient(radial, 12 12, 12, 12 12, 2, from(#FC0505), to(#9C090E));\n                    background-image: -moz-radial-gradient(20% 20% 90deg,circle cover, #9C090E, #FC0505);\n                    text-shadow: 1px 1px 1px #333333;\n                    -moz-box-shadow: 2px 2px 2px #333;\n                    -webkit-box-shadow: 2px 2px 2px #333;\n                    box-shadow: 2px 2px 2px #333;\n                    padding-top: 2px";this.domElement.appendChild(this.imgElement);this.domElement.appendChild(this.labelElement);d.Touch.attachListener("tap",this.domElement,this.onClick.bind(this),false)}var j=g.ImagePack.get("pinDefaultImage");var l=parseFloat(j.style.height);var k=parseFloat(j.style.width);this.domPosition(i-(k/2),n-l);this.labelElement.innerHTML=this.cluster.length;return this.domElement},chooseIcon:function(){var l=this.cluster[0].getImage();for(var k=1;k<this.cluster.length;k++){if(typeof l!=="string"){if(this.cluster[k].getImage().src!=l.src){return g.ImagePack.get("pinDefaultImage")}}else{if(this.cluster[k].getImage()!=l){return g.ImagePack.get("pinDefaultImage")}}}var j=new Image();if(typeof l==="string"){j.src=l}else{j.src=l.src;j.style.width=l.style.width;j.style.height=l.style.height}return j},onClick:function(){this.options.onClick(this.cluster)},getList:function(){return this.cluster}};g.ClusteredPin.prototype=g.Utilities.inherit(g.ClusteredPin.prototype,g.OverlayObject.prototype);g.Polyline=function(k){g.OverlayObject.call(this,k);if(!k.lineGeometry||k.lineGeometry.length==0){g.Exception.raise("You need to provide a lineGeometry to instantiate a polyline")}this.options={lineGeometry:null,fillColor:"#000",strokeColor:"#0000FF",strokeSize:6,strokeOpacity:0.6,granularity:7};this.pointIndex=[];this.genGeom=[];this.options=g.Utilities.extendObject(this.options,k);this.positions=[];this.lastRenderedPointSet=null;for(var j=0;j<this.options.lineGeometry.length;j++){var l=this.options.lineGeometry[j].split(" ");tPos=new g.Position(l[0],l[1]);this.positions.push(tPos)}this.type="shape";this.svgRendering=a.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1");this.padding=5;this.findBounds();this.svgElement=null};g.Polyline.prototype={getPosition:function(){return this.topLeftPoint},getSize:function(m){var l=this.topLeftPoint.getY(m);var k=this.topLeftPoint.getX(m);var i=this.btmRightPoint.getY(m);var j=this.btmRightPoint.getX(m);return{width:j-k,height:l-i}},getIdealCenterAndZoom:function(j){var o={zoom:null,center:null};for(var q=20;q>0;q--){var l=this.topLeftPoint.getX(q);var u=this.topLeftPoint.getY(q);var k=this.btmRightPoint.getX(q);var s=this.btmRightPoint.getY(q);var n=Math.abs(k-l);var m=Math.abs(s-u);if(n<=j.width&&m<=j.height){o.zoom=q;break}}var t=(this.topLeftPoint.getX(o.zoom)+this.btmRightPoint.getX(o.zoom))/2;var r=(this.topLeftPoint.getY(o.zoom)+this.btmRightPoint.getY(o.zoom))/2;var i=new g.Position();i.setXY(t,r,o.zoom);o.center=i;return o},render:function(i,l,k,j){if(this.svgRendering){return this.renderSVG(i,l,k,j)}else{return this.renderCanvas(i,l,k,j)}},renderSVG:function(t,s,r,v){if(!this.svgElement){this.findBounds();this.svgElement=a.createElementNS("http://www.w3.org/2000/svg","svg");this.svgElement.setAttribute("version","1.1");this.svgElement.setAttribute("id",("deCarta-shape-svg-"+Math.random()).replace(".",""));this.svgElement.style.zIndex=this.zIndex}if(!this.lineElement){this.lineElement=a.createElementNS("http://www.w3.org/2000/svg","polyline");this.svgElement.appendChild(this.lineElement)}this.indexAndThinPoints(r);var n=g.Utilities.normalizeZoom(r);var q="";var l=this.topLeftPoint.getX(r);var k=this.topLeftPoint.getY(r);var u=this.preparePoints(r,l,k,v);for(var m=0;m<u.length;m++){var j=u[m];q+=j.x+","+j.y+" "}this.lineElement.setAttribute("points",q);this.lineElement.setAttribute("style","fill:none;stroke:"+this.options.strokeColor+";stroke-width:"+this.options.strokeSize+";stroke-opacity:"+this.options.strokeOpacity);var o=this.getSize(r);this.svgElement.setAttribute("style","position: absolute; width: "+(o.width+10)+"px; height: "+(o.height+10)+"px;");this.domPosition((t-5),(s-5),this.svgElement);return this.svgElement},renderCanvas:function(s,r,o,v){if(!this.canvasElement){this.findBounds();this.canvasElement=d.crEl("canvas");this.canvasElement.setAttribute("id","deCarta-shape-canvas-"+new Date().getTime());this.canvasElement.style.zIndex=this.zIndex}this.indexAndThinPoints(o);var n=this.getSize(o);var u=0;var j=0;if(s<0){j=s;s=0}if(r<0){u=r;r=0}if(s+n.width>e.innerWidth){n.width=e.innerWidth-s}if(r+n.height>e.innerHeight){n.height=e.innerHeight-r}this.canvasElement.setAttribute("style","position: absolute;");this.domPosition((s-this.padding),(r-this.padding),this.canvasElement);if(o==this.lastZ&&j==this.lastLeftClip&&u==this.lastTopClip&&n.width==this.lastWidth&&n.height==this.lastHeight){return this.canvasElement}this.lastZ=o;this.lastLeftClip=j;this.lastTopClip=u;this.lastWidth=n.width;this.lastHeight=n.height;this.canvasElement.width=n.width+(this.padding*2);this.canvasElement.height=n.height+(this.padding*2);var l=this.topLeftPoint.getX(o)-j;var k=this.topLeftPoint.getY(o)+u;var w=this.canvasElement.getContext("2d");w.beginPath();var t=this.preparePoints(o,l,k,v);var q=false;for(var m=0;m<t.length;m++){p=t[m];if(!q){w.moveTo(p.x,p.y);q=true}else{w.lineTo(p.x,p.y)}}w.strokeStyle=this.options.strokeColor;w.lineWidth=this.options.strokeSize;w.globalAlpha=this.options.strokeOpacity;w.lineCap="round";w.stroke();return this.canvasElement},indexAndThinPoints:function(s){var o=g.Utilities.normalizeZoom(s);if(!this.pointIndex[o]){var r=null;var u=null;var l=this.positions.length;var t=null;var q=0;var m=0;var j=null;this.pointIndex[o]={};this.genGeom[o]=[];for(var n=0;n<l;n++){var k=this.positions[n];q=k.getX(s);m=k.getY(s);if(t){j=Math.sqrt(Math.pow(q-t.x,2)+Math.pow(m-t.y,2))}if(j>this.options.granularity||!t||n==(l-1)){r=k.getTileAtZoom(o);u=g.Utilities.getTileKey(r.E,r.N,o);if(!this.pointIndex[o][u]){this.pointIndex[o][u]=[]}this.genGeom[o].push(n);this.pointIndex[o][u].push(this.genGeom[o].length-1);t={x:q,y:m}}}}},preparePoints:function(v,q,n,C){var B=[];var s=g.Utilities.normalizeZoom(v);var l=null;var y=null;var x=null;for(var r=0;r<C.length;r++){var A=g.Utilities.getTileKey(C[r].E,C[r].N,s);if(this.pointIndex[s][A]){for(var o=0;o<this.pointIndex[s][A].length;o++){l=this.positions[this.genGeom[s][this.pointIndex[s][A][o]]];y=l.getX(v)-q+this.padding;x=n-l.getY(v)+this.padding;B.push({x:y,y:x,i:this.pointIndex[s][A][o]})}}}B.sort(function(j,i){return j.i-i.i});var u=null;var t=null;var m=[];var w=this.padding;function k(D,j){if(D){y=D.getX(v)-q+w;x=n-D.getY(v)+w;m.push({x:y,y:x,i:j})}}for(o=0;o<B.length;o++){l=B[o];if(!u){if(l.i!=0){t=this.positions[this.genGeom[s][l.i-1]];k(t,l.i-1)}}else{if(u<l.i-1){t=this.positions[this.genGeom[s][u+1]];k(t,u+1);t=this.positions[this.genGeom[s][l.i-1]];k(t,l.i-1)}}u=l.i}t=this.positions[this.genGeom[s][u+1]];k(t,u+1);B=B.concat(m);B.sort(function(j,i){return j.i-i.i});return B},findBounds:function(){this.topLeftPoint=null;this.btmRightPoint=null;var j=null;var r=null;var q=null;var n=null;for(var m=0;m<this.options.lineGeometry.length;m++){var o=new g.Position(this.options.lineGeometry[m]);var l=o.getX(18);var k=o.getY(18);if(l<j||!j){j=l}if(k<r||!r){r=k}if(l>q||!q){q=l}if(k>n||!n){n=k}delete o}this.topLeftPoint=new g.Position(0,0);this.btmRightPoint=new g.Position(0,0);this.topLeftPoint.setXY(j,n,18);this.btmRightPoint.setXY(q,r,18)}};g.Polyline.prototype=g.Utilities.inherit(g.Polyline.prototype,g.OverlayObject.prototype);g.Polygon=function(i){g.OverlayObject.call(this,i);this.options={vertices:[],strokeColor:"#0077D2",strokeWidth:2,fillColor:"#0077D2",opacity:0.3,draggable:false,scroll:null};this.options=g.Utilities.extendObject(this.options,i);this.type="shape";this.svgRendering=false;this.svgElement=null;this.canvasElement=null;this.visible=true;this.padding=5;if(this.options.vertices.length<3){g.Exception.raise("Instantiating a polygon with too few vertices. I believe you need at least 3.")}this.getPosition()};g.Polygon.prototype={getPosition:function(){var l=null;var m=null;for(var k=0;k<this.options.vertices.length;k++){var j=this.options.vertices[k];if(!l||j.lat>l){l=j.lat}if(!m||j.lon<m){m=j.lon}}this.position=new g.Position(l,m);return this.position},setPosition:function(r){var m=this.position.getPixelPoint();var o=r.getPixelPoint();var k=m.x-o.x;var j=m.y-o.y;for(var n=0;n<this.options.vertices.length;n++){var l=this.options.vertices[n];var q=l.getPixelPoint();q.x=q.x+k;q.y=q.y+j;l.setXY(q.x,q.y)}this.position=r},getCenter:function(){var m=this.getPosition().getPixelPoint();var k=this.getSize();var j=m.x+(k.width/2);var l=m.y-(k.height/2);var i=new g.Position(0,0);i.setXY(j,l,21);return i},getSize:function(n){var o={x:null,y:null};for(var l=0;l<this.options.vertices.length;l++){var j=this.options.vertices[l];var k=j.getPixelPoint(n);if(o.x==null||o.y==null){o=k}if(o.x<k.x){o.x=k.x}if(o.y>k.y){o.y=k.y}}var m=this.position.getPixelPoint(n);return{width:o.x-m.x,height:m.y-o.y}},setVertices:function(i){this.options.vertices=i},startDrag:function(i){this.dragging=true;this.startDragX=i.pageX;this.startDragY=i.pageY;this.startDragPos=this.getPosition()},stopDrag:function(i){this.dragging=false;if(this.options.onDrop){this.options.onDrop(this.getCenter())}},drag:function(l){if(!this.dragging){return}var j=l.pageX-this.startDragX;var i=l.pageY-this.startDragY;this.startDragX=l.pageX;this.startDragY=l.pageY;var k=this.startDragPos.getPixelPoint(this.owner.owner.zoom);k.x-=j;k.y+=i;var m=new g.Position(0,0);m.setXY(k.x,k.y,this.owner.owner.zoom);this.setPosition(m);this.owner.owner.render();this.startDragPos=this.getPosition();if(this.options.scroll){}},render:function(i,m,l,j){if(!this.visible){return}try{return this.renderCanvas(i,m,l,j)}catch(k){console.log("Error rendering poly : ",this,i,m,l)}},renderCanvas:function(r,o,m,t){if(!this.canvasElement){this.canvasElement=d.crEl("canvas");this.canvasElement.setAttribute("id",("deCarta-shape-"+Math.random()).replace(".",""));this.canvasElement.className="deCarta-polygon";this.canvasElement.style.zIndex=this.zIndex;this.canvasElement.style.position="absolute";if(this.options.draggable){d.Touch.attachListener("touchstart",this.canvasElement,this.startDrag.bind(this),true);d.Touch.attachListener("touchend",this.canvasElement,this.stopDrag.bind(this),true);d.Touch.attachListener("touchmove",this.canvasElement,this.drag.bind(this),true)}}var B=this.getSize(m);this.domPosition((r-this.padding),(o-this.padding),this.canvasElement);var k=B.width+(this.padding*2);var q=B.height+(this.padding*2);if(k!=this.canvasElement.width||q!=this.canvasElement.height){this.canvasElement.width=k;this.canvasElement.height=q;var w=this.canvasElement.getContext("2d");w.strokeStyle=this.options.strokeColor;w.lineWidth=this.options.strokeWidth;w.fillStyle=this.options.fillColor;w.globalAlpha=this.options.opacity;w.beginPath();var j=this.getPosition().getPixelPoint(m);for(var l=0;l<this.options.vertices.length;l++){var s=this.options.vertices[l];var n=s.getPixelPoint(m);var A=n.x-j.x+this.padding;var u=j.y-n.y+this.padding;if(l==0){w.moveTo(A,u)}else{w.lineTo(A,u)}}w.closePath();w.fill();w.stroke()}return this.canvasElement},renderSvg:function(){}};g.Polygon.prototype=g.Utilities.inherit(g.Polygon.prototype,g.OverlayObject.prototype);g.Circle=function(i){g.OverlayObject.call(this,i);this.options={position:null,radius:500,strokeColor:"#0077D2",strokeWidth:2,fillColor:"#0077D2",opacity:0.3};this.options=g.Utilities.extendObject(this.options,i);this.type="shape";this.svgRendering=false;this.svgElement=null;this.canvasElement=null;this.visible=true;this.padding=5;if(!this.options.position){g.Exception.raise("Instantiating a circle without a position. You can see how this would not work very well. Please pass the center position as one of the options, like this: new dCM.Circle({position: new Position(37, -122)});")}};g.Circle.prototype={setRadius:function(i){this.options.radius=i},getRadius:function(){return this.options.radius},getPixelRadius:function(i){return 1/(g.Utilities.metersPerPixelAtZoom(this.options.position,i)*(1/this.options.radius))},render:function(i,l,k,j){if(!this.visible){return}if(this.svgRendering){return this.renderSVG(i,l,k,j)}else{return this.renderCanvas(i,l,k,j)}},renderCanvas:function(o,n,l,q){if(!this.canvasElement){this.canvasElement=d.crEl("canvas");this.canvasElement.setAttribute("id",("deCarta-shape-"+Math.random()).replace(".",""));this.canvasElement.className="deCarta-circle";this.canvasElement.style.zIndex=this.zIndex;this.canvasElement.style.position="absolute"}var k=d.Window.getViewport();var m=this.getPixelRadius(l);this.domPosition((o-this.padding-m),(n-this.padding-m),this.canvasElement);if(o+m<0||n+m<0||o-m>k.width||n-m>k.height){return false}var j=(m*2)+(this.padding*2);var i=(m*2)+(this.padding*2);if(this.canvasElement.width!=j||this.canvasElement.height!=i){this.canvasElement.width=(m*2)+(this.padding*2);this.canvasElement.height=(m*2)+(this.padding*2);var r=this.canvasElement.getContext("2d");r.beginPath();r.arc(m+this.padding,m+this.padding,m,0,Math.PI*2,true);r.closePath();r.strokeStyle=this.options.strokeColor;r.lineWidth=this.options.strokeWidth;r.fillStyle=this.options.fillColor;r.globalAlpha=this.options.opacity;r.fill();r.stroke()}return this.canvasElement},renderSvg:function(i,l,k,j){g.Exception.raise("SVG RENDERING is not yet implemented for circles. This should not be happening, since this function is never called. ")}};g.Circle.prototype=g.Utilities.inherit(g.Circle.prototype,g.OverlayObject.prototype);g.Image=function(i){this.options={topLeft:null,btmRight:null,minZoom:1,maxZoom:21,width:0,height:0,cssClass:"deCarta-Mob-ImgObj",opacity:75};this.domElement=null;this.type="image";this.options=g.Utilities.extendObject(this.options,i)};g.Image.prototype={render:function(j,n,m,k){if(m>=this.options.minZoom&&m<=this.options.maxZoom){if(!this.domElement){this.domElement=new Image();this.domElement.style.position="absolute";this.domElement.src=this.options.src;this.domElement.className=this.options.cssClass;g.Utilities.setOpacity(this.domElement,this.options.opacity)}this.domElement.style.top=n+"px";this.domElement.style.left=j+"px";var l=g.Utilities.lon2pix(this.options.btmRight.getLon(),m)-g.Utilities.lon2pix(this.options.topLeft.getLon(),m);var i=g.Utilities.lat2pix(this.options.topLeft.getLat(),m)-g.Utilities.lat2pix(this.options.btmRight.getLat(),m);this.domElement.style.width=l+"px";this.domElement.style.height=i+"px";return this.domElement}},getPosition:function(){return this.options.topLeft},getSize:function(){var l=this.options.topLeft.getY(z);var k=this.options.topRight.getX(z);var i=this.options.bottomRight.getY(z);var j=this.options.bottomRight.getX(z);return{width:j-k,height:l-i}},setPosition:function(i){this.options.position=new g.Position(i.lat,i.lon);if(this.owner&&this.owner.refreshObjects){this.owner.refreshObjects()}}};g.Image.prototype=g.Utilities.inherit(g.Image.prototype,g.OverlayObject.prototype);g.Position=function(j,k){this.lat=0;this.lon=0;if(j!=null){if(arguments.length==1){var i=j.split(",");if(i.length<2){i=j.split(" ")}this.lat=parseFloat(i[0]);this.lon=parseFloat(i[1])}else{if(arguments.length==2){this.lat=j;this.lon=k}}}this.xz=[];this.yz=[]};g.Position.prototype={clone:function(){return new g.Position(this.lat,this.lon)},getLat:function(){return parseFloat(this.lat)},getLon:function(){return parseFloat(this.lon)},getX:function(i){if(i==Math.round(i)){if(!this.xz[i]){this.xz[i]=g.Utilities.lon2pix(this.lon,i)}return this.xz[i]}else{return g.Utilities.lon2pix(this.lon,i)}},getY:function(i){if(i==Math.round(i)){if(!this.yz[i]){this.yz[i]=g.Utilities.lat2pix(this.lat,i)}return this.yz[i]}else{return g.Utilities.lat2pix(this.lat,i)}},setXY:function(i,k,j){if(!j){j=21}this.lat=g.Utilities.pix2lat(k,j);this.lon=g.Utilities.pix2lon(i,j);if(this.lon<-180){this.lon=this.lon+360}if(this.lon>180){this.lon=this.lon-360}this.yz=[];this.xz=[]},getPixelPoint:function(i){if(!i){i=21}return{x:this.getX(i),y:this.getY(i)}},toString:function(i){if(i){return this.lat.toFixed(i)+" "+this.lon.toFixed(i)}return this.lat+" "+this.lon},getTileAtZoom:function(j){var i=this.getX(j);var n=this.getY(j);var l=g.Utilities.tileSizeForZoom(j);var k=Math.floor(i/l);var m=Math.floor(n/l);return{N:m,E:k}},quantize:function(i){this.setXY(Math.round(this.getX(i)),Math.round(this.getY(i)),i)},toJSON:function(){return this.lat+", "+this.lon}};g.Constants={_ll_LUT:["89.787438015348100000,360.00000000000000000","85.084059050110410000,180.00000000000000000","66.653475896509040000,90.00000000000000000","41.170427238429790000,45.000000000000000000","22.076741328793200000,22.500000000000000000","11.251819676168665000,11.250000000000000000","5.653589942659626000,5.625000000000000000","2.830287664051185000,2.812500000000000000","1.415581451872543800,1.406250000000000000","0.707845460801532700,0.703125000000000000","0.353929573271679340,0.351562500000000000","0.176965641673330230,0.175781250000000000","0.088482927761462040,0.087890625000000000","0.044241477246363230,0.043945312500000000","0.022120740293895182,0.021972656250000000","0.011060370355776452,0.010986328125000000","0.005530185203987857,0.005493164062500000","0.002765092605263539,0.002746582031250000","0.001382546303032519,0.001373291015625000","0.000691272945568983,0.000686645507812500","0.000345636472797214,0.000343322753906250"],TILE_SIZE:256,BLANKTILE:"data:image/gif;base64,R0lGODlhAAEAAYABAJmZmf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUI0MTgyQjczMzE1MTFFMDg5MTA5RTNDRDlERkUzMzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RUI0MTgyQjgzMzE1MTFFMDg5MTA5RTNDRDlERkUzMzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFQjQxODJCNTMzMTUxMUUwODkxMDlFM0NEOURGRTMzMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFQjQxODJCNjMzMTUxMUUwODkxMDlFM0NEOURGRTMzMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAEALAAAAAAAAQABAAL/jI+pe8APkYt0zYrNzXXz6H1PKFrliabqyrbuC6vkOstxUKc5up99+bsJh8Si8WgMfpQcZsaJgXZuUkoVic1qt1wa9Ru7QsQjMIzcTavXbCLaFDa/3gp6wi5p6/f8vhDfIOcCqCHYQojjp7jI2Ah3ZsiCOBnp5XiJmdlFGdcJ6TlXqTlKWsojqoN6CjqoavoKG1vIeugKZCvCKbvLC6sbSiuJuzTca3y89tsabPnpDIwcLb2nXMtsc52aPc3d7Vb8BB4lPrXtfY7eDL2+/NzObp0uP6/+bh8PL2wO5NCf6N8PAMB/BAca/CewoMKDDBMyXAgx4MOJER1GvGjQIsWN/zg0YvwokCOiRPtykbNyEkRKeizlVdPnDt89mPla2ryZpyQxnU1WluGJM2i3l/VkGqU5s6jQpfOIYouJ9KjSqUyrDvXJwKk2qFS3Wv3qTesqrk9rlk0KNm0vsT6wPjLrFa3aub7c1rF7B29OsnT7kmJ7C+g4weX4+j18CbBJwigZq3SMOHIaxTsNt4X807LkzXoo98ScVW8g0JxLfyN9F3Ve1Xvhmn69SfQszYtpV3YNOzcWz+FYj7b9+YxIjyIrFh9+HCRxkMaZI3euPPnG5QdlkwTeG/tg7YV1e+fCezvuwNwbl/+OPq7Us+vVR33fNb388bXp35Y71n7w+fyth//vjt9l543RX4G+zaZfdgmKFyB5Bj7IHnwRxifgggC2B2GG5lm4YYP1eXgfhhqO+BaI+5moIIoMikhiiwiqeKGE7lHoIIwuGvhfhyx+uGOIMt7oYo6PDZgZh0MaCeR8QhJ44HVIFmljkkr6R2WTS0qJ3pWhWVklkVh6p2WJPZ44ZoqHPCddc2k2tKaa0E1E3ZsItcmmnHAW1+WTW3op5o8VfnljmKnxOaiefdIIaIGCrkYoo4YWGmWiui3aWqRQlrmin5L2R+lvjzpq6Z6fbipZpy9iGiOiPqpKapZ5hnrohLLO2Kqir6Kqo6Y86lrrd6Y6CSukuB4ZbK+H/Yrsrbz/Gptbslw+2yizdDkbrafFVjqstJFRO6q12V66rLalcXutt+Fmyqq4nJH7rajlnnquutsqmy66s+Y3CJp2LhTnmv3a+a90Ab858HEFO3cwvff+2W6stD4sL2zsxptrvakuHPG4CkPMMMXENpzxVxNbXDHGu5Ic8lwjm7wqy2R6nHJaK3NcI8ig2hyzUDPji7O5KDOZ86Qb8wwzuD8bHfRmO3d8tLs9w5u00kMz7bKZRTsdtdTQdgt11fbSnLXKU9d8tcNENx32TUuTjbawZbud9rFjn+z1xWC3HPe0c+N9dt0l3513VWvTDbjVbd+hL51z7lun4gAdnDjjizs+ueSP/+O59bvAPr352zcH3tfgfFNd+Nd9gy7z3i8fjq3nraOuluir+/2x6z7DDpbshtMONNed45676ruXbvfpxgO/lO6mk34827wjj47yxTNPvfPEQ++S8Mtb3zzh3WPfkvR/fz/79bWDn7z203Nfvffto0+P+Oc/jzXrt8Ovtvrjv18++cPjHz79zc98vdPcSAD4CvkVkHMKRCAyGlg/+pmNf0+InOMgFx3LFQSD06Hc5TT4QQ92BHPV6hoBkXbCCKZwgg5MBwRZ6D72yTCGLTzHC+EmQRyuUIc1dKEAF2g7E/pvez28SuYY+EMUFtGGSVThENdHw9EtkRs3/Jz9hEhBIv9OMRpVfF0OrfhFL27RiCX8XRjv98T9zXCMx+giGrMIRSlGkY1raSIM5YjH/sGRjnU5YhDNuEMwBpKPibEjD/c4wDQmkpDGcCMW16hHSP6PkXX04xUBqUggXpKSfXAkJhGpyTNqwIKW4yBGTHknEFbOg6h0EytJ6DtPypKTYTGkIDOpRFDmkpaxmKUlRflJXvaxjL4kpjCnUcxY2vKYfEimAZfJzM5A85FznKQktRjNTDgTib/Mpim2+UdPejM23cSlE3V5zmuOcxHgvKQ416mFdgLznfDczTSDWU1sWjOf9ezkPeU5yH5uAaDmvGMk+SlQaZYTnQbdZx4rmEERhkQRlRKh6AgtOlGJtrJxFD1YAQAAOw=="};g.ImagePack={load:function(i,k,j){if(typeof k!=="function"){g.Exception.raise("Image pack loading requires a callback.")}if(!j&&(i.indexOf("http://")==-1&&e.location.protocol!="file:"&&!d.Window.isIe())){this.loadXHR(i,k)}else{this.loadScript(i,k)}},loadScript:function(j,l){var i=d.crEl("script");var k=j.substring(j.lastIndexOf("/")+1,j.lastIndexOf("."));i.onload=function(){this.importLoadedPack(k,l);i.parentNode.removeChild(i)}.bind(this);i.onreadystatechange=function(m){if(m.readyState=="complete"){this.importLoadedPack(k,l);m.parentNode.removeChild(m)}}.bind(this,i);i.src=j;a.body.appendChild(i)},loadXHR:function(i,k){var j=new XMLHttpRequest();j.open("GET",i,true);j.onreadystatechange=function(l){if(j.readyState==4){if(j.status==200){(new Function(j.responseText+"; window.imagePacks = imagePacks"))();var m=i.substring(i.lastIndexOf("/")+1,i.lastIndexOf("."));g.ImagePack.importLoadedPack(m,k)}else{g.Exception.raise("Error loading resources")}}};j.send()},get:function(j){try{return this[j].cloneNode(false)}catch(i){d.App.streamlog("Failed Pin Load",{err:"pin "+j+" is not here."});return false}},importLoadedPack:function(j,l){if(!imagePacks[j]){g.Exception.raise("Image pack "+j+" contains no images, or is in the wrong format!")}var k=null;var i=0;for(k in imagePacks[j]){i++}for(k in imagePacks[j]){this[k]=new Image();this[k].onload=function(m,n){var o=(n.scale)?n.scale:1;m.style.width=(m.width/o)+"px";m.style.height=(m.height/o)+"px";i--;if(i==0){l()}}.bind(this,this[k],imagePacks[j][k]);this[k].src=imagePacks[j][k].img}}};g.Exception={raise:function b(k){var i=this.getFunctionName(arguments.callee.caller);var j="["+i+"] - "+k;if(g.Configuration.vocalExceptions){alert("Exception: "+j)}throw (j)},getFunctionName:function f(k){if(k.name){return k.name}var j=k.toString();var i=j.substring(j.indexOf("function")+8,j.indexOf("("));if(i.replace(/ /g,"")){return i.replace(/ /g,"")}return"anonymous"}};g.Radius=function(j,i){this.distance=j;this.uom=i};g.Radius.prototype.toString=function(){return this.distance+" "+this.uom};g.Radius.prototype.localize=function(i){if(!i){g.Exception.raise("Locale is required to localize.")}if(i.country=="US"||i.country=="UK"){this.toImperial()}else{this.toMetric()}return this};g.Radius.prototype.toLocalizedString=function(i){return new g.Radius(this.distance,this.uom).localize(i).toString()};g.Radius.prototype.autoFormat=function(){switch(this.uom){case"KM":if(this.distance<=0.5){this.distance=this.distance.toFixed(1);this.uom="KM"}else{this.distance=(this.distance*1000).toFixed(0);this.uom="M"}break;case"M":if(this.distance>500){this.distance=(this.distance/1000).toFixed(1);this.uom="KM"}else{this.distance=this.distance.toFixed(0);this.uom="M"}break;case"MI":if(this.distance<0.3){this.distance=(1760*this.distance).toFixed(0);this.uom="YDS"}else{this.distance=this.distance.toFixed(1);this.uom="MI"}break;case"FT":if(this.distance>300){if(this.distance>1500){this.distance=(this.distance*0.000189393939).toFixed(1);this.uom="MI"}else{this.distance=(0.333333333*this.distance).toFixed(0);this.uom="YDS"}}else{this.distance=this.distance.toFixed(0);this.uom="FT"}break}return this};g.Radius.prototype.getDegrees=function(){if(this.uom=="KM"){return this.distance/111.111}else{if(this.uom=="M"){return(this.distance/1000)/111.111}else{if(this.uom=="MI"){return(this.distance*1.609)/111.111}else{if(this.uom=="FT"){return((this.distance/3.28)/1000)/111.111}}}}return 0};g.Radius.prototype.toMetric=function(){if(this.uom=="KM"||this.uom=="M"){return}if(this.uom=="MI"){this.distance*=1.609344;this.uom="KM"}if(this.uom=="FT"){this.distance*=0.3048;this.uom="M"}return this};g.Radius.prototype.toImperial=function(){if(this.uom=="MI"||this.uom=="FT"){return}if(this.uom=="KM"){this.distance*=0.621371192;this.uom="MI"}if(this.uom=="M"){this.distance*=3.2808399;this.uom="FT"}return this};g.Radius.prototype.getMiles=function(){switch(this.uom){case"KM":return this.distance*0.621371192;break;case"M":return(this.distance/1000)*0.621371192;break;case"MI":return this.distance;break;case"FT":return this.distance*0.000189393939;break;default:g.Exception.raise("Unknown UOM : "+this.uom);break}};g.Radius.prototype.getKm=function(){switch(this.uom){case"KM":return this.distance;break;case"M":return(this.distance/1000);break;case"MI":return this.distance*1.609344;break;case"FT":return this.distance*0.0003048;break;default:g.Exception.raise("Unknown UOM : "+this.uom);break}};g.Distance=g.Radius;g.Locale=function(j,i){this.language=j.toUpperCase();this.country=i.toUpperCase()};g.Locale.prototype={getLanguage:function(){return this.language},setLanguage:function(i){this.language=i.toUpperCase()},getCountry:function(){return this.country},setCountry:function(i){this.country=i.toUpperCase()},toString:function(){return this.language+"_"+this.country}};e.encodeURIComponentUTF8=function(r){r=r+"";var l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.~";var j="!*'();:@&=+$,/?%#[]";var n=l+j;var o="0123456789ABCDEFabcdef";function m(t){return"%"+o.charAt(t>>4)+o.charAt(t&15)}var i="";for(var s=0;s<r.length;s++){var k=r.charAt(s);if(l.indexOf(k)!=-1){i=i+k}else{var q=r.charCodeAt(s);if(q<128){i=i+m(q)}if(q>127&&q<2048){i=i+m((q>>6)|192);i=i+m((q&63)|128)}if(q>2047&&q<65536){i=i+m((q>>12)|224);i=i+m(((q>>6)&63)|128);i=i+m((q&63)|128)}if(q>65535){i=i+m((q>>18)|240);i=i+m(((q>>12)&63)|128);i=i+m(((q>>6)&63)|128);i=i+m((q&63)|128)}}}return i};g.JSRequest={callbacks:{},timeouts:{},sessionId:Math.ceil((new Date().getTime())*Math.random()),requestId:null,init:function(i){if(typeof i!=="function"){g.Exception.raise("JSRequest.init needs a callback parameter")}var j="       <xls:Request version='1.0' requestID='1675192' methodName='RuokRequest'>             <xls:RUOKRequest />       </xls:Request>";var k=new Date().getTime();this.send(j,function(o){var r=(new Date().getTime())-k;try{if(typeof o.XLS.ResponseHeader.ErrorList==="object"){i({success:false,msg:o.XLS.ResponseHeader.ErrorList.Error.message,exTime:r})}else{if(typeof o.XLS.Response.RUOKResponse==="object"){g.Configuration.url="http://"+o.XLS.Response.RUOKResponse.hostName+"/openls/JSON";var n=o.XLS.Response.RUOKResponse.maxHostAliases?parseInt(o.XLS.Response.RUOKResponse.maxHostAliases):0;g.Configuration.streetTileHosts=[];if(n){for(var m=1;m<=n;m++){var l="http://"+o.XLS.Response.RUOKResponse.hostName.replace(/\./,"-0"+m+".");g.Configuration.streetTileHosts.push(l)}}else{g.Configuration.streetTileHosts.push("http://"+o.XLS.Response.RUOKResponse.hostName)}i({success:true,msg:"ok",exTime:r})}}}catch(q){i({success:false,msg:q.message,exTime:r})}}.bind(this),function(){var l=(new Date().getTime())-k;i({success:false,msg:"connection timeout",exTime:l})}.bind(this))},send:function(n,q,k){var o=Math.ceil((new Date().getTime())*Math.random());var l="deCarta-mob-req-"+o;var r=/requestID=[\'\"]([0-9]+)[\'\"]/;n=n.replace(r,'requestID="'+o+'"');var m=encodeURIComponentUTF8(this.getRequestHeader()+n+this.getRequestFooter());this.callbacks[o]=function(s){var t=d.geId(l);clearTimeout(this.timeouts[o]);if(t){t.parentNode.removeChild(t);q(s.response)}}.bind(this);this.timeouts[o]=setTimeout(function(s){this.cancel(s);if(typeof k=="function"){k({err:"timeout"})}}.bind(this,l,k),g.Configuration.requestTimeout);var j=g.Configuration.url+"?reqID="+o+"&chunkNo=1&numChunks=1&callback=deCarta.Mobile.JSRequest.callbacks["+o+"]&data="+m+"&responseFormat=JSON";var i=d.crEl("script");i.id=l;i.src=j;a.body.appendChild(i);return l},getRequestHeader:function(){var i='<?xml version="1.0"?><xls:XLS version="1" xls:lang="en" xmlns:xls="http://www.opengis.net/xls" rel="'+g.Configuration.apiVersion+'" xmlns:gml="http://www.opengis.net/gml"><xls:RequestHeader clientName="'+g.Configuration.clientName+'" sessionID="'+this.sessionId+'" clientAPI="mobilejs" clientPassword="'+g.Configuration.clientPassword+'" configuration="'+g.Configuration.defaultConfig+'"/>';return i},getRequestFooter:function(){var i="</xls:XLS>";return i},cancel:function(i){if(d.geId(i)){var j=d.geId(i);j.src=null;j.parentNode.removeChild(j);return true}else{return false}}};g.POISearch={getXML:function(t){var u='database="'+t.database+'"';var w=(t.sortDirection)?'sortDirection="'+t.sortDirection+'"':"";var q=(t.rankCriteria)?'rankCriteria="'+t.rankCriteria+'"':"";var v="";if(t.routeId){v+="<xls:POILocation><xls:NearRoute>";if(t.corridorType==="distance"){v+="<xls:distance value='"+t.corridorType+"' uom='M'/>"}else{if(searchCriteria.type==="euclideanDistance"){v+="<xls:euclideanDistance value='"+t.corridorType+"' uom='M'/>"}else{v+="<xls:drivetime>P0DT"+Math.floor(t.corridorType/60)+"H"+(t.corridorType%60)+"M0S</xls:drivetime>"}}v+="<xls:RouteID>"+t.routeId+"</xls:RouteID>";v+="</xls:NearRoute></xls:POILocation>"}else{v='<xls:WithinDistance><xls:POI ID="1"><gml:Point><gml:pos>'+t.position.lat+" "+t.position.lon+'</gml:pos></gml:Point></xls:POI><xls:MinimumDistance value="0" uom="KM"/><xls:MaximumDistance value="'+t.radius.distance+'" uom="'+t.radius.uom+'"/></xls:WithinDistance>'}var r="<xls:Request maximumResponses='"+t.maximumResponses+'\' version="1.0" requestID="0123456" methodName="DirectoryRequest"><xls:DirectoryRequest '+u+" "+w+" "+q+"><xls:POILocation>"+v+"</xls:POILocation><xls:POIProperties>";var j="</xls:POIProperties></xls:DirectoryRequest></xls:Request>";var o="";var m=g.Utilities.makeArrayFix(t.properties);for(var n=0;n<m.length;n++){for(var l in m[n]){if(typeof m[n][l]=="object"){var x=" ";for(var k in m[n][l]){x+=k+'="'+m[n][l][k]+'" '}o+=r+'<xls:POIProperty name="'+l+'" '+x+" />"+j}else{o+=r+'<xls:POIProperty value="'+m[n][l]+'" name="'+l+'"/>'+j}}}return o},execute:function(k,j){var i=new g.SearchCriteria();k=g.Utilities.extendObject(i,k);if(!j){g.Exception.raise("You need to provide a search callback, or you will never know what was found")}if(k.map){k.position=k.map.getCenter();if(!k.radiusOverride){k.radius=k.map.getRadius()}}if(!k.position){g.Exception.raise("A position is required to search. Please provide one in the search criteria")}return g.JSRequest.send(this.getXML(k),this.handleResponse.bind(this,j),this.handleFailure.bind(this,j))},handleResponse:function(q,k){var j;try{if(g.Utilities.isArray(k.XLS.Response)){var m=[];for(var l=0;l<k.XLS.Response.length;l++){j=k.XLS.Response[l].DirectoryResponse.POIContext;if(j){var o=g.Utilities.makeArrayFix(j);m=m.concat(o)}}q(m)}else{j=k.XLS.Response.DirectoryResponse.POIContext;if(j){q(g.Utilities.makeArrayFix(k.XLS.Response.DirectoryResponse.POIContext))}else{q([])}}}catch(n){q([],{message:n.message,param:k})}},handleFailure:function(j,i){j([],{param:i,message:"Error executing search"})}};g.Geocoder={getGeocodeXML:function(i){if(i.type=="freeForm"){var j='      <xls:Request maximumResponses="10" version="1.0" requestID="9132342" methodName="GeocodeRequest">            <xls:GeocodeRequest returnFreeForm="false">'+i.toXML()+"            </xls:GeocodeRequest>      </xls:Request>"}else{var j="      <xls:Request maximumResponses='10' version='1.0' requestID='4387206' methodName='GeocodeRequest'>            <xls:GeocodeRequest returnFreeForm='false'>                  <xls:Address countryCode='"+i.locale.country+"' language='"+i.locale.language+"'>";if(i.buildingNumber||i.street){j+="           <xls:StreetAddress>                              <xls:Building number='"+i.buildingNumber+"'/>                              <xls:Street>"+i.street+"</xls:Street>                        </xls:StreetAddress>"}if(i.municipality){j+="                        <xls:Place type='Municipality'>"+i.municipality+"</xls:Place>"}if(i.municipalitySubdivision){j+="                        <xls:Place type='MunicipalitySubdivision'>"+i.municipalitySubdivision+"</xls:Place>"}if(i.countrySubdivision){j+="                        <xls:Place type='CountrySubdivision'>"+i.countrySubdivision+"</xls:Place>"}if(i.countrySecondarySubdivision){j+="                        <xls:Place type='CountrySecondarySubdivision'>"+i.countrySecondarySubdivision+"</xls:Place>"}if(i.countryTertiarySubdivision){j+="                        <xls:Place type='CountryTertiarySubdivision'>"+i.countryTertiarySubdivision+"</xls:Place>"}if(i.postalCode){j+="                        <xls:PostalCode>"+i.postalCode+"</xls:PostalCode>"}j+="                  </xls:Address>            </xls:GeocodeRequest>      </xls:Request>"}return j},getRevGeocodeXML:function(j){var i="<xls:Request maximumResponses='10' version='1.0' requestID='0123456789' methodName='ReverseGeocodeRequest'><xls:ReverseGeocodeRequest><xls:Position><gml:Point><gml:pos>"+j.getLat()+" "+j.getLon()+"</gml:pos></gml:Point></xls:Position><xls:ReverseGeocodePreference>StreetAddress</xls:ReverseGeocodePreference></xls:ReverseGeocodeRequest></xls:Request>";return i},geocode:function(i,j){if(!i.type||!(i.type in {freeForm:true,structured:true})){g.Exception.raise("When using the geocode function, the first parameter must be an address object")}if(typeof j!=="function"){g.Exception.raise("When using the geocode function, the second parameter must be a callback function")}g.JSRequest.send(this.getGeocodeXML(i),this.handleResponse.bind(this,j),this.handleFailure.bind(this,j))},reverseGeocode:function(i,j){if(typeof j!=="function"){g.Exception.raise("When using the reverseGeocode function, the second parameter must be a callback function")}g.JSRequest.send(this.getRevGeocodeXML(i),this.handleRevResponse.bind(this,j),this.handleFailure.bind(this,j))},handleRevResponse:function(m,j){var l=j.XLS.Response.ReverseGeocodeResponse.ReverseGeocodedLocation;var k={};k.Address=new g.StructuredAddress();k.Address.fromWSResponse(l.Address);var i=l.Point.pos.split(" ");k.Position=new g.Position(i[0],i[1]);m(k,l)},handleResponse:function(q,k){var j="Unknown";try{if(k.XLS.Response.ErrorList.Error.message){q({error:k.XLS.Response.ErrorList.Error.message});return}}catch(m){}try{var s=k.XLS.Response.GeocodeResponse.GeocodeResponseList.GeocodedAddress;var n=null;if(typeof s=="object"&&!s.length){n=[];n.push(s)}else{n=s}for(var l=0;l<n.length;l++){var r=new g.StructuredAddress();r.fromWSResponse(n[l].Address);n[l].Address=r;var o=n[l].Point.pos.split(" ");n[l].Position=new g.Position(o[0],o[1])}q(n,s)}catch(m){try{j=k.XLS.Response.ErrorList.Error.message}catch(m){}g.Exception.raise("Error handling response: "+j)}},handleFailure:function(){}};g.Routing={getXML:function(r){var m="<xls:Request maximumResponses='10' version='1.0' requestID='0123456789' methodName='DetermineRouteRequest'><xls:DetermineRouteRequest distanceUnit='"+r.distanceUnit+"' routeQueryType='"+r.routeQueryType+"' provideRouteHandle='"+r.provideRouteHandle+"'><xls:RoutePlan><xls:RoutePreference>"+r.routePreference+"</xls:RoutePreference><xls:WayPointList>";var q="";var o=r.waypoints.shift();var j=r.waypoints.pop();q="<xls:StartPoint><xls:Position><gml:Point><gml:pos>"+o.getLat()+" "+o.getLon()+"</gml:pos></gml:Point></xls:Position></xls:StartPoint>";for(var l=0;l<r.waypoints.length;l++){var n=r.waypoints[l];q+="<xls:ViaPoint><xls:Position><gml:Point><gml:pos>"+n.getLat()+" "+n.getLon()+"</gml:pos></gml:Point></xls:Position></xls:ViaPoint>"}q+="<xls:EndPoint><xls:Position><gml:Point><gml:pos>"+j.getLat()+" "+j.getLon()+"</gml:pos></gml:Point></xls:Position></xls:EndPoint>";var k="</xls:WayPointList></xls:RoutePlan><xls:RouteInstructionsRequest providePoint='true' rules='"+r.instructionRules+"'/><xls:RouteGeometryRequest returnRouteIDOnly='false'/></xls:DetermineRouteRequest></xls:Request>";return m+q+k},execute:function(k,j){if(!k.waypoints||k.waypoints.length<2){g.Exception.raise("At least two waypoints are required for routing. criteria.waypoints is not a valid array, or does not contain 2 waypoints.")}var i=new g.RouteCriteria();k=g.Utilities.extendObject(i,k);g.JSRequest.send(this.getXML(k),this.handleResponse.bind(this,j),this.handleFailure.bind(this,j))},handleResponse:function(k,i){try{k(i.XLS.Response.DetermineRouteResponse)}catch(j){k({},{message:"Error executing request"})}},handleFailure:function(){callback({},{message:"Error executing request"})}};g.StructuredAddress=function(j,i){if(!j){j={}}this.locale=i||new g.Locale("en","US");if(j.buildingNumber||j.buildingNumber==0){this.buildingNumber=j.buildingNumber}else{this.buildingNumber=""}this.landmark="";this.street=j.street||"";this.streetNameAndNumber="";this.speedLimit="";this.countryCode="";this.countrySubdivision=j.countrySubdivision||"";this.countrySecondarySubdivision=j.countrySecondarySubdivision||"";this.countryTertiarySubdivision="";this.municipality=j.municipality||"";this.postalCode=j.postalCode||"";this.municipalitySubdivision=j.municipalitySubdivision||"";this.type="structured"};g.StructuredAddress.prototype={toString:function(){var i="";if(this.buildingNumber!=""&&typeof this.buildingNumber!="object"){i+=this.buildingNumber+" "}if(this.street!=""&&typeof this.street==="string"){i+=this.street+" "}if((g.Configuration.country==="CH")&&this.municipalitySubdivision!=""&&typeof this.municipalitySubdivision==="string"){i+=this.municipalitySubdivision+" "}if(this.municipality!=""&&typeof this.municipality==="string"){i+=this.municipality+" "}else{if(this.municipalitySubdivision!=""&&typeof this.municipalitySubdivision==="string"){i+=this.municipalitySubdivision+" "}}if(this.countrySubdivision!=""&&typeof this.countrySubdivision==="string"){i+=this.countrySubdivision+" "}if(this.postalCode!=""&&typeof this.postalCode==="string"){i+=this.postalCode}return i},fromWSResponse:function(k){if(k.StreetAddress){if(k.StreetAddress.Building){this.buildingNumber=k.StreetAddress.Building.number}if(k.StreetAddress.Street){this.street=k.StreetAddress.Street}}if(k.countryCode){this.locale.country=k.countryCode}if(k.language){this.locale.language=k.language}if(k.Place){for(var j=0;j<k.Place.length;j++){var l=k.Place[j].type.substring(0,1).toLowerCase()+k.Place[j].type.substring(1);this[l]=k.Place[j].content}}},fromWSAddressResponse:function(i){for(var j in this){if(this.hasOwnProperty(j)&&i[j]){this[j]=i[j]}}},toXML:function(){},toFreeForm:function(){return new g.FreeFormAddress(this.toString(),new g.Locale("EN","US"))}};g.FreeFormAddress=function(j,i){this.address=j;this.locale=i;this.type="freeForm"};g.FreeFormAddress.prototype={toString:function(){},toXML:function(){var i='<xls:Address countryCode="'+this.locale.getCountry()+'" language="'+this.locale.getLanguage()+'"><xls:freeFormAddress>'+this.address+"</xls:freeFormAddress></xls:Address>";return i}};g.SearchCriteria=function(){};g.SearchCriteria.prototype={queryString:null,maximumResponses:10,database:"search:decarta:poi",sortDirection:"Ascending",sortCriteria:"Distance",rankCriteria:"Score",allowAggregates:false,retrieveAll:false,properties:{},position:null,radius:new g.Radius(5,"km"),routeId:null,corridorType:null,map:null};g.RouteCriteria=function(){};g.RouteCriteria.prototype={distanceUnit:"M",routeQueryType:"RMAN",provideRouteHandle:"true",routePreference:"Fastest",waypoints:[],instructionProvidePoint:"true",instructionRules:"maneuver-rules",returnIdOnly:"false"};g.PositionAnimator=function(i){if(i){this.animate(i)}};g.PositionAnimator.prototype={animate:function(i){var j={start:null,end:null,duration:300,easing:"linear",onStep:null,onEnd:null};if(!i.start||!i.end||!i.onStep){g.Exception.raise("You need to specify a start point, and end point and a callback for a position animation")}i=g.Utilities.extendObject(j,i);this.start=i.start;this.end=i.end;this.duration=i.duration;this.onStep=i.onStep;this.onEnd=i.onEnd;this.easingX=(i.easingX)?i.easingX:(i.easing)?i.easing:"linear";this.easingY=(i.easingY)?i.easingY:(i.easing)?i.easing:"linear";this.easingFnX=d.Easing(this.easingX);this.easingFnY=d.Easing(this.easingY);this.startTime=new Date().getTime();this.endTime=this.startTime+this.duration;this.step()},step:function(){var o=new Date().getTime()-this.startTime;var l=1-((this.endTime-new Date().getTime())/this.duration);if(l>=0.99){if(typeof this.onEnd==="function"){this.onEnd(this.end)}}else{var n=this.posToPix(this.start);var k=this.posToPix(this.end);var j=k.x-n.x;var i=k.y-n.y;var m=this.pixToPos({x:this.easingFnX(o,n.x,j,this.duration),y:this.easingFnY(o,n.y,i,this.duration)});if(typeof this.onStep==="function"){this.onStep(m)}requestAnimFrame(this.step.bind(this))}},posToPix:function(i){return{x:g.Utilities.lon2pix(i.getLon(),21),y:g.Utilities.lat2pix(i.getLat(),21)}},pixToPos:function(i){return new g.Position(g.Utilities.pix2lat(i.y,21),g.Utilities.pix2lon(i.x,21))}};d.Easing=function(m){var i=Math.PI*2,n=Math.PI/2;var t=Math.abs,l=Math.pow,o=Math.sin,k=Math.asin,q=Math.cos;var r=1.70158;var j={linear:function(u,s,w,v){return w*u/v+s},backin:function(u,s,w,v){return w*(u/=v)*u*((r+1)*u-r)+s},backout:function(u,s,w,v){return w*((u=u/v-1)*u*((r+1)*u+r)+1)+s},backinout:function(u,s,w,v){return((u/=v/2)<1)?w/2*(u*u*(((r*=(1.525))+1)*u-r))+s:w/2*((u-=2)*u*(((r*=(1.525))+1)*u+r)+2)+s},bouncein:function(u,s,w,v){return w-j.bounceout(v-u,0,w,v)+s},bounceout:function(u,s,w,v){if((u/=v)<(1/2.75)){return w*(7.5625*u*u)+s}else{if(u<(2/2.75)){return w*(7.5625*(u-=(1.5/2.75))*u+0.75)+s}else{if(u<(2.5/2.75)){return w*(7.5625*(u-=(2.25/2.75))*u+0.9375)+s}else{return w*(7.5625*(u-=(2.625/2.75))*u+0.984375)+s}}}},bounceinout:function(u,s,w,v){if(u<v/2){return j.bouncein(u*2,0,w,v)/2+s}else{return j.bounceout(u*2-v,0,w,v)/2+w/2+s}},cubicin:function(u,s,w,v){return w*(u/=v)*u*u+s},cubicout:function(u,s,w,v){return w*((u=u/v-1)*u*u+1)+s},cubicinout:function(u,s,w,v){if((u/=v/2)<1){return w/2*u*u*u+s}return w/2*((u-=2)*u*u+2)+s},elasticin:function(w,u,B,A,v,y){var x;if(w==0){return u}if((w/=A)==1){return u+B}if(!y){y=A*0.3}if(!v||v<t(B)){v=B;x=y/4}else{x=y/i*k(B/v)}return -(v*l(2,10*(w-=1))*o((w*A-x)*i/y))+u},elasticout:function(w,u,B,A,v,y){var x;if(w==0){return u}if((w/=A)==1){return u+B}if(!y){y=A*0.3}if(!v||v<t(B)){v=B;x=y/4}else{x=y/i*k(B/v)}return(v*l(2,-10*w)*o((w*A-x)*i/y)+B+u)},elasticinout:function(w,u,B,A,v,y){var x;if(w==0){return u}if((w/=A/2)==2){return u+B}if(!y){y=A*(0.3*1.5)}if(!v||v<t(B)){v=B;x=y/4}else{x=y/i*k(B/v)}if(w<1){return -0.5*(v*l(2,10*(w-=1))*o((w*A-x)*i/y))+u}return v*l(2,-10*(w-=1))*o((w*A-x)*i/y)*0.5+B+u},quadin:function(u,s,w,v){return w*(u/=v)*u+s},quadout:function(u,s,w,v){return -w*(u/=v)*(u-2)+s},quadinout:function(u,s,w,v){if((u/=v/2)<1){return w/2*u*u+s}return -w/2*((--u)*(u-2)-1)+s},sinein:function(u,s,w,v){return -w*q(u/v*n)+w+s},sineout:function(u,s,w,v){return w*o(u/v*n)+s},sineinout:function(u,s,w,v){return -w/2*(q(Math.PI*u/v)-1)+s}};return(j[m])?j[m]:j.linear};g.HTMLRenderer=function(i){this.container=i;this.imageWrapper=d.crEl("div");this.imageWrapper.style.position="absolute";this.imageWrapper.style.overflow="hidden";this.imageWrapper.style.top=this.imageWrapper.style.left=0;this.resize();this.container.appendChild(this.imageWrapper);this.images=[];this.bmark={counts:0,renderTime:0};this.scale=d.Window.getDpr()};g.HTMLRenderer.prototype={resize:function(){this.imageWrapper.style.width=this.container.style.width;this.imageWrapper.style.height=this.container.style.height},render:function(i){var j=new Date().getTime();this.renderReplace(i);this.bmark.renderTime+=new Date().getTime()-j;this.bmark.counts++},show:function(){this.imageWrapper.style.display="block"},hide:function(){this.imageWrapper.style.display="none"},renderRestore:function(n){var l=g.Utilities.removeElementToReinsert(this.imageWrapper);var m=this.imageWrapper;m.innerHTML="";for(var k=0;k<n.length;k++){var j=n[k];j.img.className="deCarta-mobile-tileImage";if(j.img.empty){j.img.className+=" blank";j.img.src=g.Constants.BLANKTILE}j.img.style.position="absolute";j.y=Math.floor(j.y);j.x=Math.floor(j.x);j.size=Math.ceil(j.size);j.img.style.top=j.y+"px";j.img.style.left=j.x+"px";j.img.style.width=j.img.style.height=j.size+"px";m.appendChild(j.img)}l()},renderReplace:function(m){var l=d.crEl("div");for(var k=0;k<m.length;k++){var j=m[k];j.img.className="deCarta-mobile-tileImage";if(j.img.empty){j.img.className+=" blank";j.img.src=g.Constants.BLANKTILE}j.img.style.position="absolute";j.y=Math.floor(j.y);j.x=Math.floor(j.x);j.size=Math.ceil(j.size);j.img.style.top=j.y+"px";j.img.style.left=j.x+"px";j.img.style.width=j.img.style.height=j.size+"px";l.appendChild(j.img)}this.imageWrapper.parentNode.replaceChild(l,this.imageWrapper);this.imageWrapper=l},renderString:function(n){var m=d.crEl("div");var k="";for(var l=0;l<n.length;l++){var j=n[l];k+='<img src="'+j.img.src+'" class="deCarta-mobile-tileImage '+(j.img.empty?"blank":"")+'" style="position: absolute; top: '+Math.floor(j.y)+"px; left: "+Math.floor(j.x)+"px; width: "+Math.ceil(j.size)+"px; height: "+Math.ceil(j.size)+' " />'}m.innerHTML=k;this.imageWrapper.parentNode.replaceChild(m,this.imageWrapper);this.imageWrapper=m}};g.CSS3Renderer=function(i){this.container=i;this.imageWrapper=d.crEl("div");this.imageWrapper.style.position="absolute";this.imageWrapper.style.overflow="hidden";this.imageWrapper.style.top=this.imageWrapper.style.left=0;this.resize();this.container.appendChild(this.imageWrapper);this.images=[];this.visibleKeys={};this.imageWrapper.id="deCarta-Mob-Renderer-"+Math.floor(Math.random()*10000);this.id=0;this.scale=d.Window.getDpr()};g.CSS3Renderer.prototype={resize:function(){this.imageWrapper.style.width=this.container.style.width;this.imageWrapper.style.height=this.container.style.height},render:function(s){var o={};for(var m=0;m<s.length;m++){var j=s[m];j.img.className="deCarta-mobile-tileImage";if(j.img.empty){j.img.className+=" blank";j.img.src=g.Constants.BLANKTILE}j.img.style.position="absolute";var r=j.size/j.img.width;j.img.style.webkitTransformOrigin=" 0 0 ";j.img.style.webkitTransform="translate3d("+j.x+"px, "+j.y+"px, 0) scale("+r+") ";j.img.style.MozTransform="translate3d("+j.x+"px, "+j.y+"px, 0) scale("+r+") ";j.img.style.OTransform="translate3d("+j.x+"px, "+j.y+"px, 0) scale("+r+") ";if(!j.img.parentNode){j.img.id=this.imageWrapper.id+"_"+this.id++;this.imageWrapper.appendChild(j.img);this.visibleKeys[j.img.key]=j.img.id}o[j.img.key]=j.img.id}for(var l in this.visibleKeys){if(!o[l]){try{var n=d.geId(this.visibleKeys[l]);n.parentNode.removeChild(n);this.visibleKeys[l]=false;delete this.visibleKeys[l]}catch(q){console.log("CSS3Renderer",q,o[l],l)}}}},show:function(){this.imageWrapper.style.display="block"},hide:function(){this.imageWrapper.style.display="none"}};e.deCarta=d;e._dM=d.Mobile;e._dU=d.Mobile.Utilities})(window);
