(function(){var window=this;var nearmap=window.nearmap;if(!nearmap){nearmap={};}
else if(typeof nearmap!=='object'){throw new Error('The nearmap namespace must be an object. It is currently a '+typeof nearmap);}
if(!nearmap.threading){nearmap.threading={};}
else if(typeof nearmap.threading!=='object'){throw new Error('The nearmap.threading namespace must be an object. It is currently a '+typeof nearmap.threading);}
if(!nearmap.generics){nearmap.generics={};}
else if(typeof nearmap.generics!=='object'){throw new Error('The nearmap.generics namespace must be an object. It is currently a '+typeof nearmap.generics);}
if(!nearmap.client){nearmap.client={};}
else if(typeof nearmap.client!=='object'){throw new Error('The nearmap.client namespace must be an object. It is currently a '+typeof nearmap.client);}
if(!nearmap.lib){nearmap.lib={};}
else if(typeof nearmap.lib!=='object'){throw new Error('The nearmap.lib namespace must be an object. It is currently a '+typeof nearmap.lib);}
if(!nearmap.lib.math){nearmap.lib.math={};}
else if(typeof nearmap.lib.math!=='object'){throw new Error('The nearmap.lib.math namespace must be an object. It is currently a '+typeof nearmap.lib.math);}
if(!nearmap.lib.sprite){nearmap.lib.sprite={};}
else if(typeof nearmap.lib.sprite!=='object'){throw new Error('The nearmap.lib.sprite namespace must be an object. It is currently a '+typeof nearmap.lib.sprite);}
if(!nearmap.lib.history){nearmap.lib.history={};}
else if(typeof nearmap.lib.history!=='object'){throw new Error('The nearmap.lib.history namespace must be an object. It is currently a '+typeof nearmap.lib.history);}
if(!nearmap.lib.dragndrop){nearmap.lib.dragndrop={};}
else if(typeof nearmap.lib.dragndrop!=='object'){throw new Error('The nearmap.lib.dragndrop namespace must be an object. It is currently a '+typeof nearmap.lib.dragndrop);}
if(!nearmap.style){nearmap.style={};}
else if(typeof nearmap.style!=='object'){throw new Error('The nearmap.style namespace must be an object. It is currently a '+typeof nearmap.style);}
if(!nearmap.event){nearmap.event={};}
else if(typeof nearmap.event!=='object'){throw new Error('The nearmap.event namespace must be an object. It is currently a '+typeof nearmap.event);}
if(!nearmap.mobile){nearmap.mobile={};}
else if(typeof nearmap.mobile!=='object'){throw new Error('The nearmap.mobile namespace must be an object. It is currently a '+typeof nearmap.mobile);}
if(!nearmap.touch){nearmap.touch={};}
else if(typeof nearmap.touch!=='object'){throw new Error('The nearmap.touch namespace must be an object. It is currently a '+typeof nearmap.touch);}
if(!nearmap.overlay){nearmap.overlay={};}
else if(typeof nearmap.overlay!=='object'){throw new Error('The nearmap.overlay namespace must be an object. It is currently a '+typeof nearmap.overlay);}
if(!nearmap.maps){nearmap.maps={};}
else if(typeof nearmap.maps!=='object'){throw new Error('The nearmap.maps namespace must be an object. It is currently a '+typeof nearmap.maps);}
if(!nearmap.memory){nearmap.memory={};}
else if(typeof nearmap.memory!=='object'){throw new Error('The nearmap.memory namespace must be an object. It is currently a '+typeof nearmap.memory);}
if(!nearmap.http){nearmap.http={};}
else if(typeof nearmap.http!=='object'){throw new Error('The nearmap.http namespace must be an object. It is currently a '+typeof nearmap.http);}
if(!nearmap.dom){nearmap.dom={};}
else if(typeof nearmap.dom!=='object'){throw new Error('The nearmap.dom namespace must be an object. It is currently a '+typeof nearmap.dom);}
if(!nearmap.options){nearmap.options={};}
else if(typeof nearmap.options!=='object'){throw new Error('The nearmap.options namespace must be an object. It is currently a '+typeof nearmap.options);}
if(!nearmap.json){nearmap.json={};}
else if(typeof nearmap.json!=='object'){throw new Error('The nearmap.json namespace must be an object. It is currently a '+typeof nearmap.json);}
if(!nearmap.ajax){nearmap.ajax={};}
else if(typeof nearmap.ajax!=='object'){throw new Error('The nearmap.ajax namespace must be an object. It is currently a '+typeof nearmap.ajax);}
if(!nearmap.animation){nearmap.animation={};}
else if(typeof nearmap.animation!=='object'){throw new Error('The nearmap.animation namespace must be an object. It is currently a '+typeof nearmap.animation);}
window.nearmap=nearmap;})();(function(){var window=this;var nearmap=window.nearmap;var nmt=nearmap.threading;function later(functor){window.setTimeout(functor,0);}
nmt.later=later;})();(function(){var window=this;var nearmap=window.nearmap;var nml=nearmap.lib;var nmg=nearmap.generics;function Dictionary(){var _allKeys=[];var _store={};function add(key,value){if(_store[key]===undefined){_allKeys.push(key);}
_store[key]=value;}
function remove(key){var i=nml.ArrayHelper.indexOf(_allKeys,key);if(i<0){return false;}
_allKeys.splice(i,1);delete _store[key];return true;}
function exists(key){return _store[key]!==undefined?true:false;}
function getValue(key){return _store[key]||null;}
function clear(){_allKeys=[];_store={};}
function getAllKeys(){return _allKeys.slice();}
this.add=add;this.remove=remove;this.exists=exists;this.getValue=getValue;this.clear=clear;this.getAllKeys=getAllKeys;}
nmg.Dictionary=Dictionary;})();(function(){var window=this;var nmc=window.nearmap.client;function parseOS(){var ua=window.navigator.userAgent;return{windows:/\(Windows;/i.test(ua),mac:/\(Mac;/i.test(ua),linux:/\(Linux;/i.test(ua),iPhone:/\(iPhone;/i.test(ua),iPod:/\(iPod;/i.test(ua)};}
function parseBrowser(){var ver;var verTkn;var ua=window.navigator.userAgent;var browsers={mozilla:/Gecko\//i.test(window.navigator.userAgent),chrome:/Chrome\//i.test(window.navigator.appVersion),safari:/AppleWebKit.+Version.+/i.test(window.navigator.appVersion),opera:/Opera/i.test(window.navigator.userAgent),msie:/MSIE/i.test(window.navigator.userAgent)};if(browsers.mozilla){ver=ua.match(/rv:(\d+[\.\d*]*)/);if(ver.length>1){verTkn=ver[1].split('.');browsers.majorVersion=verTkn[0]+'.'+(verTkn.length>1?verTkn[1]:0);browsers.minorVersion=(verTkn.length>2?verTkn[2]:0)+(verTkn.length>3?'.'+verTkn[3]:'');}
else{browsers.majorVersion=0;browsers.minorVersion=0;}}
else if(browsers.chrome){ver=window.navigator.appVersion.match(/Chrome\/(\d+[\.\d*]*)/);if(ver.length>1){verTkn=ver[1].split('.');browsers.majorVersion=verTkn[0]+'.'+(verTkn.length>1?verTkn[1]:0);browsers.minorVersion=(verTkn.length>2?verTkn[2]:0)+(verTkn.length>3?'.'+verTkn[3]:'');}
else{browsers.majorVersion=0;browsers.minorVersion=0;}}
else if(browsers.safari){ver=window.navigator.appVersion.match(/Version\/(\d+[\.\d*]*)/);if(ver.length>1){verTkn=ver[1].split('.');browsers.majorVersion=verTkn[0];browsers.minorVersion=(verTkn.length>1?verTkn[1]:0)+(verTkn.length>2?'.'+verTkn[2]:'');}
else{browsers.majorVersion=0;browsers.minorVersion=0;}}
else if(browsers.opera){ver=ua.match(/Opera\/(\d+[\.\d*]*)/);if(ver.length>1){verTkn=ver[1].split('.');browsers.majorVersion=verTkn[0];browsers.minorVersion=verTkn[1];}
else{browsers.majorVersion=0;browsers.minorVersion=0;}}
else if(browsers.msie){ver=ua.match(/MSIE (\d+[\.\d*]*)/);if(ver.length>1){verTkn=ver[1].split('.');browsers.majorVersion=verTkn[0];browsers.minorVersion=verTkn[1];}
else{browsers.majorVersion=0;browsers.minorVersion=0;}}
else{browsers.majorVersion=0;browsers.minorVersion=0;}
return browsers;}
nmc.os=parseOS();nmc.browser=parseBrowser();})();(function(){var window=this;var nmm=window.nearmap.maps;var nml=window.nearmap.lib;var nmlm=window.nearmap.lib.math;function Random(seed){this.m=0x100000000;this.a=1103515245;this.c=12345;this.state=seed?seed:Math.floor(Math.random()*(this.m-1));this.nextInt=function(){this.state=(this.a*this.state+this.c)%this.m;return this.state;};this.nextFloat=function(){return this.nextInt()/(this.m-1);};this.nextRange=function(start,end){var rangeSize=end-start;var randomUnder1=this.nextInt()/this.m;return start+Math.floor(randomUnder1*rangeSize);};this.choice=function(array){return array[this.nextRange(0,array.length)];};}
function rotatePoint(angle,point,origin,roundToPrecision){var theta=angle*nml.PI/180;var cos=Math.cos(theta);var sin=Math.sin(theta);var dx=point.x-origin.x;var dy=point.y-origin.y;var rp;var rx;var ry;dx*=100;dy*=100;origin.x*=100;origin.y*=100;rp=new nmm.Point(cos*dx-sin*dy+origin.x,sin*dx+cos*dy+origin.y);rp.x/=100;rp.y/=100;if(roundToPrecision&&typeof roundToPrecision==='function'){rp.x=roundToPrecision(rp.x);rp.y=roundToPrecision(rp.y);}
return rp;}
nmlm.Random=Random;nmlm.rotatePoint=rotatePoint;})();(function(){var window=this;var nearmap=window.nearmap;var nml=nearmap.lib;var ajax=nearmap.ajax;var ArrayHelper={indexOf:function(arr,elt){var len=arr.length;var from=Number(arguments[2])||0;from=(from<0)?Math.ceil(from):Math.floor(from);if(from<0){from+=len;}
for(;from<len;from++){if(from in arr&&arr[from]===elt){return from;}}
return-1;},find:function(arr,searchStr){var returnArray=false;for(var i=0;i<arr.length;i++){if(typeof(searchStr)=='function'){if(searchStr.test(arr[i])){if(!returnArray){returnArray=[];}
returnArray.push(i);}}else{if(arr[i]===searchStr){if(!returnArray){returnArray=[];}
returnArray.push(i);}}}
return returnArray;}};var StringHelper={sumUnicode:function(str){var sum=0;if(typeof str!=='string'){throw new Error('Unicode argument is invalid you must provide a string. You have used a '+(typeof str));}
for(var i=0;i<str.length;i++){sum+=str.charCodeAt(i);}
return sum;}};var DateHelper={fromNearmapDateUTC:function(str){if(typeof str!=='string'){throw new Error('The date you wish to format must be a string it is currently: '+(typeof str));}
if(str.length!==8){throw new Error('The nearmap date string you wish to parse must be 8 characters. It\'s current length is: '+str.length);}
return new Date(Date.UTC(str.substring(0,4),(str.substring(4,6)-1),str.substring(6,8)));},toNearmapDateUTC:function(date){var dd;var mm;var yyyy;if(!(date instanceof Date)){return'';}
dd=date.getUTCDate();if(dd<10){dd='0'+dd;}
mm=date.getUTCMonth()+1;if(mm<10){mm='0'+mm;}
yyyy=date.getUTCFullYear();return yyyy.toString()+mm.toString()+dd.toString();},smallMonth:function(month){switch(month){case 0:return'Jan';case 1:return'Feb';case 2:return'Mar';case 3:return'Apr';case 4:return'May';case 5:return'Jun';case 6:return'Jul';case 7:return'Aug';case 8:return'Sep';case 9:return'Oct';case 10:return'Nov';case 11:return'Dec';default:return'';}},smallDateUTC:function(date){return date.getUTCDate()+' '+DateHelper.smallMonth(date.getUTCMonth())+' '+date.getUTCFullYear();},dateExists:function(dates,find){var len=dates.length;var findMs=find.getTime();for(var i=0;i<len;i++){if(findMs-dates[i].getTime()===0){return true;}}
return false;},dateListDifferent:function(arr1,arr2){var isDiff=false;var i;if(arr1||arr2){if((arr1&&!arr2)||(!arr1&&arr2)||(arr1.length!==arr2.length)){isDiff=true;}
else{i=0;while(!isDiff&&i<arr1.length){isDiff=!this.dateExists(arr2,arr1[i]);i++;}}}
return isDiff;},sortUniqueAsc:function(dates){var sorted=[];var d;var dMs;var sortedMs;var tail;var len;for(var i=dates.length;i--;){d=dates[i];dMs=d.getTime();len=sorted.length;for(var j=0;j<len;j++){sortedMs=sorted[j].getTime();if(dMs===sortedMs){console.log('DUPE');break;}
else if(sortedMs>dMs){tail=sorted.splice(j,sorted.length-j);sorted.push(d);sorted=sorted.concat(tail);break;}}
if(j===len){sorted.unshift(d);}}
return sorted;},insertUniqueAsc:function(dates,newDate){var sortedDates=dates.slice(0,dates.length);var len=sortedDates.length;var newDateMs=newDate.getTime();if(len>0){for(var i=0;i<len;i++){timediff=sortedDates[i].getTime()-newDateMs;if(timediff===0){return sortedDates;}
if(timediff>=0){trailDates=sortedDates.splice(i,len-i);sortedDates.push(newDate);sortedDates=sortedDates.concat(trailDates);return sortedDates;}
if(i+1===len){sortedDates.push(newDate);return sortedDates;}}}
sortedDates[0]=newDate;return sortedDates;},isDifferentDate:function(date1,date2){if((!date1&&date2)||(date1&&!date2)){return true;}
if(date1&&date2&&(date1.getTime()-date2.getTime()!==0)){console.log('2nd diff date1: %o | date2: %o',date1,date2);return true;}
return false;}};var NumberHelper={isDecimal:function(num){return num%1?true:false;}};function abortDownloads(){if(window.stop){window.stop();}
else if(document.execCommand){document.execCommand('Stop',false);}
ajax.clearTimers();}
nml.ArrayHelper=ArrayHelper;nml.StringHelper=StringHelper;nml.DateHelper=DateHelper;nml.NumberHelper=NumberHelper;nml.abortDownloads=abortDownloads;})();(function(){var window=this;var nearmap=window.nearmap;var nme=nearmap.memory;var nmc=nearmap.client;function discardElement(element){if(element.parentNode){element.parentNode.removeChild(element);}
if(nmc.browser.msie){element.outerHTML='';}}
function discardBatchElements(elements,canvas){for(var i=elements.length-1;i--;){discardElement(elements[i],canvas);}}
nme.discardElement=discardElement;nme.discardBatchElements=discardBatchElements;})();(function(){var window=this;var nm=window.nearmap;var nmc=window.nearmap.client;var nms=window.nearmap.style;function getStyle(element,property,value){if(property in element){return property.style[property];}
if(window.getComputedStyle){return window.getComputedStyle(element,null).getPropertyValue(property);}
if(element.currentStyle){return element.currentStyle[property];}
return null;}
function isClassMember(element,className){var classTkns;var i=0;if(!element.className&&typeof className==='string'){return false;}
if(element.className===className){return true;}
if(!element.className.test(/\s/)){return false;}
classTkns=element.className.split(/\s+/);while(i<classTkns.length){if(classTkns[i]===className){return true;}
i++;}}
function css(elm,prop,batch){var node;var batchStyle='';node=(typeof elm==='string'?window.document.getElementById(elm):elm);if(prop instanceof String){return getStyle(node,prop);}
for(var p in prop){if(prop.hasOwnProperty(p)){if(batch){batchStyle+=p+':'+prop[p]+';';}
else{node.style[p]=prop[p];}}}
if(batch){node.style.cssText=batchStyle;}
return node;}
function applyOpacity(elm,opacity){var node,ieOpacity;node=typeof elm==='string'?window.document.getElementById(elm):elm;ieOpacity=+(opacity*100);node.style.opacity=opacity;node.style.filter='alpha(opacity='+ieOpacity+')';}
function applyPngAlphaBg(elm,src,scale){var node;var filterStart;node=typeof elm==='string'?window.document.getElementById(elm):elm;if(nmc.browser.msie&&nmc.browser.majorVersion<=6){css(node,{filter:'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+src+'", sizingMethod="'+(scale?'scale':'image')+'")'});}
else{css(node,{background:'url('+src+')'});}}
function applyOpacityWithPngAlphaBg(elm,opacity,src,scale){var node,ieOpacity;node=typeof elm==='string'?window.document.getElementById(elm):elm;ieOpacity=+(opacity*100);node.style.opacity=opacity;node.style.filter='alpha(opacity='+ieOpacity+')';if(nmc.browser.msie&&nmc.browser.majorVersion<=6){node.style.filter+=' progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+src+'", sizingMethod="'+(scale?'scale':'image')+'")';}
else{node.style.background='url('+src+')';}}
function applyIE6Opacity(elm,opacity){var node,opFilter;node=typeof elm==='string'?window.document.getElementById(elm):elm;node.style.filter='progid:DXImageTransform.Microsoft.Alpha(opacity='+opacity+')';}
function fixPngImage(elm,url,opacity){var node;node=typeof elm==='string'?window.document.getElementById(elm):elm;if(nmc.browser.msie&&nmc.browser.majorVersion<=6){applyPngAlphaBg(node,url);applyIE6Opacity(node.firstChild,opacity);}}
function replaceIEPngTile(img){var node;if(nmc.browser.msie&&nmc.browser.majorVersion<=6){node=typeof img==='string'?window.document.getElementById(img):img;node.replaceTransparent=true;}}
nms.css=css;nms.isClassMember=isClassMember;nms.applyOpacity=applyOpacity;nms.applyOpacityWithPngAlphaBg=applyOpacityWithPngAlphaBg;nms.applyPngAlphaBg=applyPngAlphaBg;nms.fixPngImage=fixPngImage;nms.replaceIEPngTile=replaceIEPngTile;})();(function(){var window=this;var nmev=window.nearmap.event;var nml=window.nearmap.lib;var nmd=window.nearmap.dom;var nmb=window.nearmap.browser;var lookupPrefix='element';var eventPrefix='event';var objList=[];var domList=[];var objEvents={};var domEvents={};var EventListener={source:null,handler:null,remove:null};var MouseButton={LEFT_BUTTON:1,RIGHT_BUTTON:2,MIDDLE_BUTTON:3};function normalizeWheelDelta(e){if(e.wheelDelta){return e.wheelDelta<0?-1:1;}
else if(e.detail){return e.detail<0?1:-1;}
return 0;}
function disableSelect(elm){if(typeof(elm.onselectstart)!=="undefined"){elm.onselectstart=preventDefault;}
else{elm.onmousedown=preventDefault;}}
function getMouseButton(event){if(!event.which&&event.button){switch(event.button){case 1:return MouseButton.LEFT_BUTTON;case 2:return MouseButton.RIGHT_BUTTON;case 4:return MouseButton.MIDDLE_BUTTON;default:return-1;}}
else if(event.which){switch(event.which){case 1:return MouseButton.LEFT_BUTTON;case 2:return MouseButton.MIDDLE_BUTTON;case 3:return MouseButton.RIGHT_BUTTON;}}
else{throw new Exception('The mouse button event must be either the w3c or ie event object');}}
function getMockEvent(e){var mock={};if(e.clientX){mock.clientX=e.clientX;}
if(e.clientY){mock.clientY=e.clientY;}
if(e.screenY){mock.screenX=e.screenX;}
if(e.screenY){mock.screenY=e.screenY;}
if(e.target){mock.target=e.target;}
if(e.srcElement){mock.srcElement=e.srcElement;}
if(e.relatedTarget){mock.relatedTarget=e.relatedTarget;}
if(e.toElement){mock.toElement=e.toElement;}
if(e.wheelDelta){mock.wheelDelta=e.wheelDelta;}
if(e.detail){mock.detail=e.detail;}
if(e.which){mock.which=e.which;}
if(e.button){mock.button=e.button;}
return mock;}
function stopBubblingDom2(e){e=e||window.event;e.cancelBubble=true;if(e.stopPropagation){e.stopPropagation();}}
function stopBubbling(e){stopBubblingDom2(e);return false;}
function preventDefault(e){e=e||window.event;e.returnValue=false;if(e.preventDefault){e.preventDefault();}
return false;}
function getTarget(e){return e.target||e.srcElement;}
function getRelatedTarget(e){return e.relatedTarget||e.toElement;}
function createListener(source,handler,remove){return{source:source,handler:handler,remove:remove};}
function validateEvent(event,handler){if(typeof event!=='string'){throw new Error('Event name must be a string');}
if(typeof handler!=='function'){throw new Error('Event handler must be a function');}
return true;}
function enqueueListener(list,eventQueue,source,event,handler){var key;var listener;var eventKey=eventPrefix+event;var objectKey;key=nml.ArrayHelper.indexOf(list,source);if(key===-1){key=list.length;objectKey=lookupPrefix+key;list[key]=source;eventQueue[objectKey]={};eventQueue[objectKey].length=0;}
else{objectKey=lookupPrefix+key;}
listener=createListener(source,handler,function testf(){var evQueue=eventQueue[objectKey][eventKey];for(var i=evQueue.length-1;i>=0;i--){if(evQueue[i]===listener){if(eventQueue===domEvents){removeDomListener(source,event,handler);}
if(evQueue.length===1){delete eventQueue[objectKey][eventKey];eventQueue[objectKey].length--;}
else{evQueue.splice(i,1);}
if(eventQueue[objectKey].length===0){eventQueue[objectKey]=undefined;list[key]=undefined;}
return;}}});if(!eventQueue[objectKey][eventKey]){eventQueue[objectKey][eventKey]=[];eventQueue[objectKey].length++;}
eventQueue[objectKey][eventKey].push(listener);return listener;}
function addListener(source,event,handler){validateEvent(event,handler);return enqueueListener(objList,objEvents,source,event,handler);}
function addDomListener(source,event,handler){function standard(){if(source.addEventListener){source.addEventListener(event,handler,false);}
else if(source.attachEvent){source.attachEvent('on'+event,handler);}
else{source[event]=handler;}}
function nonstandard(dom2,ie,original){if(dom2&&source.addEventListener){for(var p in dom2){if(dom2.hasOwnProperty(p)){source.addEventListener(dom2[p],handler,false);}}}
else if(ie&&source.attachEvent){source.attachEvent(ie,handler);}
else{source[original]=handler;}}
switch(event){case'mousewheel':nonstandard({firefox:'DOMMouseScroll',others:'mousewheel'},'on'+event,'on'+event);break;case'readystatechange':nonstandard(null,null,'on'+event);break;default:standard();break;}
return enqueueListener(domList,domEvents,source,event,handler);}
function removeDomListener(source,event,handler){function standard(){if(source.removeEventListener){source.removeEventListener(event,handler,false);}
else if(source.detachEvent){source.detachEvent('on'+event,handler);}
else{source[event]=null;}}
function nonstandard(dom2,ie,original){if(source.removeEventListener){for(var p in dom2){if(dom2.hasOwnProperty(p)){source.removeEventListener(dom2[p],handler,false);}}}
else if(source.detachEvent){source.detachEvent(ie,handler);}
else{source[original]=null;}}
switch(event){case'mousewheel':nonstandard({firefox:'DOMMouseScroll',others:'mousewheel'},'on'+event,'on'+event);break;default:standard();break;}}
function removeListener(handle){var key;var eventList;var elmList;if(!handle){console.log('caller: %o',removeListener.caller);throw'Your must provide a handler to remove';}
if(handle&&handle.remove&&typeof handle.remove==='function'){handle.remove();}
if(nmd.isNode(handle.source)){key=nml.ArrayHelper.indexOf(domList,handle.source);eventList=domEvents;elmList=domList;}
else{key=nml.ArrayHelper.indexOf(objList,handle.source);eventList=objEvents;elmList=objList;}}
function batchRemoveListeners(handlers){for(var i=0;i<handlers.length;i++){removeListener(handlers[i]);}}
function clearListeners(source,event){var objKey=nml.ArrayHelper.indexOf(objList,source);var domKey=nml.ArrayHelper.indexOf(domList,source);if(objKey>=0){delete objEvents[lookupPrefix+objKey][eventPrefix+event];}
if(domKey>=0){var evq=domEvents[lookupPrefix+domKey][eventPrefix+event];if(evq){for(var i=0;i<evq.length;i++){evq[i].remove();}
delete domEvents[lookupPrefix+domKey][eventPrefix+event];}}}
function clearCustomEvents(key){if(key>=0){delete objEvents[lookupPrefix+key];delete objList[key];}}
function clearDomEvents(key){var queue;var evqs;if(key>=0){evqs=domEvents[lookupPrefix+key];if(evqs){for(var p in evqs){queue=evqs[p];for(var i=0;i<queue.length;i++){queue[i].remove();}}
delete domEvents[lookupPrefix+key];}
delete domList[key];}}
function clearInstanceListeners(source){var objKey=nml.ArrayHelper.indexOf(objList,source);var domKey=nml.ArrayHelper.indexOf(domList,source);clearCustomEvents(objKey);clearDomEvents(domKey);}
function clearNode(source){if(source.firstChild){clearNode(source.firstChild);}
if(source.nextSibling){clearNode(source.nextSibling);}
clearInstanceListeners(source);}
function trigger(source,event){var key=nml.ArrayHelper.indexOf(objList,source),queuesKey,eventKey=eventPrefix+event,queue,listener,extraArgs;extraArgs=Array.apply(null,arguments).slice(2);if(key>-1){queuesKey=lookupPrefix+key;queue=objEvents[queuesKey][eventKey];if(queue){for(var i=0;i<queue.length;i++){listener=queue[i];listener.handler.apply(listener.source,extraArgs);}}}}
function bind(source,event,object,method){}
function bindDom(source,event,object,method){}
function callback(object,method){if(typeof method!=='function'){throw new Exception('The method parameter must be a function');}
return function(){method.apply(object,Array.prototype.slice.call(arguments));};}
function callbackArgs(object,method){var extraArgs;if(typeof method!=='function'){throw new Exception('The method parameter must be a function');}
extraArgs=Array.prototype.slice.call(arguments,2);return function(){method.apply(object,Array.prototype.slice.call(arguments).concat(extraArgs));};}
function unload(){for(var i=objList.length-1;i>=0;i--){clearCustomEvents(i);}
for(var j=domList.length-1;j>=0;j--){clearDomEvents(j);}}
nmev.MouseButton=MouseButton;nmev.normalizeWheelDelta=normalizeWheelDelta;nmev.disableSelect=disableSelect;nmev.getMouseButton=getMouseButton;nmev.getMockEvent=getMockEvent;nmev.stopBubblingDom2=stopBubblingDom2;nmev.stopBubbling=stopBubbling;nmev.preventDefault=preventDefault;nmev.getTarget=getTarget;nmev.getRelatedTarget=getRelatedTarget;nmev.addListener=addListener;nmev.addDomListener=addDomListener;nmev.removeListener=removeListener;nmev.batchRemoveListeners=batchRemoveListeners;nmev.clearListeners=clearListeners;nmev.clearInstanceListeners=clearInstanceListeners;nmev.clearNode=clearNode;nmev.trigger=trigger;nmev.callback=callback;nmev.callbackArgs=callbackArgs;nmev.unload=unload;})();(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nme=nearmap.memory;var nmc=nearmap.client;var nms=nearmap.style;var nmd=nearmap.dom;var nmev=nearmap.event;var nmo=nearmap.options;function create(elm,prop){var obj=document.createElement(elm);for(var p in prop){if(prop.hasOwnProperty(p)){obj[p]=prop[p];}}
return obj;}
function insertAfter(parent,node,referenceNode){parent.insertBefore(node,referenceNode.nextSibling);}
function topLeft(elm){var node=elm instanceof String?document.getElementById(elm):elm;if(!node){throw'You have not provided a valid element to topLeft()';}
return{x:node.style.left?parseInt(node.style.left,10):0,y:node.style.top?parseInt(node.style.top,10):0};}
function imageSize(img){return{height:img.height,width:img.width};}
function contains(elm,child){var node;var isDesc=false;if(elm.contains){return elm.contains(child);}
do{try{node=!node?child.parentNode:node.parentNode;if(elm===node){isDesc=true;}}
catch(e){node=null;}}while(node&&node.nodeValue!=='body'&&!isDesc);return isDesc;}
function getWindowHeight(){if(typeof(window.innerHeight)=='number'){return window.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){return document.documentElement.clientHeight;}else if(document.body&&document.body.clientHeight){return document.body.clientHeight;}}
function getWindowWidth(){if(typeof(window.innerWidth)==='number'){return window.innerWidth;}else if(document.documentElement&&document.documentElement.clientWidth){return document.documentElement.clientWidth;}else if(document.body&&document.body.clientWidth){return document.body.clientWidth;}}
function getWindowDimensions(){return{height:getWindowHeight(),width:getWindowWidth()};}
function getBodyOffsetTop(elm){var node=elm instanceof String?document.getElementById(elm):elm;var offset=node.offsetTop;var parent=node.parentNode;var pos;while(parent&&parent.tagName.toLowerCase()!=='html'){pos=parent.style.position;if(pos&&(pos==='absolute'||pos==='relative')){offset+=parent.offsetTop;}
parent=parent.parentNode;}
return offset;}
function getBodyOffsetLeft(elm){var node=elm instanceof String?document.getElementById(elm):elm;var offset=node.offsetLeft;var parent=node.parentNode;var pos;while(parent&&parent.tagName.toLowerCase()!=='html'){pos=nms.css(parent,'position');if(pos&&(pos==='absolute'||pos==='relative')){offset+=parent.offsetLeft;}
parent=parent.parentNode;}
return offset;}
function getBodyOffset(elm){return{offsetTop:getBodyOffsetTop(elm),offsetLeft:getBodyOffsetLeft(elm)};}
function isInput(nodeName){switch(nodeName.toLowerCase()){case'input':return true;case'select':return true;case'option':return true;case'textarea':return true;default:return false;}}
function getElementsByClassName(className,tag,elm){if(document.getElementsByClassName){getElementsByClassName=function(className,tag,elm){elm=elm||document;var elements=elm.getElementsByClassName(className),nodeName=(tag)?new RegExp("\\b"+tag+"\\b","i"):null,returnElements=[],current;for(var i=0,il=elements.length;i<il;i+=1){current=elements[i];if(!nodeName||nodeName.test(current.nodeName)){returnElements.push(current);}}
return returnElements;};}
else if(document.evaluate){getElementsByClassName=function(className,tag,elm){tag=tag||"*";elm=elm||document;var classes=className.split(" "),classesToCheck="",xhtmlNamespace="http://www.w3.org/1999/xhtml",namespaceResolver=(document.documentElement.namespaceURI===xhtmlNamespace)?xhtmlNamespace:null,returnElements=[],elements,node;for(var j=0,jl=classes.length;j<jl;j+=1){classesToCheck+="[contains(concat(' ', @class, ' '), ' "+classes[j]+" ')]";}
try{elements=document.evaluate(".//"+tag+classesToCheck,elm,namespaceResolver,0,null);}
catch(e){elements=document.evaluate(".//"+tag+classesToCheck,elm,null,0,null);}
while((node=elements.iterateNext())){returnElements.push(node);}
return returnElements;};}
else{getElementsByClassName=function(className,tag,elm){tag=tag||"*";elm=elm||document;var classes=className.split(" "),classesToCheck=[],elements=(tag==="*"&&elm.all)?elm.all:elm.getElementsByTagName(tag),current,returnElements=[],match;for(var k=0,kl=classes.length;k<kl;k+=1){classesToCheck.push(new RegExp("(^|\\s)"+classes[k]+"(\\s|$)"));}
for(var l=0,ll=elements.length;l<ll;l+=1){current=elements[l];match=false;for(var m=0,ml=classesToCheck.length;m<ml;m+=1){match=classesToCheck[m].test(current.className);if(!match){break;}}
if(match){returnElements.push(current);}}
return returnElements;};}
return getElementsByClassName(className,tag,elm);}
function isNode(o){return(typeof Node==="object"?o instanceof Node:typeof o==="object"&&typeof o.nodeType==="number"&&typeof o.nodeName==="string");}
function Geometry(){function isFF2Wheel(mousewheel){return mousewheel&&nmc.browser.mozilla&&nmc.browser.majorVersion<1.9;}
function getDocPosX(e,mousewheel){return(isFF2Wheel(mousewheel)?e.screenX:(e.pageX?e.pageX:e.clientX))+document.body.scrollLeft;}
function getDocPosY(e,mousewheel){return(isFF2Wheel(mousewheel)?e.screenY:(e.pageY?e.pageY:e.clientY))+document.body.scrollTop;}
function getDocPos(e,mousewheel){return{x:getDocPosX(e,mousewheel),y:getDocPosY(e,mousewheel)};}
this.getDocPosX=getDocPosX;this.getDocPosY=getDocPosY;this.getDocPos=getDocPos;}
var TooltipOptions={backgroundColor:'#004687',borderColor:'#fff',borderWidth:'1px',foregroundColor:'#fff',maxWidth:'auto',wait:500,cursorOffsetX:10,cursorOffsetY:15};function Tooltip(message,overElm,container,opts){var _popup;var _waitTimer;var _handlers=[];var _mouseupListener;function create(x,y){var tooltip=document.createElement('div');tooltip.innerHTML=message;nms.css(tooltip,{'background':opts.backgroundColor,'border-style':'solid','border-width':opts.borderWidth,'border-color':opts.borderColor,'color':opts.foregroundColor,'padding':'0px 5px','position':'absolute','left':(x+opts.cursorOffsetX)+'px','top':(y+opts.cursorOffsetY)+'px','z-index':'2','max-width':opts.maxWidth},true);return tooltip;}
function show(x,y){_waitTimer=null;_popup=create(x,y);document.body.appendChild(_popup);}
function hide(){if(_popup){nme.discardElement(_popup,container);_popup=null;}}
function setTooltipTimer(x,y){if(_waitTimer){window.clearTimeout(_waitTimer);}
_waitTimer=window.setTimeout(function(){show(x,y);},opts.wait);}
function onmousemove(e){var target;e=e||window.event;target=nmev.getTarget(e);if(!isInput(target.nodeName)&&!(/canceltooltip/.test(target.className))){hide();setTooltipTimer(e.clientX,e.clientY);}}
function onmouseout(e){if(_waitTimer){window.clearTimeout(_waitTimer);_waitTimer=null;hide();}}
this.remove=function(){hide();if(_waitTimer){window.clearTimeout(_waitTimer);_waitTimer=null;}
nmev.batchRemoveListeners(_handlers);_mouseupListener=null;_mousemoveListener=null;};opts=nmo.Synchronize.fill(opts,TooltipOptions);_handlers.push(nmev.addDomListener(overElm,'mousemove',onmousemove));_handlers.push(nmev.addDomListener(overElm,'mouseout',onmouseout));_handlers.push(nmev.addDomListener(overElm,'mousedown',hide));_handlers.push(nmev.addDomListener(overElm,'mousewheel',hide));_handlers.push(nmev.addDomListener(document,'mousemove',hide));}
nmd.create=create;nmd.insertAfter=insertAfter;nmd.topLeft=topLeft;nmd.imageSize=imageSize;nmd.getWindowHeight=getWindowHeight;nmd.getWindowWidth=getWindowWidth;nmd.getWindowDimensions=getWindowDimensions;nmd.getBodyOffsetTop=getBodyOffsetTop;nmd.getBodyOffsetLeft=getBodyOffsetLeft;nmd.getBodyOffset=getBodyOffset;nmd.isInput=isInput;nmd.isNode=isNode;nmd.contains=contains;nmd.getElementsByClassName=getElementsByClassName;nmd.Geometry=Geometry;nmd.Tooltip=Tooltip;})();(function(){var window=this;var nmo=window.nearmap.options;var Synchronize={fill:function(instance,defaults){if(!instance){return defaults;}
else{for(var p in defaults){if(defaults.hasOwnProperty(p)&&instance[p]===undefined){instance[p]=defaults[p];}}
return instance;}},copy:function(from,to){if(!from||!to){throw new Exception('You must provide an object to copy from and to');}
for(var p in from){if(from.hasOwnProperty(p)){to[p]=from[p];}}}};nmo.Synchronize=Synchronize;})();(function(){var window=this,JSON=window.nearmap.json,reISO=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/,reMsAjax=/^\/Date\((d|-|.*)\)\/$/;function f(n){return n<10?'0'+n:n;}
if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+
f(this.getUTCMonth()+1)+'-'+
f(this.getUTCDate())+'T'+
f(this.getUTCHours())+':'+
f(this.getUTCMinutes())+':'+
f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}
var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}
function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}
if(typeof rep==='function'){value=rep.call(holder,key,value);}
switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}
v=partial.length===0?'[]':gap?'[\n'+gap+
partial.join(',\n'+gap)+'\n'+
mind+']':'['+partial.join(',')+']';gap=mind;return v;}
if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}
v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+
mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}
if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}
rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}
return str('',{'':value});};}
if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}
return reviver.call(holder,key,value);}
cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+
('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}
if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}
throw new SyntaxError('JSON.parse');};}
JSON.dateStringToDate=function(dtString){var a=reISO.exec(dtString);if(a){return new Date(Date.UTC(+a[1],+a[2]-1,+a[3],+a[4],+a[5],+a[6]));}
a=reMsAjax.exec(dtString);if(a){var b=a[1].split(/[-,.]/);return new Date(+b[0]);}
return null;};JSON.parseWithDate=function(json){return JSON.parse(json,function(key,value){if(typeof value==='string'){var dt=JSON.dateStringToDate(value);return dt?dt:value;}
return value;});};JSON.parseObjectWithDate=function(obj){var prop;if((typeof obj==='string')&&(/\/Date\((\d+)\)\//.test(obj))){return JSON.dateStringToDate(obj);}
else if(typeof obj!=='object'){return obj;}
for(var p in obj){if(obj.hasOwnProperty(p)){prop=obj[p];if(prop instanceof Array){for(var i=prop.length;i--;){prop[i]=JSON.parseObjectWithDate(prop[i]);}}
else{obj[p]=JSON.parseObjectWithDate(prop);}}}
return obj;};}());(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nml=nearmap.lib;var nmt=nearmap.threading;var nme=nearmap.memory;var ajax=nearmap.ajax;var json=nearmap.json;var nmo=nearmap.options;var nmev=nearmap.event;var factories;var factory;var cache={};var timers=[];var jsonpName=new Date().getTime();factories=[function(){return new XMLHttpRequest();},function(){return new ActiveXObject("Microsoft.XMLHTTP");},function(){return new ActiveXObject("MSXML2.XMLHTTP.3.0");},function(){return new ActiveXObject("MSXML2.XMLHTTP");}];var AjaxOptions={error:function(){alert('There was an error completing the ajax request. Please try again or contact an administrator');},creationError:function(){alert('Unfortunately there was an error creating the ajax request. Please ensure your browser supports ajax or update to the latest version.');},timeoutError:function(){alert('The ajax request has timed out. Please check your network settings and try again.');},timeoutLength:10000,useCache:true,withDate:false};function createXMLHttpRequest(){var i=0;var request;if(factory){return new factory();}
while(factory===undefined&&!request&&i<factories.length){factory=factories[i];try{request=factory();}
catch(e){factory=undefined;}
i++;}
if(!request){factory=null;}
return request;}
function getJSONP(url,callback,opts){var head=document.getElementsByTagName('head')[0];var frame=document.createElement('iframe');var done=false;var fname='jsonp'+jsonpName++;var successfname=fname+'success';var errorfname=fname+'error';var frameWindow;var frameDoc;var timeout;function cleanUp(){window.clearTimeout(timeout);removeTimer(timeout);frameWindow[successfname]=undefined;frameWindow[errorfname]=undefined;frameDoc.open();frameDoc.write('');frameDoc.close();nme.discardElement(frame);}
function errorFunction(type){cleanUp();if(type==='TIMEOUT'){opts.timeoutError();}
else{opts.error();}}
opts=nmo.Synchronize.fill(opts,AjaxOptions);frame.style.display='none';head.appendChild(frame);frameWindow=frame.contentWindow||frame.contentDocument;frameDoc=frameWindow.document;if(!frameDoc){opts.error();return;}
frameDoc.open();frameWindow[successfname]=function(data){var parsedData=(opts.withDate?json.parseObjectWithDate(data):data);done=true;cache[url]=parsedData;nmt.later(function(){cleanUp();callback(data);});};frameWindow[errorfname]=function(state){if((!state||state==='complete')&&!done){done=true;nmt.later(errorFunction);}};timeout=window.setTimeout(function(){errorFunction('TIMEOUT');},opts.timeoutLength);timers.push(timeout);frameDoc.write('<html><head><script src="'+
url.replace(/=\?/,'='+successfname)+'" onload="'+
errorfname+'()" onreadystatechange="'+
errorfname+'(this.readyState)"></script></head><body onload="'+
errorfname+'()"></body></html>');frameDoc.close();}
function getJSON(url,callback,opts){var request;var data;var requestTimer;opts=nmo.Synchronize.fill(opts,AjaxOptions);if(opts.useCache){data=cache[url];if(data){if(callback&&typeof callback==='function'){callback(data);}
return;}}
if(/=\?/.test(url)){getJSONP(url,callback,opts);return;}
request=createXMLHttpRequest();if(request){request.onreadystatechange=function(){if(request.readyState===4){window.clearTimeout(requestTimer);if(request.status===200&&request.getResponseHeader('Content-Type')==='application/json'){data=json['parse'+(opts.withDate?'WithDate':'')](request.responseText);if(opts.useCache){cache[url]=data;}
if(callback&&typeof callback==='function'){callback(data);}}
else{if(typeof opts.error==='function'){opts.error();}
else{AjaxOptions.error();}}}};request.open('GET',url);requestTimer=window.setTimeout(function(){request.abort();opts.timeoutError();requestTimer=null;},opts.timeoutLength);request.send(null);return request;}
else{if(typeof opts.creationError==='function'){opts.creationError();}
else{AjaxOptions.creationError();}}
return;}
function getHeaders(url,callback,opts){var headers={};var request;var requestTimer;opts=nmo.Synchronize.fill(opts,AjaxOptions);request=createXMLHttpRequest();if(request){request.onreadystatechange=function(){if(request.readyState===4){window.clearTimeout(requestTimer);if(request.status===200){}
else{if(typeof opts.error==='function'){opts.error();}
else{AjaxOptions.error();}}}};request.open('HEAD',url);requestTimer=window.setTimeout(function(){request.abort();opts.timeoutError();requestTimer=null;},opts.timeoutLength);request.send(null);}
else{if(typeof opts.creationError==='function'){opts.creationError();}
else{AjaxOptions.creationError();}}
return headers;}
function clearTimers(){for(var i=timers.length;i--;){window.clearTimeout(timers[i]);}
timers=[];}
function removeTimer(timer){var i=nml.ArrayHelper.indexOf(timers,timer);if(i>=0){timers.splice(i,1);}}
ajax.createXMLHttpRequest=createXMLHttpRequest;ajax.AjaxOptions=AjaxOptions;ajax.getJSON=getJSON;ajax.getHeaders=getHeaders;ajax.clearTimers=clearTimers;})();(function(){var window=this;var nma=window.nearmap.animation;function runAnimation(frames,length,handler,finished){var currentFrame=1;var frameTimespan=Math.ceil(length/frames);var reel;reel=window.setInterval(function(){currentFrame++;if(currentFrame<=frames){handler(currentFrame,frames);}
if(currentFrame>=frames){window.clearInterval(reel);if(finished&&typeof finished==='function'){finished(currentFrame,frames);}}},frameTimespan);handler(currentFrame,frames);return reel;}
function runFixedAnimation(frames,length,handler,finished){var frameTimespan=Math.ceil(length/frames);var timers=[];var reel;for(var i=0;i<frames;i++){timers[i]=window.setTimeout(function(currentFrame){return function(){handler(currentFrame,frames);if(currentFrame===frames&&finished&&typeof finished==='function'){timers=[];finished(currentFrame,frames);}};}(i+1),frameTimespan*i);}
return timers;}
function stopAnimation(reel){window.clearInterval(reel);}
function stopFixedAnimation(timers){var len=timers.length;for(var i=0;i<len;i++){window.clearTimeout(timers[i]);}}
function runContinuousAnimation(interval,handler,finished,stop){var id;var startDate=new Date();var currentDate;if(typeof handler!=='function'){throw'The "handler" argument must be a function. It is currently '+(typeof handler);}
if(typeof stop!=='function'){throw'The "stop" argument must be a function. It is currently '+(typeof stop);}
id=window.setInterval(function(){currentDate=new Date();handler(startDate,currentDate);if(stop()){window.clearInterval(id);if(typeof finished==='function'){finished(startDate,currentDate);}}},interval);}
nma.runAnimation=runAnimation;nma.runFixedAnimation=runFixedAnimation;nma.stopAnimation=stopAnimation;nma.stopFixedAnimation=stopFixedAnimation;nma.runContinuousAnimation=runContinuousAnimation;})();(function(){var window=this;var nmmob=window.nearmap.mobile;var apple={};nmmob.apple=apple;})();(function(){var window=this;var _ev=window.nearmap.event;var _tch=window.nearmap.touch;var _timers={};var _dblTapElapse=200;function deleteTimer(){var name=arguments[arguments.length-1];var timer=_timers[name];if(timer){window.clearTimeout(timer);delete _timers[name];return true;}
return false;}
function onePointDoubleTap(callback){if(!callback||typeof callback!=='function'){throw new Exception('You must provide a callback function for "onePointDoubleTap"');}
return function(e){var timerName='onePointDoubleTap';if(e.touches.length!==1){if(_timers[timerName]){window.clearTimeout(_timers[timerName]);delete _timers[timerName];}}
if(_timers[timerName]){delete _timers[timerName];callback(e);return _ev.preventDefault(e);}
_timers[timerName]=window.setTimeout(_ev.callbackArgs(this,deleteTimer,timerName),_dblTapElapse);};}
function twoPointDoubleTap(callback){var timerName='twoPointDoubleTap';if(!callback||typeof callback!=='function'){throw new Exception('You must provide a callback function for "onePointDoubleTap"');}
function doubleTap(e){if(e.touches.length!==2){if(_timers[timerName]){window.clearTimeout(_timers[timerName]);delete _timers[timerName];}}
if(_timers[timerName]){delete _timers[timerName];callback(e);return _ev.preventDefault(e);}
_timers[timerName]=window.setTimeout(_ev.callbackArgs(this,deleteTimer,timerName),_dblTapElapse);}
function removeDoubleTap(e){if(e.touches.length===0){window.clearTimeout(_timers[timerName]);delete _timers[timerName];_ev.removeListener(this.doubleTap);_ev.removeListener(this.removeDoubleTap);delete this.doubleTap;delete this.removeDoubleTap;}}
return function(e){if(e.touches.length===1){this.doubleTap=_ev.addDomListener(this,'touchstart',doubleTap);this.removeDoubleTap=_ev.addDomListener(this,'touchend',removeDoubleTap);}};}
_tch.onePointDoubleTap=onePointDoubleTap;_tch.twoPointDoubleTap=twoPointDoubleTap;})();(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nml=nearmap.lib;var json=nearmap.json;var nmlh=nearmap.lib.history;var _cache='/mapfiles/state.html';var _stateBagId='__stateBag';var _frameId;var _isEnabled=false;var HistoryType={GENERIC:1,MAP:2};var MapHistoryState={latlng:undefined,zoom:undefined,mapType:undefined,tileDate:undefined};MapHistoryState.prototype=new HistoryState(HistoryType.MAP);function HistoryState(type){this.title='PhotoMaps by Nearmap';this.type=type;}
function create(id){var frameNode=document.createElement('div');if(typeof id!=='string'||id===''){throw'The id of the history frame must be a non empty string';}
frameNode.innerHTML='<iframe id="'+id+'" src="'+_cache+'" style="border:0px; width:0px; height:0px; visibility:hidden;" />';document.body.appendChild(frameNode);_frameId=id;_isEnabled=true;}
function save(newState,title,oldState){var frame;var stateBag;if(!_isEnabled){throw'You must first enable the history module by calling nearmap.lib.history.create()';}
if(!history.stack){history.stack={};}
if(history._locked){return false;}
history.cursor=(new Date()).getTime().toString();frame=document.getElementById(_frameId);stateBag=frame.contentWindow.document.getElementById(_stateBagId);if(!stateBag.value&&oldState){stateBag.value=json.stringify(oldState);}
frame.contentWindow.location.href=frame.contentWindow.location.href.split('?')[0]+'?'+history.cursor+'#'+history.cursor;window.setTimeout(function(){var stateBag=frame.contentWindow.document.getElementById(_stateBagId);stateBag.value=json.stringify(newState);frame.contentWindow.document.title=title;document.title=title;},100);}
nmlh.HistoryType=HistoryType;nmlh.HistoryState=HistoryState;nmlh.MapHistoryState=MapHistoryState;nmlh.create=create;nmlh.save=save;})();(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nml=nearmap.lib;var nmc=nearmap.client;var nmev=nearmap.event;var nmls=nearmap.lib.sprite;function dragMouseMove(arg1,arg2){var elm;e=(arg2?arg1:window.event);opts=(arg2?arg2:arg1);elm=opts.elm;if(!elm.hasDragged){elm.hasDragged=true;opts.dragstart.apply(elm,[e]);}
opts.drag.apply(elm,[e]);return nmev.preventDefault(e);}
function isDraggable(elm){var nodeName=elm.nodeName.toLowerCase();if(elm.isDraggable){return true;}
else if(nodeName==='body'||nodeName==='html'){return false;}
else{return isDraggable(elm.parentNode);}}
function dragMouseDown(arg1,arg2){var elm=this;var e;var target;var opts;var mousemoveListener;var mouseupListener;e=(arg2?arg1:window.event);opts=(arg2?arg2:arg1);target=nmev.getTarget(e);if((!opts.mouseButton||(opts.mouseButton&&nmev.getMouseButton(e)===opts.mouseButton))&&isDraggable(target)&&(!opts.targetProp||target[opts.targetProp])){elm.mouseX=e.clientX;elm.mouseY=e.clientY;elm.hasDragged=false;mousemoveListener=nmev.addDomListener(document,'mousemove',nmev.callbackArgs(document,dragMouseMove,{elm:elm,dragstart:opts.dragstart,drag:opts.drag}));mouseupListener=nmev.addDomListener(document,'mouseup',function(e){nmev.removeListener(mousemoveListener);nmev.removeListener(mouseupListener);mousemoveListener=null;mouseupListener=null;opts.dragend.apply(elm,[e]);});return nmev.preventDefault(e);}
return true;}
function add(elm,dragstart,drag,dragend,mouseButton,targetProp){var obj=(typeof elm==='string'?document.getElementById(elm):elm);obj.isDraggable=true;obj.onmousedown=nmev.callbackArgs(obj,dragMouseDown,{dragstart:dragstart,drag:drag,dragend:dragend,mouseButton:mouseButton,targetProp:targetProp});}
function remove(elm){var obj=(typeof elm==='string'?document.getElementById(elm):elm);obj.onmousedown=null;obj.isDraggable=false;}
nml.dragndrop.add=add;nml.dragndrop.remove=remove;})();(function(){var window=this;var nmh=window.nearmap.http;function escapeHtml(str){var div=window.document.createElement('div');var text=window.document.createTextNode(str);div.appendChild(text);return div.innerHTML;}
nmh.escapeHtml=escapeHtml;})();(function(){var window=this;var nm=window.nearmap;var nmh=window.nearmap.http;function HttpRequest(){}
HttpRequest.prototype.parseKeyValuePairs=function(urlParams){var parms=urlParams.split('&');var pairs={};var pos;for(var i=0;i<parms.length;i++){pos=parms[i].indexOf('=');if(pos>0){pairs[parms[i].substring(0,pos)]=window.decodeURIComponent(parms[i].substring(pos+1));}}
return pairs;};HttpRequest.prototype.parseQueryString=function(url){var matches=(url||window.location.href).match(/\?(.+)/);return(matches&&matches.length>=2?this.parseKeyValuePairs(matches[1]):{});};HttpRequest.prototype.parseLocationQueryString=function(location){return this.parseKeyValuePairs((location||window.location).search.substring(1));};HttpRequest.prototype.parseHashString=function(url){return this.parseKeyValuePairs((url||window.location).hash.substring(1));};HttpRequest.prototype.getHostname=function(){return window.location.hostname;};function HttpResponse(){}
HttpResponse.prototype.formatUrl=function(host,qstr){var len=qstr.length;var hasQMark=false;var params='';for(var i=0;i<len;i++){if(!hasQMark){host+='?'+qstr[i];hasQMark=true;}
else{host+='&'+qstr[i];}}
return host;};nmh.HttpRequest=new HttpRequest();nmh.HttpResponse=new HttpResponse();})();(function(){var window=this;var nearmap=window.nearmap;var nml=nearmap.lib;var nmo=nearmap.options;var ONE_WEEK=604800;var ONE_DAY=86400;var CookieOptions={expireSeconds:ONE_WEEK,values:''};function Cookie(name,opts){var _expDate;var _pairs={};var _seperator='|';function parseKeyValues(){var values='';for(key in _pairs){if(_pairs.hasOwnProperty(key)){values=(values?values+_seperator:'')+key+'='+_pairs[key];}}
return values;}
function parseValues(values){var tkns=values.split(_seperator),kv;for(var i=0;i<tkns.length;i++){kv=tkns[i].split('=');if(kv.length>=2){_pairs[kv[0]]=kv[1];}}}
function formatCookie(){var expires="; expires="+_expDate.toGMTString();return name+'='+parseKeyValues()+expires+'; path=/';}
this.setValue=function(key,value){_pairs[key]=value;};this.removeValue=function(key){delete _pairs[key];};this.getValue=function(key){return _pairs[key];};this.getContent=function(){return opts&&opts.values?opts.values:null;};this.getExpiry=function(){return _expDate;};this.setExpiry=function(date){_expDate=date;};this.remove=function(){_expDate=new Date();_expDate.setTime(-999999999);window.document.cookie=formatCookie();};this.save=function(){if(!_expDate){_expDate=new Date();}
_expDate.setTime(_expDate.getTime()+(opts.expireSeconds*1000));window.document.cookie=formatCookie();};opts=nmo.Synchronize.fill(opts,CookieOptions);if(opts.values){parseValues(opts.values);}}
Cookie.getCookie=function(name,expireSeconds){var nameEQ;var emptyIE;var ca;var c;var ck;if(document.cookie.length){nameEQ=name+"=";ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){c=ca[i];while(c.charAt(0)==' '){c=c.substring(1,c.length);}
if(c.indexOf(nameEQ)===0){return new Cookie(name,{values:c.substring(nameEQ.length,c.length),expireSeconds:expireSeconds});}
else if(new RegExp(name+'$').test(c)){return new Cookie(name,{expireSeconds:expireSeconds});}}}
return null;};Cookie.cookiesEnabled=function(){var name='NEARMAPCOOKIESENABLED';var cookie=new Cookie(name);var enabled;var getCookie;cookie.save();enabled=(Cookie.getCookie(name)?true:false);cookie.setExpiry(new Date(0));cookie.save();return enabled;};nearmap.http.Cookie=Cookie;})();(function(){var window=this;var nearmap=window.nearmap;var nmm=nearmap.maps;var nml=nearmap.lib;function isNearMapDomain(){return(/.*nearmap.com/i).test(window.location.hostname);}
nml.PI=3.14159265358979323846;nml.DEGREE_TO_RADIAN=nml.PI/180;nml.MS_IN_DAY=24*60*60*1000;nml.METER_TO_INCH=39.37;nmm.API_VERSION='0.1';nmm.API_VERSION_PATH='api'+nmm.API_VERSION;nmm.LATLNG_KEY='ll';nmm.ZOOM_KEY='z';nmm.MAPTYPE_KEY='t';nmm.TILE_DATE_KEY='nmd';nmm.TITLE_KEY='title';nmm.BOOKMARK_KEY='nmb';nmm.VISIT_KEY='nmv';nmm.EDITED_KEY='osme';nmm.DEBUG_KEY='db';nmm.MAX_HOSTS_KEY='mh';nmm.OUTPUT_KEY='output';nmm.ACCEPTED_KEY='a';nmm.LICENCE_KEY='l';nmm.SEARCH_QUERY_KEY='q';nmm.DEFAULT_ZOOM=3;nmm.DBL_CLICK_TIMEOUT=500;nmm.DEFAULT_TILE_SIZE=256;nmm.SESSION_COOKIE_EXPIRES=300000;nmm.SESSION_COOKIE_CHECK_BEFORE=60000;nmm.HOST=(isNearMapDomain()?window.location.hostname:'nearmap.com');nmm.HOST_URL=(window.location.protocol==='https:'?'https:':'http:')+'//'+(isNearMapDomain()?'':'www.')+nmm.HOST+'/';nmm.HOST_STRIP_FIRST_SUBDOMAIN=nmm.HOST.replace(/([a-z0-9\-]+\.)?([a-z0-9\-]+\.)*nearmap.com/i,'$2nearmap.com');nmm.TILE_INFO_URL_JSON=nmm.HOST_URL+'maps/x={X}&y={Y}&z={Z}&nmq=INFO&nmf=json';nmm.TILE_INFO_URL_JSONP=nmm.HOST_URL+'maps/x={X}&y={Y}&z={Z}&nmq=INFO&nmf=json&nmjsonp=?';nmm.DYNAMIC_LAYERS_URL_JSONP=nmm.HOST_URL+'maps/nmq=dynamiclayers&nmjsonp=?';nmm.DYNAMIC_LAYER_POINTS_URL_JSONP=nmm.HOST_URL+'maps/nmq=dynamiclayer&nmx={L}&nmjsonp=?';nmm.TRANSPARENT_GIF=nmm.HOST_URL+'img/transparent.gif';nmm.DUMMY_TILE=nmm.HOST_URL+'img/dummy-tile.gif';nmm.WRAP_TILE=nmm.HOST_URL+'img/wrap-tile.gif';nmm.GET_SESSION=nmm.HOST_URL+'maps/nmq=getsession';})();(function(){var window=this;var nmm=window.nearmap.maps;function Point(x,y){this.x=x;this.y=y;this.equals=function(pnt){return x===pnt.x&&y===pnt.y;};this.add=function(dx,dy){this.x+=dx;this.y+=dy;};this.toString=function(){return this.x+','+this.y;};this.copy=function(){return new Point(this.x,this.y);};if(typeof x!=='number'||typeof y!=='number'){throw new Error('The x & y points must be numbers, they are currently "'+(typeof x)+'" and "'+(typeof y)+'" respectively');}}
Point.ORIGIN=new Point(0,0);function LatLng(lat,lng,unbounded){if(typeof(lat)!=='number'){lat=parseFloat(lat);}
if(typeof(lng)!=='number'){lng=parseFloat(lng);}
this.lat=function(){return lat;};this.lng=function(){return lng;};this.distanceFrom=function(other,radius){};this.toString=function(){return lat.toFixed(6)+','+lng.toFixed(6);};this.copy=function(unbounded){return new LatLng(this.lat(),this.lng(),unbounded);};if(!unbounded){if(lat<-90){lat=((lat+90)%180)+90;}
else if(lat>90){lat=((lat-90)%180)-90;}
if(lng<-180){lng=((lng+180)%360)+180;}
else if(lng>180){lng=((lng-180)%360)-180;}}}
LatLng.prototype.latRadians=function(){return this.lat()*nmm.DEGREE_TO_RADIAN;};LatLng.prototype.lngRadians=function(){return this.lng()*nmm.DEGREE_TO_RADIAN;};LatLng.prototype.equals=function(other){return(this.lat()===other.lat()&&this.lng()===other.lng());};LatLng.prototype.toUrlValue=function(precision){var factor;precision=precision&&(precision instanceof Number)&&precision>=1?Math.floor(precision):6;factor=Math.pow(10,precision);return(Math.round(this.lat()*factor)/factor)+','+(Math.round(this.lng()*factor)/factor);};LatLng.fromUrlValue=function(latlng){var latlngTkn;var lat;var lng;if(latlng&&typeof latlng==='string'){latlngTkn=latlng.split(/\s*,\s*/);if(latlngTkn.length<2){throw new Error('Invalid format lat & lng must be seperated by ","');}
lat=parseFloat(latlngTkn[0]);lng=parseFloat(latlngTkn[1]);if(isNaN(lat)||isNaN(lng)){throw new Error('Invalid format lat & lng must be numbers');}
return new nmm.LatLng(lat,lng,true);}
else{throw new Error('You must provide a string to convert to a lat & lng');}};function LatLngBounds(sw,ne){this.getSouthWest=function(){return sw;};this.getNorthEast=function(){return ne;};this.extend=function(latlng){var nelat=ne.lat()<latlng.lat()?latlng.lat():ne.lat();var nelng=ne.lng()<latlng.lng()?latlng.lng():ne.lng();var swlat=sw.lat()>latlng.lat()?latlng.lat():sw.lat();var swlng=sw.lng()>latlng.lat()?latlng.lat():sw.lng();ne=new LatLng(nelat,nelng);sw=new LatLng(swlat,swlng);};this.toString=function(){return'('+sw.toString()+', '+ne.toString()+')';};}
LatLngBounds.prototype.equals=function(other){var tsw=this.getSouthWest();var tne=this.getNorthEast();var osw=other.getSouthWest();var one=other.getNorthEast();return tsw.lat()===osw.lat()&&tsw.lng===osw.lat()&&tne.lat()===one.lat()&&tne.lng===one.lng();};LatLngBounds.prototype.containsLatLng=function(latlng){var fullLat=this.isFullLat();var fullLng=this.isFullLng();var tsw;var tne;var pointLat;var pointLng;var checkWrap;var block1;var block2;function inRange(from,to,point){return from<=point&&to>=point;}
if(fullLat&&fullLng){return true;}
tsw=this.getSouthWest();tne=this.getNorthEast();pointLat=latlng.lat();pointLng=latlng.lng();checkWrap=false;block1={sw:{lat:tsw.lat(),lng:tsw.lng()},ne:{lat:tne.lat(),lng:tne.lng()}};block2={sw:{lat:tsw.lat(),lng:tsw.lng()},ne:{lat:tne.lat(),lng:tne.lng()}};if(tne.lng()<tsw.lng()){block2.sw.lng=-180;block1.ne.lng=180;checkWrap=true;}
if(tsw.lat()>tne.lat()){block2.sw.lat=-90;block1.ne.lat=90;checkWrap=true;}
if(fullLat||inRange(block1.sw.lat,block1.ne.lat,pointLat)||(checkWrap&&inRange(block2.sw.lat,block2.ne.lat,pointLat))){if(fullLng||inRange(block1.sw.lng,block1.ne.lng,pointLng)||(checkWrap&&inRange(block2.sw.lng,block2.ne.lng,pointLng))){return true;}}
return false;};LatLngBounds.prototype.intersects=function(other){var tsw=this.getSouthWest();var tne=this.getNorthEast();var osw=other.getSouthWest();var one=other.getNorthEast();if((tne.lat()>=one.lat()&&tsw.lat()<=one.lat())||(tne.lat()>=osw.lat()&&tsw.lat()<=osw.lat())){if((tne.lng()>=one.lng()&&tsw.lng()<=one.lng())||(tne.lng()>=osw.lng()&&tsw.lng()<=osw.lng())){return true;}}
return false;};LatLngBounds.prototype.containsBounds=function(other){var tsw=this.getSouthWest();var tne=this.getNorthEast();var osw=other.getSouthWest();var one=other.getNorthEast();return this.containsLatLng(one)&&this.containsLatLng(osw);};LatLngBounds.prototype.toSpan=function(){var sw=this.getSouthWest();var ne=this.getNorthEast();return new LatLng(ne.lat()-sw.lat(),ne.lng()-sw.lng(),true);};LatLngBounds.prototype.isFullLat=function(){var sw=this.getSouthWest();var ne=this.getNorthEast();return sw.lat()===-90&&ne.lat()===90;};LatLngBounds.prototype.isFullLng=function(){var sw=this.getSouthWest();var ne=this.getNorthEast();return sw.lng()===-180&&ne.lng()===180;};LatLngBounds.prototype.isEmpty=function(){};LatLngBounds.prototype.getCenter=function(){var span=this.toSpan();var sw=this.getSouthWest();return new LatLng(sw.lat()+(span.lat()/2),sw.lng()+(span.lng()/2));};nmm.Point=Point;nmm.LatLng=LatLng;nmm.LatLngBounds=LatLngBounds;})();(function(){var window=this;var nearmap=window.nearmap;var nmm=nearmap.maps;var nml=nearmap.lib;function Size(width,height){var unit='px';this.width=width;this.height=height;this.equals=function(other){if(other instanceof Size){return this.width===other.width&&this.height===other.width?true:false;}
else{return false;}};this.copy=function(){return new Size(this.width,this.height);};this.toString=function(){return this.width+','+this.height;};this.getWidthString=function(){return this.width+unit;};this.getHeightString=function(){return this.height+unit;};}
var Projection={fromLatLngToPixel:function(latlng,zoom){},fromPixelToLatLng:function(pixel,zoom,unbounded){},tileCheckRange:function(tile,zoom,tilesize){},getWrapWidth:function(zoom){}};function MercatorProjection(zoomLevels){var MERCATOR_ORIGIN_SHIFT=nml.PI*6378137;var _worldTileDimensions;function calculateWorldTileDimensions(){var tileDimensions={};for(var i=0;i<=zoomLevels;i++){tileDimensions[i]=1<<i;}
return tileDimensions;}
function parseTileSize(tileSize){return tileSize&&tileSize.width&&tileSize.height?tileSize:(typeof tileSize==='number'?new nmm.Size(tileSize,tileSize):new nmm.Size(nmm.DEFAULT_TILE_SIZE,nmm.DEFAULT_TILE_SIZE));}
function fromLatLngToPrecisePixel(latlng,zoom,tileSize){var scale;var tSize=parseTileSize(tileSize);var px,py;var mx,my;var worldShift;var resolution;var maxY;scale=getScale(zoom);maxY=scale*tSize.height;worldShift=MERCATOR_ORIGIN_SHIFT*2;resolution={x:worldShift/tSize.width/scale,y:worldShift/tSize.height/scale};mx=latlng.lng()*(MERCATOR_ORIGIN_SHIFT/180.0);my=Math.log(Math.tan((90+latlng.lat())*nml.PI/360.0))/(nml.PI/180.0)*(MERCATOR_ORIGIN_SHIFT/180.0);my=-my;px=(mx+MERCATOR_ORIGIN_SHIFT)/resolution.x;py=(my+MERCATOR_ORIGIN_SHIFT)/resolution.y;if(py<0){py=0;}
if(py===Infinity||py>=maxY){py=maxY-1;}
return{x:px,y:py};}
function wrapX(maxX,x){var rem;if(x<0){rem=x%maxX;x=(rem!==0?maxX+rem:0);}
else{x=(x>=maxX?x%maxX:x);}
return x;}
function wrapY(maxY,y){var rem;if(y<0){rem=y%maxY;y=(rem!==0?maxY+rem:0);}
else{y=(y>=maxY?y%maxY:y);}
return y;}
function wrap(scale,x,y){return new nmm.Point(wrapX(scale.width,x),wrapY(scale.height,y));}
function wrapTileCoordinates(zoom,tx,ty){var scale=1<<zoom;return wrap(new nmm.Size(scale,scale),tx,ty);}
function wrapTileXCoordinate(zoom,tx){var scale=Math.pow(2,zoom);return wrapX(scale,tx);}
function wrapTileYCoordinate(zoom,ty){var scale=Math.pow(2,zoom);return wrapY(scale,ty);}
function wrapPixelCoordinates(scale,pixel,tileSize){return wrap(new nmm.Size(scale*tileSize.width,scale*tileSize.height),pixel.x,pixel.y);}
function getWrapSize(zoom,tileSize){var dimension=_worldTileDimensions[zoom];return dimension*(tileSize?tileSize:nmm.DEFAULT_TILE_SIZE);}
this.fromLatLngToPixel=function(latlng,zoom,tileSize){var pxPrecise=fromLatLngToPrecisePixel(latlng,zoom,tileSize);return new nmm.Point(Math.floor(pxPrecise.x),Math.floor(pxPrecise.y));};this.fromLatLngToTile=function(latlng,zoom,tileSize){var tSize=parseTileSize(tileSize);var pxPrecise;var tx,ty;pxPrecise=fromLatLngToPrecisePixel(latlng,zoom,tSize);tx=Math.floor(pxPrecise.x/tSize.width);ty=Math.floor(pxPrecise.y/tSize.height);return wrapTileCoordinates(zoom,tx,ty,tSize);};function getScale(zoom){var floorScale=Math.pow(2,Math.floor(zoom));var ceilScale=floorScale*2;var fraction=zoom%1;return floorScale+((ceilScale-floorScale)*fraction);}
this.fromPixelToLatLng=function(pixel,zoom,unbounded,tileSize){var scale;var tSize=parseTileSize(tileSize);var px,py;var mx,my;var worldShift=MERCATOR_ORIGIN_SHIFT*2;var resolution;scale=getScale(zoom);resolution={x:worldShift/tSize.width/scale,y:worldShift/tSize.height/scale};if(!unbounded){pixel=wrapPixelCoordinates(scale,pixel,tSize);}
mx=pixel.x*resolution.x-MERCATOR_ORIGIN_SHIFT;my=pixel.y*resolution.y-MERCATOR_ORIGIN_SHIFT;my=-my;lon=(mx/MERCATOR_ORIGIN_SHIFT)*180.0;lat=(my/MERCATOR_ORIGIN_SHIFT)*180.0;lat=180.0/nml.PI*(2*Math.atan(Math.exp(lat*nml.PI/180.0))-nml.PI/2.0);return new nmm.LatLng(lat,lon,unbounded);};this.fromTileToLatLng=function(tile,zoom,tileSize){var pxPnt;var tWrap;var tSize=parseTileSize(tileSize);tWrap=wrapTileCoordinates(zoom,tile.x,tile.y,tSize);pxPnt=new nmm.Point(tWrap.x*tSize.width,tWrap.y*tSize.height);return this.fromPixelToLatLng(pxPnt,zoom,false,tSize);};this.tileCheckRange=function(tile,zoom){var dimension=_worldTileDimensions[zoom];return tile.y>=0&&tile.y<dimension;};this.getWrapWidth=function(zoom,tileWidth){return getWrapSize(zoom,tileWidth);};this.getWrapHeight=function(zoom,tileHeight){return getWrapSize(zoom,tileHeight);};this.wrapTileCoordinates=wrapTileCoordinates;this.wrapTileXCoordinate=wrapTileXCoordinate;this.wrapTileYCoordinate=wrapTileYCoordinate;_worldTileDimensions=calculateWorldTileDimensions();}
nmm.Size=Size;nmm.Projection=Projection;nmm.MercatorProjection=MercatorProjection;})();(function(){var window=this;var nearmap=window.nearmap;var nmm=nearmap.maps;var nmo=nearmap.options;var nml=nearmap.lib;var nmh=nearmap.http;var MapOutput={NORMAL:1,EMBED:2,EMBED_NOCONTROLS:3,SALES:4,IPHONE:5};var PermalinkOptions={zoom:undefined,latlng:undefined,sspn:undefined,date:undefined,mapTypeKey:undefined};var SearchQueryOptions={markerLocation:undefined,near:undefined,g:undefined};function SearchQuery(query,opts){opts=nmo.Synchronize.fill(opts,SearchQueryOptions);this.query=query;this.markerLocation=opts.markerLocation;this.near=opts.near;this.g=opts.g;}
function MapHttpRequest(url){var _qryStr=this.parseQueryString(url);var _searchQuery;function parseSearchQuery(queryStr){var split;var latlng;var query;if(!queryStr){return{};}
split=queryStr.split('@');if(split.length!==2){return{};}
try{latlng=nmm.LatLng.fromUrlValue(split[1]);}
catch(e){}
if(!latlng){return{};}
query=split[0]||queryStr;return new SearchQuery(query,{markerLocation:latlng});}
this.getZoom=function(){return Math.abs(parseInt(_qryStr[nmm.ZOOM_KEY],10));};this.getLatLng=function(){var latlngStr=_qryStr[nmm.LATLNG_KEY];var latlng;try{latlng=nmm.LatLng.fromUrlValue(latlngStr);return latlng;}
catch(e){return null;}};this.getMapType=function(){return nmm.MapType.getTypeByKey(_qryStr[nmm.MAPTYPE_KEY]);};this.getTileDate=function(){var td;try{td=nml.DateHelper.fromNearmapDateUTC(_qryStr[nmm.TILE_DATE_KEY]);return td;}
catch(e){return null;}};this.getDebug=function(){if(/([a-z0-9\-]+\.)+nearmap\.com$/.test(nmm.HOST)){return parseInt(_qryStr[nmm.DEBUG_KEY],10);}
return 0;};this.getDebugMaxHosts=function(){if(/([a-z0-9\-]+\.)+nearmap\.com$/.test(nmm.HOST)&&_qryStr[nmm.MAX_HOSTS_KEY]){return parseInt(_qryStr[nmm.MAX_HOSTS_KEY],10);}};this.getMapOutput=function(){var outputVal=_qryStr[nmm.OUTPUT_KEY];var outputStr=(outputVal||'').toLowerCase();var path=window.location.pathname;if(outputStr==='embed'){return MapOutput.EMBED;}
else if(outputStr==='nocontrols'){return MapOutput.EMBED_NOCONTROLS;}
else if(outputStr==='sales'){return MapOutput.SALES;}
else if((outputStr==='iphone')||(/\/iphone\//.test(path))){return MapOutput.IPHONE;}
else{return MapOutput.NORMAL;}};this.getSearchQuery=function(){if(_searchQuery===undefined){_searchQuery=parseSearchQuery(_qryStr[nmm.SEARCH_QUERY_KEY]);}
return _searchQuery;};}
MapHttpRequest.prototype=nmh.HttpRequest;nmh.PermalinkOptions=PermalinkOptions;nmh.MapHttpRequest=MapHttpRequest;nmh.CurrentMapHttpRequest=new MapHttpRequest();nmh.MapOutput=MapOutput;})();(function(){var window=this;var nmh=window.nearmap.http;var nmm=window.nearmap.maps;var nml=window.nearmap.lib;var mapCookieName='NEARMAP20100127';var licenceCookieName='LICENCE';var LicenceType={PERSONAL:1,COMMERCIAL:2,GOVERNMENT:3,IMPLICIT:4};function MapCookie(cookie){this.getZoom=function(){return parseInt(cookie.getValue(nmm.ZOOM_KEY),10);};this.getLatLng=function(){var latlngStr=cookie.getValue(nmm.LATLNG_KEY),latlng;try{latlng=nmm.LatLng.fromUrlValue(latlngStr);return latlng;}
catch(e){return null;}};this.getMapType=function(){return nmm.MapType.getTypeByKey(cookie.getValue(nmm.MAPTYPE_KEY));};this.getTileDate=function(){var td;try{td=nml.DateHelper.fromNearmapDateUTC(cookie.getValue(nmm.TILE_DATE_KEY));}
catch(e){td=null;}
return td;};this.getVisits=function(){var visits=parseInt(cookie.getValue(nmm.VISIT_KEY),10);return visits>0?visits:0;};this.hasEdited=function(){return Boolean(cookie.getValue(nmm.EDITED_KEY));};this.setZoom=function(level){cookie.setValue(nmm.ZOOM_KEY,level);};this.setLatLng=function(latlng){cookie.setValue(nmm.LATLNG_KEY,(latlng.lat()+','+latlng.lng()));};this.setMapType=function(type){var mcode=nmm.MapType.Keys[type.getName(false)];if(mcode){cookie.setValue(nmm.MAPTYPE_KEY,mcode);}
else{cookie.removeValue(nmm.MAPTYPE_KEY);}};this.setTileDate=function(date){if(!date||!(date instanceof Date)){cookie.removeValue(nmm.TILE_DATE_KEY);}
else{cookie.setValue(nmm.TILE_DATE_KEY,nml.DateHelper.toNearmapDateUTC(date));}};this.IncVisit=function(){var visitCount=this.getVisits();if((visitCount===0)||(visitCount>1)){cookie.setValue(nmm.VISIT_KEY,visitCount+1);}};this.setEdited=function(){cookie.setValue(nmm.EDITED_KEY,1);};this.save=function(){cookie.save();};if(!cookie){cookie=nmh.Cookie.getCookie(mapCookieName);if(!cookie){cookie=new nmh.Cookie(mapCookieName);cookie.save();}}}
function LicenceCookie(cookie){var _expireSeconds=62553600;this.setAccepted=function(accepted){cookie.setValue(nmm.ACCEPTED_KEY,(accepted?1:0));};this.getAccepted=function(){return parseInt(cookie.getValue(nmm.ACCEPTED_KEY),10)===1;};this.setLicenceType=function(type){if(type){cookie.setValue(nmm.LICENCE_KEY,type);}};this.getLicenceType=function(){var lType=parseInt(cookie.getValue(nmm.LICENCE_KEY),10);if(isNaN(lType)){return null;}
for(var p in LicenceType){if(LicenceType.hasOwnProperty(p)&&LicenceType[p]===lType){return p;}}
return null;};this.save=function(){cookie.save();};if(!cookie){cookie=nmh.Cookie.getCookie(licenceCookieName,_expireSeconds);if(!cookie){cookie=new nmh.Cookie(licenceCookieName,{expireSeconds:_expireSeconds});cookie.save();}}}
var TileSession={get:function(){return nmh.Cookie.getCookie('nearmapsession');},createRequestUrl:function(){return nmm.HOST_URL+'maps/nmq=getsession&nmx='+(new Date()).getTime();},isAvailable:function(cookie){var content;if(!cookie){return true;}
content=cookie.getContent();if(content&&(/^session/.test(content))){return true;}
return false;}};nmh.LicenceType=LicenceType;nmh.LicenceCookie=new LicenceCookie();nmh.MapCookie=new MapCookie();nmh.TileSession=TileSession;})();(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nmm=window.nearmap.maps;var nme=window.nearmap.memory;var nmo=window.nearmap.options;var nml=window.nearmap.lib;var nms=window.nearmap.style;var nmev=window.nearmap.event;var nmlm=window.nearmap.lib.math;var nmh=window.nearmap.http;var nmc=nearmap.client;var HostOptions={protocol:'http://',hostPath:'.nearmap.com/kh/v=nm&hl=en&x={X}&y={Y}&z={Z}',prefix:'web',nodes:(nmh.CurrentMapHttpRequest.getDebugMaxHosts()>=1?nmh.CurrentMapHttpRequest.getDebugMaxHosts():4)};HostOptions.createUrlFunction=function(opts){opts=nmo.Synchronize.fill(opts,HostOptions);return function(tile,zoom){var hostNum=(opts.nodes!==0?(tile.x+tile.y+zoom)%opts.nodes:'');return opts.protocol+opts.prefix+Math.abs(hostNum)+opts.hostPath;};};var TileLayerOptions={opacity:1.0,isPng:false,tileUrlTemplate:HostOptions.createUrlFunction(),draggingCursor:'default',metaKey:''};var TileLayerInitilizationOptions={heading:0,layerIndex:0,tileSize:new nmm.Size(nmm.DEFAULT_TILE_SIZE,nmm.DEFAULT_TILE_SIZE),tileLoadHandler:function(e){this.style.visibility='visible';},tileErrorHandler:function(e){this.style.visibility='hidden';},downloadTiles:function(tileSet,downloadTimers,height,width,divOffset,tileSize,tileCheckRange,getTileUrl,isPng,opacity){var tileUrl;var tile;var point;for(var i=height;i--;){for(var j=width;j--;){tile=tileSet[i][j];if(tileCheckRange(tile.point,tile.zoom)){tileUrl=getTileUrl(tile.wrappedPoint,tile.zoom,tile.date);if(isPng&&opacity<1){nms.replaceIEPngTile(tile);}
tile.src=tileUrl;}
else{tile.src=nmm.WRAP_TILE;}}}}};function TileLayer(copyrights,minRes,maxRes,options){var _tileSet=[];var _timers={};var _substring="Vk52edzNRYKbGjF8Ur0WhmQlZs4wgipDETyL1oOMXIAvqtxJBuf7H36acCnS9P";var _proj;var _heading;var _tileSize;var _node;function differenceEngine(s,a){var offset=0;var result='';var alen=a.length;var v;var p;for(var i=0;i<alen;i++){v=parseInt(a.charAt(i),10);if(!isNaN(v)){offset+=v;p=s.charAt(offset%s.length);result+=p;}}
return result;}
function getSafeString(x,y,nmd){var arg=x.toString()+y.toString()+((3*x)+y).toString();if(nmd){arg+=nmd;}
return differenceEngine(_substring,arg);}
function minResolution(){return minRes;}
function maxResolution(){return maxRes;}
function getTileUrl(point,zoom,date){var tileUrl;var nmDate;tileUrl=(typeof options.tileUrlTemplate==='function')?options.tileUrlTemplate(point,zoom):options.tileUrlTemplate;tileUrl=tileUrl.replace(/\{X\}/,point.x);tileUrl=tileUrl.replace(/\{Y\}/,point.y);tileUrl=tileUrl.replace(/\{Z\}/,zoom);if(/\{D\}/.test(tileUrl)){if(date){nmDate=nml.DateHelper.toNearmapDateUTC(date);tileUrl=tileUrl.replace(/\{D\}/,nmDate);}
else{tileUrl=tileUrl.replace(/&nmd=\{D\}/,'');}}
tileUrl+='&s='+getSafeString(point.x,point.y,nmDate);return tileUrl;}
function isPng(){return options.isPng;}
function getOpacity(){return options.opacity;}
function getCopyright(bounds,zoom){return copyrights.getCopyrightNotice(bounds,zoom);}
function getMetaKey(){return options.metaKey;}
function getAxisTileCoordinates(tile,offset,heading){var axisOffset=nmlm.rotatePoint(heading,offset,nmm.Point.ORIGIN,Math.round);return new nmm.Point(tile.x+axisOffset.x,tile.y+axisOffset.y);}
function hidePanShiftTile(tile,coords,wrapCoords,cssPos){var parent;if(tile.pngTimer){window.clearTimeout(tile.pngTimer);}
if(tile.style.filter){tile.style.removeAttribute('filter');}
tile.style[cssPos.direction]=cssPos.pxPnt;tile.isVertWrap=(wrapCoords.y===coords.y?false:true);tile.errored=false;if(tile.returned){parent=tile.parentNode;parent.tilesLoaded=parent.tilesLoaded>0?parent.tilesLoaded-1:0;parent.tilesReturned=parent.tilesReturned>0?parent.tilesReturned-1:0;}
tile.point=wrapCoords;tile.removeAttribute('src');tile.returned=false;tile.style.visibility='hidden';}
function hideReorganizePanShiftTile(tile){var parent;var onload;onload=tile.onload;if(tile.style.filter){tile.style.removeAttribute('filter');}
if(tile.returned){parent=tile.parentNode;if(!tile.errored){parent.tilesLoaded=parent.tilesLoaded>0?parent.tilesLoaded-1:0;}
parent.tilesReturned=parent.tilesReturned>0?parent.tilesReturned-1:0;}
if(nmc.browser.chrome||nmc.browser.safari){tile.src=nmm.DUMMY_TILE;}
if(tile.removeAttribute){tile.removeAttribute('src');}
tile.errored=false;tile.returned=false;tile.style.visibility='hidden';tile.onload=onload;}
function loadPannedTile(tile,zoom,date,png,opacity){if(_proj.tileCheckRange(tile.point,zoom)){if(tile.style.visibility==='hidden'&&!tile.returned&&!tile.src){url=getTileUrl(tile.wrappedPoint,zoom,date);if(png&&opacity<1){nms.replaceIEPngTile(tile);}
tile.src=url;}}
else{tile.src=nmm.WRAP_TILE;}}
function reloadTilesFast(zoom,date,rowStart,colStart,dx,dy){var rows=_tileSet.length;var cols=rows>0?_tileSet[0].length:0;var tileRow;var tile;var url;var png=isPng();var opacity=getOpacity();var r;var c;var inc;if(dy!==0){for(r=rowStart;r>=0&&r<rows;r-=dy){tileRow=_tileSet[r];for(c=0;c<cols;c++){loadPannedTile(tileRow[c],zoom,date,png,opacity);}}}
if(dx!==0){inc=(dy===0?1:dy);for(c=colStart;c>=0&&c<cols;c-=dx){for(r=rowStart+dy;r>=0&&r<rows;r+=inc){loadPannedTile(_tileSet[r][c],zoom,date,png,opacity);}}}}
function reloadAllTiles(zoom,date,png,opacity){return function(){var rows=_tileSet.length;var cols=(_tileSet[0]!==undefined?_tileSet[0].length:0);delete _timers.panDownloadTiles;for(var r=0;r<rows;r++){tileRow=_tileSet[r];for(var c=0;c<cols;c++){tile=tileRow[c];if(_proj.tileCheckRange(tile.point,zoom)){if(tile.style.visibility==='hidden'&&!tile.errored&&!tile.src){url=getTileUrl(tile.wrappedPoint,zoom,date);if(png){nms.replaceIEPngTile(tile);}
tile.src=url;}}
else{tile.src=nmm.WRAP_TILE;}}}};}
function shiftHorizontal(zoom,rows,cols,shiftCols){var tileRow;var tile;var ORIGIN=nmm.Point.ORIGIN;for(var i=0;i<rows;i++){for(var j=0;j<shiftCols;j++){tileRow=_tileSet[i];tile=tileRow.shift();tileRow.push(tile);tile.point=nmlm.rotatePoint(-_heading,tile.point,ORIGIN,Math.round);tile.point.x+=cols;tile.point=nmlm.rotatePoint(_heading,tile.point,ORIGIN,Math.round);tile.wrappedPoint=tile.point.copy();tile.wrappedPoint.x=_proj.wrapTileXCoordinate(zoom,tile.wrappedPoint.x);hideReorganizePanShiftTile(tile);tile.style.left=(parseInt(tile.style.left,10)+(cols*_tileSize.width))+'px';}}}
function unshiftHorizontal(zoom,rows,cols,unshiftCols){var tileRow;var tile;var ORIGIN=nmm.Point.ORIGIN;for(var i=0;i<rows;i++){for(var j=0;j<unshiftCols;j++){tileRow=_tileSet[i];tile=tileRow.pop();tileRow.unshift(tile);tile.point=nmlm.rotatePoint(-_heading,tile.point,ORIGIN,Math.round);tile.point.x-=cols;tile.point=nmlm.rotatePoint(_heading,tile.point,ORIGIN,Math.round);tile.wrappedPoint=tile.point.copy();tile.wrappedPoint.x=_proj.wrapTileXCoordinate(zoom,tile.wrappedPoint.x);hideReorganizePanShiftTile(tile);tile.style.left=(parseInt(tile.style.left,10)-(cols*_tileSize.width))+'px';}}}
function shiftVertical(zoom,rows,cols,shiftRows){var tileRow;var tile;var ORIGIN=nmm.Point.ORIGIN;for(var s=0;s<shiftRows;s++){for(var i=1;i<rows;i++){tileRow=_tileSet[i-1];_tileSet[i-1]=_tileSet[i];_tileSet[i]=tileRow;if(i===1){for(var j=0;j<cols;j++){tile=tileRow[j];tile.point=nmlm.rotatePoint(-_heading,tile.point,ORIGIN,Math.round);tile.point.y+=rows;tile.point=nmlm.rotatePoint(_heading,tile.point,ORIGIN,Math.round);tile.wrappedPoint=tile.point.copy();tile.wrappedPoint.x=_proj.wrapTileXCoordinate(zoom,tile.wrappedPoint.x);hideReorganizePanShiftTile(tile);tile.style.top=(parseInt(tile.style.top,10)+(rows*_tileSize.height))+'px';}}}}}
function unshiftVertical(zoom,rows,cols,unshiftRows){var tileRow;var tile;var newRowEnd=rows-2;var ORIGIN=nmm.Point.ORIGIN;for(var s=0;s<unshiftRows;s++){for(var i=newRowEnd;i>=0;i--){tileRow=_tileSet[i+1];_tileSet[i+1]=_tileSet[i];_tileSet[i]=tileRow;if(i===newRowEnd){for(var j=0;j<cols;j++){tile=tileRow[j];tile.point=nmlm.rotatePoint(-_heading,tile.point,ORIGIN,Math.round);tile.point.y-=rows;tile.point=nmlm.rotatePoint(_heading,tile.point,ORIGIN,Math.round);tile.wrappedPoint=tile.point.copy();tile.wrappedPoint.x=_proj.wrapTileXCoordinate(zoom,tile.wrappedPoint.x);hideReorganizePanShiftTile(tile);tile.style.top=(parseInt(tile.style.top,10)-(rows*_tileSize.height))+'px';}}}}}
function stopDownloadTileTimers(){var timers=_timers.downloadTiles;for(var p in timers){if(timers.hasOwnProperty(p)){window.clearTimeout(timers[p]);delete timers[p];}}}
this.initialize=function(zoom,tileDate,originTile,dimension,divOffset,proj,opts){var frag=document.createDocumentFragment();var height=dimension.height;var width=dimension.width;var tileRow;var tile;var point;var wrappedPoint;var position;stopDownloadTileTimers();opts=nmo.Synchronize.fill(opts,TileLayerInitilizationOptions);_tileSet=[];_heading=opts.heading;_tileSize=opts.tileSize;_proj=proj;_node=document.createElement('div');_node.layerIndex=opts.layerIndex;_node.tilesLoaded=0;_node.tilesReturned=0;frag.appendChild(_node);for(var i=0;i<height;i++){tileRow=[];position={y:divOffset.y+(i*_tileSize.height)};for(var j=0;j<width;j++){point=getAxisTileCoordinates(originTile,{x:j,y:i},_heading);wrappedPoint=point.copy();wrappedPoint.x=proj.wrapTileXCoordinate(zoom,wrappedPoint.x);wrappedPoint.y=proj.wrapTileYCoordinate(zoom,wrappedPoint.y);position.x=divOffset.x+(j*_tileSize.width);tile=TileLayer.createTile(point,wrappedPoint,zoom,tileDate,_tileSize,position,opts.tileLoadHandler,opts.tileErrorHandler);tileRow.push(tile);_node.appendChild(tile);}
_tileSet[i]=tileRow;}
tileRow=null;tile=null;opts.downloadTiles(_tileSet,_timers.downloadTiles,height,width,divOffset,_tileSize,_proj.tileCheckRange,getTileUrl,isPng(),getOpacity());return frag;};this.getTile=function(row,col){return _tileSet[row][col];};this.getNorthEastTile=function(){var northRow=_tileSet[0];return northRow&&northRow.length>0?northRow[northRow.length-1]:null;};this.getSouthWestTile=function(){var southRow=_tileSet[_tileSet.length-1];return southRow&&southRow.length>0?southRow[0]:null;};this.copyTileSet=function(){return _tileSet.slice();};this.reorganize=function(zoom,tileDate,directionX,directionY){var rows=_tileSet.length;var cols=_tileSet[0].length;var rowStart=0;var rowEnd=0;var colStart=0;var colEnd=0;var dx=(directionX!==0?directionX/Math.abs(directionX):0);var dy=(directionY!==0?directionY/Math.abs(directionY):0);if(directionX<0){colStart=cols+directionX;shiftHorizontal(zoom,rows,cols,Math.abs(directionX));}
else if(directionX>0){colStart=directionX-1;unshiftHorizontal(zoom,rows,cols,directionX);}
if(directionY<0){rowStart=rows+directionY;shiftVertical(zoom,rows,cols,Math.abs(directionY));}
else if(directionY>0){rowStart=directionY-1;unshiftVertical(zoom,rows,cols,directionY);}
reloadTilesFast(zoom,tileDate,rowStart,colStart,dx,dy);};this.clear=function(){var row;if(_timers.loadImages){window.clearTimeout(_timers.loadImages);delete _timers.loadImages;}
_node=null;for(var r=_tileSet.length;r--;){row=_tileSet[r];for(var c=row.length;c--;){row[c].onload=null;row[c].onerror=null;}}
_tileSet=[];};this.hide=function(){_node.style.display='none';};this.isHidden=function(){return _node.style.display==='none';};options=nmo.Synchronize.fill(options,TileLayerOptions);_timers.downloadTiles={};_timers.panDownloadTiles={};this.minResolution=minResolution;this.maxResolution=maxResolution;this.getTileUrl=getTileUrl;this.isPng=isPng;this.getOpacity=getOpacity;this.getCopyright=getCopyright;this.getMetaKey=getMetaKey;}
TileLayer.scaleTileSet=function(tileSet,scaledTileSize,divOffset){var width=scaledTileSize.width;var height=scaledTileSize.height;var offsetX=divOffset.x;var offsetY=divOffset.y;var cssText;var rowCssText;var row;var tile;var topPos;cssText='position: absolute;'+'width:'+width+'px;'+'height:'+height+'px;'+
(nmm.debug?'border:solid 1px blue;':'');for(var i=tileSet.length;i--;){row=tileSet[i];rowCssText=cssText+'top:'+(offsetY+(height*i))+'px;';for(var j=row.length;j--;){tile=row[j];tile.style.cssText=rowCssText+'z-index:'+tile.zoom+';'+'left:'+(offsetX+(width*j))+'px;'+'visibility:'+(tile.style?tile.style.visibility:'hidden')+';';}}};TileLayer.createTile=function(point,wrappedPoint,zoom,tileDate,tileSize,position,tileLoadHandler,tileErrorHandler){var img=document.createElement('img');img.isMap=true;img.point=point;img.wrappedPoint=wrappedPoint;img.zoom=zoom;img.date=tileDate;img.alt='';img.galleryimg='no';img.style.cssText='position:absolute; visibility:hidden;'+'width:'+tileSize.width+'px;'+'height:'+tileSize.height+'px;'+'z-index:'+zoom+';'+'left:'+position.x+'px;'+'top:'+position.y+'px;';img.onload=nmev.callback(img,tileLoadHandler);img.onerror=nmev.callback(img,tileErrorHandler);if(nmm.debug){img.style.border='solid 1px red';}
return img;};function Copyright(id,bounds,minZoom,text){this.id=id;this.bounds=bounds;this.minZoom=minZoom;this.text=text;}
function CopyrightCollection(prefix){var cpcol=[];function addCopyright(copyright){cpcol.push(copyright);nmev.trigger(this,'newcopyright',copyright);}
function getCopyrights(bounds,zoom){var cpstr=[],cpr;for(var i=0;i<cpcol.length;i++){cpr=cpcol[i];if(zoom>=cpr.minZoom&&(cpr.bounds.containsBounds(bounds)||cpr.bounds.intersects(bounds))){cpstr.push(cpcol[i].text);}}
return cpstr;}
function getCopyrightNotice(bounds,zoom){var cpr=getCopyrights(bounds,zoom);if(cpr.length===0){return null;}
return(typeof prefix==='string'?prefix+' ':'')+cpr.join(', ');}
this.addCopyright=addCopyright;this.getCopyrights=getCopyrights;this.getCopyrightNotice=getCopyrightNotice;this.newcopyright=function(copyright){};}
nmm.TileLayer=TileLayer;nmm.TileLayerOptions=TileLayerOptions;nmm.HostOptions=HostOptions;nmm.Copyright=Copyright;nmm.CopyrightCollection=CopyrightCollection;})();(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nmd=nearmap.dom;var nmov=nearmap.overlay;var nmm=nearmap.maps;var nmo=nearmap.options;var nms=nearmap.style;var nmev=nearmap.event;var nmc=nearmap.client;var nme=nearmap.memory;var nml=nearmap.lib;var nmls=nearmap.lib.sprite;var nmlm=nearmap.lib.math;var nma=nearmap.animation;var InfoWindowContent={createSearchResult:function(map,title,url,social){var that=this;var frag=document.createDocumentFragment();var titleWrap=document.createElement('h3');var contentWrap=document.createElement('div');var buttonWrap=document.createElement('div');var deleteButton=document.createElement('a');var shareButton;var shareLink;titleWrap.innerHTML=title;deleteButton.innerHTML='Delete';nms.css(titleWrap,{'margin':'5px 30px 8px 8px','padding':'0px'},true);nms.css(contentWrap,{},true);nms.css(buttonWrap,{'background':'#f0f0f0','border-top':'solid 1px #e4e4e4','font-size':'13px','padding':'10px'},true);nms.css(deleteButton,{'color':'#0000ff','cursor':'pointer','text-decoration':'underline'},true);deleteButton.onclick=function(){if(shareButton){shareButton.onclick=null;}
deleteButton.onclick=null;that.closeInfoWindow();map.removeOverlay(that);};frag.appendChild(titleWrap);frag.appendChild(contentWrap);frag.appendChild(buttonWrap);if(url){if(social){shareButton=document.createElement('input');shareButton.type='submit';shareButton.value='Share';nms.css(shareButton,{'float':'right','position':'relative'},true);shareButton.onclick=function(){social.setUrl(url);social.open();};buttonWrap.appendChild(shareButton);}
else{shareLink=document.createElement('a');shareLink.innerHTML='Share';shareLink.href=url;nms.css(shareLink,{'color':'#0000ff','float':'right','position':'relative','text-decoration':'underline'},true);buttonWrap.appendChild(shareLink);}}
buttonWrap.appendChild(deleteButton);return frag;},createShareLocation:function(latlng,map,social){var _that=this;function onselecttext(e){this.focus();this.select();}
function onsharesubmit(e){return nmev.preventDefault(e);}
function ontitlekeyup(){var marker=arguments[arguments.length-2];var shareTextarea=arguments[arguments.length-1];var query=window.encodeURIComponent(this.value||'')+'@'+marker.getLatLng().toString();shareTextarea.value=map.generatePermalink({query:query});marker.state={title:this.value,shareurl:shareTextarea.value};}
function oncopyclick(e){var shareTextArea=arguments[arguments.length-1];if(window.clipboardData.setData('Text',shareTextArea.value)){alert('Your marker location was copied to the clipboard');}
else{alert('Your marker location couldn\'t be copied to the clipboard because you have disabled access');}}
function ondeleteclick(e){_that.closeInfoWindow();map.removeOverlay(_that);}
function createMoreButton(map,shareTextarea,social){var moreButton=document.createElement('input');moreButton.type='submit';moreButton.value='More';nms.css(moreButton,{'position':'relative','float':'right'},true);moreButton.onclick=function(){map.getInfoWindow().hide();social.setUrl(shareTextarea.value);social.open();};return moreButton;}
function createNode(){var frag=document.createDocumentFragment();var shareForm=document.createElement('form');var inputWrap=document.createElement('div');var buttonWrap=document.createElement('div');var titleWrap=document.createElement('div');var titleLabel=document.createElement('label');var titleTextbox=document.createElement('input');var shareWrap=document.createElement('div');var shareLabel=document.createElement('label');var shareTextarea=document.createElement('textarea');var deleteButton=document.createElement('a');var mapTypeKey;var copy;mapTypeKey=nmm.MapType.Keys[map.getCurrentMapType().getName(false)];titleTextbox.id='nearmap-marker-title';titleTextbox.name='title';titleTextbox.type='text';titleTextbox.value=(_that.state&&_that.state.title)||'';titleLabel.innerHTML='Title:';titleLabel.htmlFor=titleTextbox.id;shareTextarea.id='nearmap-marker-shareurl';shareTextarea.name='shareurl';shareTextarea.innerHTML=(_that.state&&_that.state.shareurl)||map.generatePermalink({query:'@'+_that.getLatLng().toString(),latlng:latlng});shareLabel.innerHTML='Share:';shareLabel.htmlFor=shareTextarea.id;deleteButton.innerHTML='Delete';nms.css(inputWrap,{'margin':'10px 10px'},true);nms.css(buttonWrap,{'background':'#f0f0f0','border-top':'solid 1px #e4e4e4','padding':'10px 10px'},true);nms.css(titleWrap,{'margin':'0px 0px 8px 0px'},true);nms.css(titleLabel,{'color':'#004687','float':'left','font-weight':'bold','position':'relative','width':'4em'},true);nms.css(titleTextbox,{'border':'solid 1px #ccc','padding':'2px 0px','width':'13em'},true);nms.css(shareLabel,{'clear':'both','color':'#004687','display':'block','font-weight':'bold'},true);nms.css(shareTextarea,{'border':'solid 1px #ccc','height':'100px','padding':'2px 0px','width':'240px'},true);nms.css(deleteButton,{'background':'none','border':'none','color':'blue','cursor':'pointer','font-size':'12px','text-decoration':'underline'},true);shareForm.onsubmit=onsharesubmit;shareTextarea.onfocus=nmev.callback(shareTextarea,onselecttext);titleTextbox.onkeyup=nmev.callbackArgs(titleTextbox,ontitlekeyup,_that,shareTextarea);deleteButton.onclick=nmev.callbackArgs(deleteButton,ondeleteclick,_that,map);frag.appendChild(shareForm);shareForm.appendChild(inputWrap);shareForm.appendChild(buttonWrap);inputWrap.appendChild(titleWrap);inputWrap.appendChild(shareWrap);if(window.clipboardData){copy=document.createElement('a');copy.innerHTML='Copy';nms.css(copy,{'color':'blue','cursor':'pointer','font-size':'12px','text-decoration':'underline'},true);copy.onclick=nmev.callbackArgs(copy,oncopyclick,shareTextarea);inputWrap.appendChild(copy);}
titleWrap.appendChild(titleLabel);titleWrap.appendChild(titleTextbox);shareWrap.appendChild(shareLabel);shareWrap.appendChild(shareTextarea);if(social){buttonWrap.appendChild(createMoreButton(map,shareTextarea,social));}
buttonWrap.appendChild(deleteButton);return frag;}
return createNode();}};function Overlay(){this.initialize=function(map){throw new Exception('Required Interface method not implemented: initialize');};this.remove=function(){throw new Exception('Required Interface method not implemented: remove');};this.copy=function(){throw new Exception('Required Interface method not implemented: copy');};this.redraw=function(force){throw new Exception('Required Interface method not implemented: redraw');};this.getKml=function(callback){throw new Exception('Required Interface method not implemented: getKml');};}
Overlay.getZIndex=function(latitude){return latitude*-100000<<5;};var MapPane={MAP_PANE:0,OVERLAY_LAYER_PANE:1,MARKER_SHADOW_PANE:2,MARKER_PANE:4,FLOAT_SHADOW_PANE:5,MARKER_MOUSE_TARGET_PANE:6,FLOAT_PANE:7};function Icon(copy,image){if(copy){nmo.Synchronize.copy(copy,this);}
if(image){this.image=image;}}
Icon.DEFAULT_ICON=new Icon(null,nmm.HOST_URL+'img/default-marker-icon.png');Icon.DEFAULT_ICON.iconSize=new nmm.Size(30,34);Icon.DEFAULT_ICON.iconAnchor=new nmm.Point(-15,-34);Icon.DEFAULT_ICON.imageMap=[];Icon.DEFAULT_ICON.maxHeight=20;Icon.DEFAULT_ICON.dragCrossImage=nmm.HOST_URL+'img/default_drag_cross.png';Icon.DEFAULT_ICON.dragCrossSize=new nmm.Size(21,17);Icon.DEFAULT_ICON.dragCrossAnchor=new nmm.Point(-10,-6);Icon.DEFAULT_DRAGGABLE_ICON=new Icon(Icon.DEFAULT_ICON,nmm.HOST_URL+'img/default-draggable-marker-icon.png');Icon.DEFAULT_DRAGGABLE_ICON.iconSize=new nmm.Size(27,33);Icon.DEFAULT_DRAGGABLE_ICON.iconAnchor=new nmm.Point(-14,-33);var MarkerOptions={icon:Icon.DEFAULT_ICON,dragCrossMove:false,title:undefined,clickable:true,draggable:false,bouncy:true,bounceGravity:1,autoPan:true,zIndexProcess:function(){},hide:false};var LabeledMarkerOptions={labelText:'',labelClass:'',labelOffset:new nmm.Size(MarkerOptions.icon.iconAnchor.x+10,MarkerOptions.icon.iconAnchor.y+2),icon:MarkerOptions.icon,dragCrossMove:MarkerOptions.dragCrossMove,title:MarkerOptions.title,clickable:MarkerOptions.clickable,draggable:MarkerOptions.draggable,bouncy:MarkerOptions.draggable,bounceGravity:MarkerOptions.bounceGravity,autoPan:MarkerOptions.autoPan,zIndexProcess:MarkerOptions.zIndexProcess,hide:MarkerOptions.hide};var OverlayHelper={reposition:function(images,latlng,map,pixelOffset){var divPx=map.fromLatLngToDivPixel(latlng);var divOffsetPx;var image;divOffsetPx=(pixelOffset?new nmm.Point(divPx.x+pixelOffset.width,divPx.y+pixelOffset.height):divPx);for(var i=images.length;i--;){image=images[i];image.style.left=divOffsetPx.x+'px';image.style.top=divOffsetPx.y+'px';}
return divPx;},isInCenteredViewport:function(divPx,map){var tileContainer=map.getTileContainer();var size=map.getSize(true);var left=parseInt(tileContainer.style.left,10);var divCenter=Math.floor(size.width/2)-left;var mapType=map.getCurrentMapType();var sclTSize=mapType.getScaledTileSize();var halfPx=Math.floor(mapType.getProjection().getWrapWidth(map.getZoom(),sclTSize.width)/2);return Math.abs(divCenter-divPx.x)<=halfPx;}};function Marker(latlng,opts){var _that=this;var _draggable;var _isInfoWindowOpen=false;var _infoWindowOpts=null;var _infoWindowDom=null;var _infoWindowHtml=null;var _infoWindowTabsDom=null;var _infoWindowTabsHtml=null;function copy(){}
function getKml(callback){}
function openInfoWindow(content,opts){bindInfoWindow(content,opts);this.map.openInfoWindow(latlng,content,opts);_isInfoWindowOpen=true;}
function openInfoWindowHtml(content,opts){bindInfoWindowHtml(content,opts);this.map.openInfoWindowHtml(latlng,content,opts);_isInfoWindowOpen=true;}
function openInfoWindowTabs(tabs,opts){bindInfoTabs(tabs,opts);this.map.openInfoWindowTabs(latlng,content,opts);_isInfoWindowOpen=true;}
function openInfoWindowTabsHtml(tabs,opts){bindInfoTabsHtml(tabs,opts);this.map.openInfoWindowTabsHtml(latlng,content,opts);_isInfoWindowOpen=true;}
function bindInfoWindow(content,opts){_infoWindowDom=content;_infoWindowOpts=opts;}
function bindInfoWindowHtml(content,opts){_infoWindowHtml=content;_infoWindowOpts=opts;}
function bindInfoWindowTabs(tabs,opts){_infoWindowTabs=content;_infoWindowOpts=opts;}
function bindInfoWindowTabsHtml(tabs,opts){_infoWindowTabsHtml=content;_infoWindowOpts=opts;}
function closeInfoWindow(){if(_isInfoWindowOpen){this.map.getInfoWindow().hide();_isInfoWindowOpen=false;}}
function setInfoWindowOpen(isOpen){_isInfoWindowOpen=isOpen;}
function showMapBlowup(opts){}
function getIcon(){return this.opts.icon;}
function getTitle(){return this.opts.title;}
function getLatLng(){return latlng;}
function setLatLng(ll){latlng=ll;}
function enableDragging(){_draggable=true;}
function disableDragging(){_draggable=false;}
function draggable(){return this.opts.draggable;}
function draggingEnabled(){return _draggable;}
function setImage(url){}
function hide(){this.foregroundImage.style.display='none';if(this.shadowImage){this.shadowImage.style.display='none';}}
function show(){this.foregroundImage.style.display='';if(this.shadowImage){this.shadowImage.style.display='';}}
function isHidden(){return this.foregroundImage.style.display==='none';}
this.copy=copy;this.getKml=getKml;this.openInfoWindow=openInfoWindow;this.openInfoWindowHtml=openInfoWindowHtml;this.openInfoWindowTabs=openInfoWindowTabs;this.openInfoWindowTabsHtml=openInfoWindowTabsHtml;this.bindInfoWindow=bindInfoWindow;this.bindInfoWindowTabs=bindInfoWindowTabs;this.bindInfoWindowTabsHtml=bindInfoWindowTabsHtml;this.closeInfoWindow=closeInfoWindow;this.setInfoWindowOpen=setInfoWindowOpen;this.showMapBlowup=showMapBlowup;this.getIcon=getIcon;this.getTitle=getTitle;this.getLatLng=getLatLng;this.setLatLng=setLatLng;this.enableDragging=enableDragging;this.disableDragging=disableDragging;this.draggable=draggable;this.draggingEnabled=draggingEnabled;this.setImage=setImage;this.hide=hide;this.show=show;this.isHidden=isHidden;this.opts=nmo.Synchronize.fill(opts,MarkerOptions);this.speed=0;this.direction=1;this.bounceHeight=0.3;_draggable=this.opts.draggable;}
Marker.prototype=new Overlay();Marker.prototype.constructor=Marker;Marker.prototype.oninfowindowhidden=function(){this.setInfoWindowOpen(false);};Marker.prototype.oninfowindowredraw=function(){this.setInfoWindowOpen(false);};Marker.prototype.onmarkerclick=function(e){var latlng=this.getLatLng();var container;var clickedLatLng;e=e||window.event;container=this.map.getContainer();clickedLatLng=this.map.fromContainerPixelToLatLng(new nmm.Point(e.clientX-container.offsetLeft,e.clientY-container.offsetTop));nmev.trigger(this.map,'click',this,clickedLatLng,latlng);nmev.trigger(this,'click',latlng);return nmev.stopBubbling(e);};Marker.prototype.onmarkerdblclick=function(e){nmev.trigger(this,'dblclick',this.getLatLng());return nmev.stopBubbling(e);};Marker.prototype.moveIcons=function(distance){var foregroundImage=this.foregroundImage;var shadowImage=this.shadowImage;var dragCrossImage=this.dragCrossImage;foregroundImage.style.left=(parseInt(foregroundImage.style.left,10)+distance.x)+'px';foregroundImage.style.top=(parseInt(foregroundImage.style.top,10)+distance.y)+'px';if(shadowImage){shadowImage.style.left=(parseInt(shadowImage.style.left,10)+distance.x)+'px';shadowImage.style.top=(parseInt(shadowImage.style.top,10)+distance.y)+'px';}
if(dragCrossImage){dragCrossImage.style.left=(parseInt(dragCrossImage.style.left,10)+distance.x)+'px';dragCrossImage.style.top=(parseInt(dragCrossImage.style.top,10)+distance.y)+'px';}};Marker.prototype.positionDragCross=function(position){var icon=this.opts.icon;nms.css(this.dragCrossImage,{'display':'','left':(position.x+icon.dragCrossAnchor.x)+'px','top':(position.y+icon.dragCrossAnchor.y)+'px','z-index':Overlay.getZIndex(this.getLatLng().lat())});};Marker.prototype.renderPickup=function(){var crossPx=this.map.fromLatLngToDivPixel(this.getLatLng());var icon=this.opts.icon;if(this.opts.dragCrossMove){this.dragCeil=parseInt(this.foregroundImage.style.top,10);this.dragFloor=this.dragCeil+icon.maxHeight-icon.iconAnchor.y;crossPx.y=this.dragFloor;}
else{this.dragFloor=parseInt(this.foregroundImage.style.top,10);this.dragCeil=this.dragFloor-icon.maxHeight;this.foregroundImage.style.top=(this.dragFloor-icon.maxHeight)+'px';}
Marker.prototype.positionDragCross.call(this,crossPx);};Marker.prototype.animateMarkerFalling=function(startDate,currentDate){var top;var speed;speed=this.speed+(this.direction>0?this.opts.bounceGravity:this.opts.bounceGravity*2);top=parseInt(this.foregroundImage.style.top,10)+speed;if(top>this.dragFloor){top=this.dragFloor;}
if(top<this.dragCeil){top=this.dragCeil;}
if(top===this.dragFloor){_direction=-1;this.dragCeil=this.dragFloor-Math.floor((this.dragFloor-this.dragCeil)*this.bounceHeight);speed=speed*-1;}
if(top===this.dragCeil){this.direction=1;speed=0;}
this.foregroundImage.style.top=top+'px';this.speed=speed;};Marker.prototype.markerDropEnd=function(){if(this.dragCrossImage){this.dragCrossImage.style.display='none';}
this.direction=1;this.speed=0;this.foregroundImage.style.top=this.dragFloor+'px';};Marker.prototype.stopMarkerBounce=function(){var that=this;return function(){return that.dragCeil===that.dragFloor;};};Marker.prototype.renderDrop=function(){var frameLength;if(this.opts.bouncy){frameLength=Math.floor(1000/24);nma.runContinuousAnimation(frameLength,nmev.callback(this,Marker.prototype.animateMarkerFalling),nmev.callback(this,Marker.prototype.markerDropEnd),Marker.prototype.stopMarkerBounce.call(this));}
else{Marker.prototype.markerDropEnd.call(this);}};Marker.prototype.onmarkermousemove=function(e){var map=this.map;var latlng;var mapType;var proj;var tScale;var heading;var distMoved;var sclDistMoved;var rotatedDistMoved;this.moved=true;if(this.draggingEnabled()){e=e||window.event;mapType=map.getCurrentMapType();proj=mapType.getProjection();latlng=this.getLatLng();this.foregroundImage.style.cursor=nmls.CURSOR_PAN_DOWN.css;if(!this.latlngPx){Marker.prototype.renderPickup.call(this);this.latlngPx=proj.fromLatLngToPixel(latlng,map.getZoom(),mapType.getTileSize());nmev.trigger(this,'dragstart',latlng);}
else{nmev.trigger(this,'drag',latlng);}
heading=mapType.getHeading();tScale=mapType.getTileScale();distMoved=new nmm.Point(e.clientX-this.clientX,e.clientY-this.clientY);sclDistMoved=new nmm.Point(distMoved.x/tScale.x,distMoved.y/tScale.y);rotatedDistMoved=nmlm.rotatePoint(heading,sclDistMoved,nmm.Point.ORIGIN,Math.round);this.clientX=e.clientX;this.clientY=e.clientY;this.latlngPx.add(rotatedDistMoved.x,rotatedDistMoved.y);this.setLatLng(proj.fromPixelToLatLng(this.latlngPx,map.getZoom(),false,mapType.getTileSize()));this.dragCeil=this.dragCeil+distMoved.y;this.dragFloor=this.dragFloor+distMoved.y;Marker.prototype.moveIcons.call(this,distMoved);return nmev.preventDefault(e);}};Marker.prototype.onwindowmarkermouseup=function(e){e=e||window.event;if(this.opts.draggable&&this.moved){Marker.prototype.renderDrop.call(this);nmev.trigger(this,'dragend',this.getLatLng());}
else if(!this.moved){Marker.prototype.onmarkerclick.call(this,e);}
this.foregroundImage.style.cursor='pointer';nmev.removeListener(this.onwindowmarkermouseup);nmev.removeListener(this.onmarkermousemove);delete this.onwindowmarkermouseup;delete this.onmarkermousemove;delete this.latlngPx;delete this.clientX;delete this.clientY;delete this.moved;return nmev.preventDefault(e);};Marker.prototype.onmarkermousedown=function(e){e=e||window.event;if(nmev.getMouseButton(e)===nmev.MouseButton.LEFT_BUTTON){this.clientX=e.clientX;this.clientY=e.clientY;this.onmarkermousemove=nmev.addDomListener(document,'mousemove',nmev.callback(this,Marker.prototype.onmarkermousemove));this.onwindowmarkermouseup=nmev.addDomListener(document,'mouseup',nmev.callback(this,Marker.prototype.onwindowmarkermouseup));}
nmev.trigger(this,'mousedown',this.getLatLng());nmev.stopBubbling(e);return nmev.preventDefault(e);};Marker.prototype.onmarkermouseup=function(e){nmev.trigger(this,'mouseup',this.getLatLng());};Marker.prototype.onmarkermouseover=function(e){nmev.trigger(this,'mouseover',this.getLatLng());};Marker.prototype.onmarkermouseout=function(e){nmev.trigger(this,'mouseout',this.getLatLng());};Marker.prototype.initialize=function(map){var opts=this.opts;var icon=opts.icon;var foregroundImage;var shadowImage;var dragCrossImage;var tooltip;var infoWindow;foregroundImage=document.createElement('div');shadowImage=null;dragCrossImage=document.createElement('div');infoWindow=map.getInfoWindow();nms.css(foregroundImage,{'height':icon.iconSize.getHeightString(),'width':icon.iconSize.getWidthString(),'position':'absolute'},true);nms.applyPngAlphaBg(foregroundImage,icon.image);nms.css(dragCrossImage,{'display':'none','height':icon.dragCrossSize.getHeightString(),'width':icon.dragCrossSize.getWidthString(),'position':'absolute'},true);nms.applyPngAlphaBg(dragCrossImage,icon.dragCrossImage);if(opts.title){tooltip=new nmd.Tooltip(opts.title,foregroundImage,map.getContainer());}
if(opts.clickable){foregroundImage.style.cursor='pointer';foregroundImage.onmousedown=nmev.callback(this,Marker.prototype.onmarkermousedown);foregroundImage.onmouseup=nmev.callback(this,Marker.prototype.onmarkermouseup);foregroundImage.onclick=nmev.stopBubbling;foregroundImage.ondblclick=nmev.callback(this,Marker.prototype.onmarkerdblclick);}
foregroundImage.onmouseover=nmev.callback(this,Marker.prototype.onmarkermouseover);foregroundImage.onmouseout=nmev.callback(this,Marker.prototype.onmarkermouseout);this.onmapsetcenter=nmev.addListener(map,'setcenter',nmev.callbackArgs(this,Marker.prototype.redraw,true));this.oninfowindowhidden=nmev.addListener(infoWindow,'hidden',nmev.callback(this,Marker.prototype.oninfowindowhidden));this.oninfowindowredraw=nmev.addListener(infoWindow,'redraw',nmev.callback(this,Marker.prototype.oninfowindowredraw));map.getPane(MapPane.MARKER_PANE).appendChild(foregroundImage);map.getPane(MapPane.MARKER_SHADOW_PANE).appendChild(dragCrossImage);this.infoWindow=infoWindow;this.foregroundImage=foregroundImage;this.shadowImage=shadowImage;this.dragCrossImage=dragCrossImage;this.tooltip=tooltip;this.map=map;};Marker.prototype.redraw=function(force){var opts;var px;var foregroundImage;var shadowImage;var dragCrossImage;var latlng;var iconAnchor;if(!force){return;}
opts=this.opts;latlng=this.getLatLng();px=this.map.fromLatLngToDivPixel(latlng);foregroundImage=this.foregroundImage;shadowImage=this.shadowImage;dragCrossImage=this.dragCrossImage;iconAnchor=opts.icon.iconAnchor;foregroundImage.style.left=(px.x+iconAnchor.x)+'px';foregroundImage.style.top=(px.y+iconAnchor.y)+'px';foregroundImage.style.zIndex=Overlay.getZIndex(latlng.lat());if(shadowImage){}};Marker.prototype.remove=function(){var container=this.map.getContainer();var foregroundImage=this.foregroundImage;this.foregroundImage=null;foregroundImage.onmousedown=null;foregroundImage.onmouseup=null;foregroundImage.onclick=null;foregroundImage.ondblclick=null;foregroundImage.onmouseover=null;foregroundImage.onmouseout=null;nme.discardElement(foregroundImage,container);if(this.shadowImage){nme.discardElement(this.shadowImage,container);this.shadowImage=null;}
if(this.dragCrossImage){nme.discardElement(this.dragCrossImage,container);this.dragCrossImage=null;}
nmev.removeListener(this.onmapsetcenter);nmev.removeListener(this.oninfowindowhidden);nmev.removeListener(this.oninfowindowredraw);this.onmapsetcenter=null;this.oninfowindowhidden=null;this.oninfowindowredraw=null;};function LabeledMarker(latlng,opts){Marker.apply(this,arguments);this.opts=nmo.Synchronize.fill(opts,LabeledMarkerOptions);}
LabeledMarker.prototype=new Marker(new nmm.LatLng(0,0));LabeledMarker.prototype.constructor=LabeledMarker;LabeledMarker.prototype.initialize=function(map){var labelDiv;Marker.prototype.initialize.call(this,map);labelDiv=document.createElement('div');if(this.opts.labelClass){labelDiv.className=this.opts.labelClass;}
if(this.opts.clickable){labelDiv.style.cursor='pointer';}
labelDiv.innerHTML=this.opts.labelText;labelDiv.style.position='absolute';nmev.disableSelect(labelDiv);map.getPane(MapPane.MARKER_PANE).appendChild(labelDiv);this.map=map;this.labelDiv=labelDiv;};LabeledMarker.prototype.redraw=function(force){var opts;var px;var labelDiv;var z;var latlng;if(!force){return;}
Marker.prototype.redraw.call(this,force);opts=this.opts;latlng=this.getLatLng();px=this.map.fromLatLngToDivPixel(latlng);labelDiv=this.labelDiv;z=Overlay.getZIndex(latlng.lat());labelDiv.style.left=(px.x+opts.labelOffset.width)+'px';labelDiv.style.top=(px.y+opts.labelOffset.height)+'px';labelDiv.style.zIndex=z+1;labelDiv.style.color='#fff';labelDiv.style.fontSize='14px';};LabeledMarker.prototype.remove=function(force){nme.discardElement(this.labelDiv,this.map.getContainer());this.labelDiv=null;Marker.prototype.remove.call(this);};var MarkerManagerOptions={borderPadding:0,maxZoom:null,trackMarkers:false};function MarkerManager(map,opts){var _markers=[];var _timers={};function doRefresh(){var size=map.getSize(true);var zoom=map.getZoom();var mapType=map.getCurrentMapType();var proj=mapType.getProjection();var sclTSize=mapType.getScaledTileSize();var wrapWidth=proj.getWrapWidth(zoom,sclTSize.width);var wrapHeight=proj.getWrapHeight(zoom,sclTSize.height);delete _timers.refresh;refresh(wrapWidth<=size.width||wrapHeight<size.height);}
function delayrefresh(){if(_markers.length>0){if(_timers.refresh){window.clearTimeout(_timers.refresh);}
_timers.refresh=window.setTimeout(doRefresh,100);}}
function getPaddedBounds(){var padding=opts.borderPadding;var bounds=map.getBounds();var mapType;var proj;var zoom;var sclTSize;var swpx,nepx;var sw,ne;var dimension;var wrapWidth;var wrapHeight;if(padding===0){return bounds;}
mapType=map.getCurrentMapType();proj=mapType.getProjection();zoom=map.getZoom();sclTSize=mapType.getScaledTileSize();wrapWidth=proj.getWrapWidth(zoom,sclTSize.width);wrapHeight=proj.getWrapHeight(zoom,sclTSize.height);swpx=proj.fromLatLngToPixel(bounds.getSouthWest(),zoom,sclTSize);nepx=proj.fromLatLngToPixel(bounds.getNorthEast(),zoom,sclTSize);swpx.x-=padding;swpx.y+=padding;nepx.x+=padding;nepx.y-=padding;if(nepx.y<0){nepx.y=0;}
if(swpx.y>=wrapHeight){swpx.y=wrapHeight-1;}
sw=proj.fromPixelToLatLng(swpx,zoom,false,sclTSize);ne=proj.fromPixelToLatLng(nepx,zoom,false,sclTSize);if(swpx.x<0){sw=new nmm.LatLng(sw.lat(),-180);}
if(nepx.x>=wrapWidth){ne=new nmm.LatLng(ne.lat(),180);}
return new nmm.LatLngBounds(sw,ne);}
function shouldBeVisible(marker,minZoom,maxZoom,paddedBounds,currentZoom){return currentZoom>=minZoom&&currentZoom<=maxZoom&&paddedBounds.containsLatLng(marker.getLatLng());}
function onsetcenter(){refresh(true);}
function addMarkers(markers,minZoom,maxZoom){var len=markers.length;for(var i=0;i<len;i++){_markers.push({marker:markers[i],minZoom:minZoom,maxZoom:maxZoom,added:false});}}
function addMarker(marker,minZoom,maxZoom){if(shouldBeVisible(marker,minZoom,maxZoom,getPaddedBounds(),map.getZoom())){map.addOverlay(marker);}
_markers.push({marker:marker,minZoom:minZoom,maxZoom:maxZoom,added:true});}
function refresh(force){var len=_markers.length;var paddedBounds=getPaddedBounds();var zoom=map.getZoom();var manageMarker;var marker;for(var i=0;i<len;i++){manageMarker=_markers[i];marker=manageMarker.marker;if(shouldBeVisible(marker,manageMarker.minZoom,manageMarker.maxZoom,paddedBounds,zoom)){if(!manageMarker.added){map.addOverlay(marker);manageMarker.added=true;}
else{marker.redraw(force);}}
else if(manageMarker.added){map.removeOverlay(marker);manageMarker.added=false;}}}
function getMarkerCount(zoom){var cnt=0;var len=_markers.length;for(var i=0;i<len;i++){if(_markers[i].maxZoom<=zoom){cnt++;}}
return cnt;}
function clearMarkers(){var len=_markers.length;if(len>0){for(var i=0;i<len;i++){if(_markers[i].added){map.removeOverlay(_markers[i].marker);}}
_markers=[];}}
this.addMarkers=addMarkers;this.addMarker=addMarker;this.refresh=refresh;this.getMarkerCount=getMarkerCount;this.clearMarkers=clearMarkers;opts=nmo.Synchronize.fill(opts,MarkerManagerOptions);nmev.addListener(map,'setcenter',onsetcenter);nmev.addListener(map,'moveend',delayrefresh);}
nmov.InfoWindowContent=InfoWindowContent;nmov.MapPane=MapPane;nmov.Icon=Icon;nmov.Overlay=Overlay;nmov.OverlayHelper=OverlayHelper;nmov.Marker=Marker;nmov.LabeledMarker=LabeledMarker;nmov.MarkerOptions=MarkerOptions;nmov.MarkerManagerOptions=MarkerManagerOptions;nmov.MarkerManager=MarkerManager;})();(function(){var window=this;var nearmap=window.nearmap;var nmm=nearmap.maps;var nmo=nearmap.options;var nml=nearmap.lib;var nmlm=nearmap.lib.math;var nmev=nearmap.event;var worldBounds;var prefix='&copy; '+new Date().getFullYear();var basecopyrights;var mvcopyrights;var errorMsg;errorMsg='We are sorry, but we don\'t have imagery at this zoom level for this region.<p>We are sorry, but we don\'t have imagery at this zoom level for this region.</p>';worldBounds=new nmm.LatLngBounds(new nmm.LatLng(-90,-180),new nmm.LatLng(90,180));basecopyrights=new nmm.CopyrightCollection(prefix);mvcopyrights=new nmm.CopyrightCollection(prefix);basecopyrights.addCopyright(new nmm.Copyright(1,worldBounds,0,'Nearmap'));mvcopyrights.addCopyright(new nmm.Copyright(2,worldBounds,0,'Nearmap'));var MapTypeOptions={shortName:null,urlArg:nmm.HOST_URL,maxResolution:null,minResolution:null,tileSize:256,tileScale:new nmm.Point(1,1),textColor:'#000',linkColor:'#7777cc',errorMessage:'',alt:'',radius:6378137,heading:0};function MapType(layers,projection,name,opts){var _that=this;var _maxRes=0;var _minRes=0;var _getMin=false;var _getMax=false;var _scaledTileSize;this.getSpanZoomLevel=function(center,span,viewSize){};this.getBoundsZoomLevel=function(bounds,viewSize){};this.getName=function(small){return small?opts.shortName:name;};this.getProjection=function(){return projection;};this.getTileSize=function(){return opts.tileSize;};this.getTileScale=function(){return opts.tileScale;};this.getScaledTileSize=function(){return _scaledTileSize;};this.getTileLayers=function(){return layers;};this.getTileLayerMetaKeys=function(){var keys=[];var len=layers.length;for(var i=0;i<len;i++){keys[i]=layers[i].getMetaKey();}
return keys;};this.getMinimumResolution=function(){return opts.minResolution;};this.getMaximumResolution=function(){return opts.maxResolution;};this.getTextColor=function(){return opts.textColor;};this.getLinkColor=function(){return opts.linkColor;};this.getErrorMessage=function(){return opts.errorMessage;};this.getCopyrights=function(bounds,zoom){var cprstr='',lcpr;for(var i=0;i<layers.length;i++){lcpr=layers[i].getCopyright(bounds,zoom);if(lcpr&&cprstr.indexOf(lcpr)===-1){cprstr+=cprstr===''?lcpr:' '+lcpr;}}
return cprstr;};this.getUrlArg=function(){return opts.urlArg;};this.getAlt=function(){return opts.alt;};this.getHeading=function(){return opts.heading;};this.equals=function(obj){return(obj instanceof MapType)&&name===obj.getName(false);};this.hideAllTileLayers=function(){var layers=this.getTileLayers();var layer;for(var i=layers.length;i--;){layer=layers[i];layer.hide();}};this.hideTransparentLayers=function(){var layers=this.getTileLayers();var layer;for(var i=layers.length;i--;){layer=layers[i];if(layer.isPng()&&layer.getOpacity()<1){layer.hide();}}};this.getVisibleTileSets=function(){var visible=[];var layers=this.getTileLayers();var layer;for(var i=layers.length;i--;){layer=layers[i];if(!layer.isHidden()){visible.push(layer.copyTileSet());}}
return visible;};this.clearTileLayerTileSets=function(){var layers=this.getTileLayers();for(var i=layers.length;i--;){layers[i].clear();}};opts=nmo.Synchronize.fill(opts,MapTypeOptions);_scaledTileSize=new nmm.Size(opts.tileSize*opts.tileScale.x,opts.tileSize*opts.tileScale.y);if(!opts.shortName){opts.shortName=name;}
if(typeof opts.maxResolution!=='number'||opts.maxResolution<0){_getMax=true;}
if(typeof opts.minResolution!=='number'||opts.minResolution<0){_getMin=true;}
if(_getMax||_getMin){for(var i=0;i<layers.length;i++){if(_maxRes){_maxRes=layers[i].maxResolution();if(_maxRes>opts.maxResolution){opts.maxResolution=_maxRes;}}
if(_minRes){_minRes=layers[i].minResolution();if(_minRes>opts.minResolution){opts.minResolution=_minRes;}}}}}
MapType.PHOTO_MAP=new MapType([new nmm.TileLayer(basecopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&nml=Vert'}),metaKey:'Vert'})],new nmm.MercatorProjection(24),'PHOTO_MAP',{shortName:'PhotoMap',maxResolution:24,minResolution:2,tileSize:256,tileScale:new nmm.Point(1,1),errorMessage:errorMsg});MapType.MULTI_VIEW_MAP=new MapType([new nmm.TileLayer(mvcopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&nml=N'}),metaKey:'N___'})],new nmm.MercatorProjection(24),'MULTI_VIEW_MAP',{shortName:'Multiview',maxResolution:24,minResolution:18,tileSize:256,tileScale:new nmm.Point(1,0.75),errorMessage:errorMsg,heading:0});MapType.MULTI_VIEW_NORTH_MAP=new MapType([new nmm.TileLayer(mvcopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&nml=N'}),metaKey:'N___'})],new nmm.MercatorProjection(24),'MULTI_VIEW_NORTH_MAP',{shortName:'North',maxResolution:24,minResolution:18,tileSize:256,tileScale:new nmm.Point(1,0.75),errorMessage:errorMsg,heading:0});MapType.MULTI_VIEW_EAST_MAP=new MapType([new nmm.TileLayer(mvcopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&nml=E'}),metaKey:'E___'})],new nmm.MercatorProjection(24),'MULTI_VIEW_EAST_MAP',{shortName:'East',maxResolution:24,minResolution:18,tileSize:256,tileScale:new nmm.Point(1,0.5),errorMessage:errorMsg,heading:90});MapType.MULTI_VIEW_SOUTH_MAP=new MapType([new nmm.TileLayer(mvcopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&&nml=S'}),metaKey:'S___'})],new nmm.MercatorProjection(24),'MULTI_VIEW_SOUTH_MAP',{shortName:'South',maxResolution:24,minResolution:18,tileSize:256,tileScale:new nmm.Point(1,0.75),errorMessage:errorMsg,heading:180});MapType.MULTI_VIEW_WEST_MAP=new MapType([new nmm.TileLayer(mvcopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&nml=W'}),metaKey:'W___'})],new nmm.MercatorProjection(24),'MULTI_VIEW_WEST_MAP',{shortName:'West',maxResolution:24,minResolution:18,tileSize:256,tileScale:new nmm.Point(1,0.5),errorMessage:errorMsg,heading:270});MapType.SATELLITE_MAP=MapType.PHOTO_MAP;MapType.NORMAL_MAP=new MapType([new nmm.TileLayer(basecopyrights,1,24,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&nml=Map_'+(nearmap.http.CurrentMapHttpRequest.getDebug()===4?'&nmg=1':'')}),metaKey:'Map_'})],new nmm.MercatorProjection(24),'NORMAL_MAP',{shortName:'Map',maxResolution:24,minResolution:2,tileSize:256,tileScale:new nmm.Point(1,1),errorMessage:errorMsg});MapType.HYBRID_MAP=new MapType([new nmm.TileLayer(basecopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&nml=Vert'}),metaKey:'Vert'}),new nmm.TileLayer(basecopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nml=MapT'+(nearmap.http.CurrentMapHttpRequest.getDebug()===4?'&nmg=1':'')}),metaKey:'MapT',isPng:true,opacity:0})],new nmm.MercatorProjection(24),'HYBRID_MAP',{shortName:'StreetMap',maxResolution:24,minResolution:2,tileSize:256,tileScale:new nmm.Point(1,1),errorMessage:errorMsg});MapType.PHYSICAL_MAP=new MapType([new nmm.TileLayer(basecopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&nml=Dem'}),metaKey:'Dem_'})],new nmm.MercatorProjection(24),'PHYSICAL_MAP',{shortName:'Terrain',maxResolution:24,minResolution:2,tileSize:256,tileScale:new nmm.Point(1,1),errorMessage:errorMsg});MapType.PHYSICAL_HYBRID_MAP=new MapType([new nmm.TileLayer(basecopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nmd={D}&nml=Dem'}),metaKey:'Dem_'}),new nmm.TileLayer(basecopyrights,1,22,{tileUrlTemplate:nmm.HostOptions.createUrlFunction({hostPath:'.'+nmm.HOST_STRIP_FIRST_SUBDOMAIN+'/maps/hl=en&x={X}&y={Y}&z={Z}&nml=Map'}),metaKey:'MapT',isPng:true,opacity:0})],new nmm.MercatorProjection(24),'PHYSICAL_HYBRID_MAP',{shortName:'Terrain/Streetmap',maxResolution:24,minResolution:2,tileSize:256,tileScale:new nmm.Point(1,1),errorMessage:errorMsg});MapType.MAPMAKER_NORMAL_MAP=null;MapType.MAPMAKER_HYBRID_MAP=null;MapType.MOON_ELEVATION_MAP=null;MapType.MOON_VISIBLE_MAP=null;MapType.MARS_ELEVATION_MAP=null;MapType.MARS_VISIBLE_MAP=null;MapType.MARS_INFRARED_MAP=null;MapType.SKY_VISIBLE_MAP=null;MapType.SATELLITE_3D_MAP=null;MapType.DEFAULT_MAP_TYPES=[MapType.SATELLITE_MAP,MapType.HYBRID_MAP];MapType.MAPMAKER_MAP_TYPES=[MapType.MAPMAKER_NORMAL_MAP,MapType.SATELLITE_MAP,MapType.MAPMAKER_HYBRID_MAP];MapType.MOON_MAP_TYPES=[MapType.MOON_ELEVATION_MAP,MapType.MOON_VISIBLE_MAP];MapType.MARS_MAP_TYPES=[MapType.MARS_ELEVATION_MAP,MapType.MARS_VISIBLE_MAP,MapType.MARS_INFRARED_MAP];MapType.SKY_MAP_TYPES=[MapType.SKY_VISIBLE_MAP];MapType.Keys={PHOTO_MAP:'k',SATELLITE_MAP:'k',NORMAL_MAP:'m',HYBRID_MAP:'h',PHYSICAL_MAP:'p',PHYSICAL_HYBRID_MAP:'ph',MULTI_VIEW_MAP:'mv',MULTI_VIEW_NORTH_MAP:'n',MULTI_VIEW_EAST_MAP:'e',MULTI_VIEW_SOUTH_MAP:'s',MULTI_VIEW_WEST_MAP:'w'};MapType.getTypeByKey=function(key){var type;if(typeof key!=='string'){return;}
for(var p in MapType){if(MapType.hasOwnProperty(p)){if(MapType[p]instanceof MapType){type=MapType[p];if(type&&MapType.Keys[p]===key){return type;}}}}};nmm.MapType=MapType;nmm.MapTypeOptions=MapTypeOptions;})();(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nmm=nearmap.maps;var nmev=nearmap.event;var nmc=nearmap.client;function MapUIOptions(opt_size){var isSmall=(opt_size.width<400||opt_size.height<300||false);this.maptypes={normal:false,satellite:true,hybrid:true,physical:true};this.zoom={scrollwheel:true,doubleclick:true};this.keyboard=true;this.controls={largemapcontrol3d:!isSmall,smallzoomcontrol3d:isSmall,maptypecontrol:!isSmall,menumaptypecontrol:isSmall,scalecontrol:!isSmall};}
var KeyboardKeys={PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,ARROW_LEFT:37,ARROW_UP:38,ARROW_RIGHT:39,ARROW_DOWN:40,NUMPAD_PLUS:107,NUMPAD_MINUS:109};function KeyboardHandler(map){var _listeners={};var _timers={};var _leftPressed=false;var _rightPressed=false;var _upPressed=false;var _downPressed=false;var _arrowPanDistance=20;function checkArrowPressed(){var dx=0;var dy=0;if(_timers.arrowKeyPan){window.clearTimeout(_timers.arrowKeyPan);}
if(_leftPressed){dx-=_arrowPanDistance;}
if(_rightPressed){dx+=_arrowPanDistance;}
if(_upPressed){dy-=_arrowPanDistance;}
if(_downPressed){dy+=_arrowPanDistance;}
if(dx!==0||dy!==0){map.panBy(new nmm.Size(dx,dy),false);_timers.arrowKeyPan=window.setTimeout(checkArrowPressed,25);}
else{delete _timers.arrowKeyPressed;}}
function onkeydown(e){var keyCode;var target;var nodeLowerCase;e=e||window.event;target=nmev.getTarget(e);nodeLowerCase=target.nodeName.toLowerCase();if(nodeLowerCase!=='input'&&nodeLowerCase!=='textarea'){if(!e.ctrlKey&&!e.altKey&&!e.shiftKey){keyCode=e.keyCode;if(keyCode===KeyboardKeys.PAGE_UP){map.panDirection(0,-1);}
else if(keyCode===KeyboardKeys.PAGE_DOWN){map.panDirection(0,1);}
else if(keyCode===KeyboardKeys.END){map.panDirection(1,0);}
else if(keyCode===KeyboardKeys.HOME){map.panDirection(-1,0);}
else if(keyCode===KeyboardKeys.NUMPAD_PLUS){map.zoomIn();}
else if(keyCode===KeyboardKeys.NUMPAD_MINUS){map.zoomOut();}
else if(nmc.browser.msie||nmc.browser.chrome||(nmc.browser.safari&&(nmc.browser.majorVersion>3||(nmc.browser.majorVersion===3&&nmc.browser.minorVersion>=1)))){if(keyCode===KeyboardKeys.ARROW_LEFT){_leftPressed=true;}
else if(keyCode===KeyboardKeys.ARROW_UP){_upPressed=true;}
else if(keyCode===KeyboardKeys.ARROW_RIGHT){_rightPressed=true;}
else if(keyCode===KeyboardKeys.ARROW_DOWN){_downPressed=true;}}
checkArrowPressed();}}}
function onkeyup(e){var keyCode;var target;var nodeLowerCase;e=e||window.event;target=nmev.getTarget(e);nodeLowerCase=target.nodeName.toLowerCase();if(nodeLowerCase!=='input'&&nodeLowerCase!=='textarea'){keyCode=e.keyCode;if(keyCode===KeyboardKeys.ARROW_LEFT){_leftPressed=false;}
else if(keyCode===KeyboardKeys.ARROW_UP){_upPressed=false;}
else if(keyCode===KeyboardKeys.ARROW_RIGHT){_rightPressed=false;}
else if(keyCode===KeyboardKeys.ARROW_DOWN){_downPressed=false;}
if(!_leftPressed&&!_upPressed&&!_rightPressed&&!_downPressed){window.clearTimeout(_timers.arrowKeyPan);delete _timers.arrowKeyPan;}}}
function onkeypress(e){var dx=0;var dy=0;var keyCode;var target;var nodeLowerCase;e=e||window.event;target=nmev.getTarget(e);nodeLowerCase=target.nodeName.toLowerCase();if(nodeLowerCase!=='input'&&nodeLowerCase!=='textarea'){keyCode=e.keyCode;if(keyCode===KeyboardKeys.ARROW_LEFT){_leftPressed=true;}
else if(keyCode===KeyboardKeys.ARROW_UP){_upPressed=true;}
else if(keyCode===KeyboardKeys.ARROW_RIGHT){_rightPressed=true;}
else if(keyCode===KeyboardKeys.ARROW_DOWN){_downPressed=true;}
checkArrowPressed();}}
function remove(){nmev.removeListener(_listeners.onkeydown);nmev.removeListener(_listeners.onkeyup);delete _listeners.onkeydown;delete _listeners.onkeyup;}
_listeners.onkeydown=nmev.addDomListener(document,'keydown',onkeydown);_listeners.onkeyup=nmev.addDomListener(document,'keyup',onkeyup);_listeners.onkeypress=nmev.addDomListener(document,'keypress',onkeypress);this.remove=remove;}
nmm.MapUIOptions=MapUIOptions;nmm.KeyboardHandler=KeyboardHandler;nmm.KeyboardKeys=KeyboardKeys;})();(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nml=nearmap.lib;var nmls=nearmap.lib.sprite;var nms=nearmap.style;var nmm=nearmap.maps;var nmc=nearmap.client;var BUTTONS={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/buttons.png',size:new nmm.Size(200,500)};var BUTTONS_VERTICAL={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/buttons-vertical.png',size:new nmm.Size(75,150)};var BUTTONS_BG={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/buttons-bg.png',size:new nmm.Size(1,1)};var PANEL_BACKGROUND={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/panel-bg.png',size:new nmm.Size(1,1)};var TIMELINE={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/sprite-timeline.png',size:new nmm.Size(270,98)};var TIMELINE_YEAR={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/timeline-year.png',size:new nmm.Size(270,21)};var SHADOW={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/scalebar-shadow.png',size:new nmm.Size(255,107)};var ZOOM={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/zoom.png',size:new nmm.Size(70,270)};var MAP_TOOLS={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/maptools.png',size:new nmm.Size(112,250)};var CURSOR_PAN_DOWN={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/pandown.cur'};CURSOR_PAN_DOWN.css='url('+CURSOR_PAN_DOWN.url+')'+(nmc.browser.chrome||nmc.browser.safari?' 10 10':'')+',auto';var CURSOR_MAP_OVER={url:nmm.HOST_URL+nmm.API_VERSION_PATH+'/img/mapover.cur'};CURSOR_MAP_OVER.css='url('+CURSOR_MAP_OVER.url+')'+(nmc.browser.chrome||nmc.browser.safari?' 10 10':'')+',auto';function createClippedSprite(sprite,size,offset,stretch){var frag=document.createDocumentFragment();var iconNode=document.createElement('span');var iconSprite=document.createElement('span');var seOffset;seOffset={x:offset.x+size.width,y:offset.y+size.height};nms.css(iconNode,{'float':'left','position':'relative','height':size.getHeightString(),'width':size.getWidthString()},true);nms.css(iconSprite,{'clip':'rect('+offset.y+'px '+seOffset.x+'px '+seOffset.y+'px '+offset.x+'px)','position':'absolute','left':'-'+offset.x+'px','top':'-'+offset.y+'px','height':(stretch&&stretch.y?seOffset.y:sprite.size.height)+'px','width':(stretch&&stretch.x?seOffset.x:sprite.size.width)+'px'},true);nms.applyPngAlphaBg(iconSprite,sprite.url,stretch);frag.appendChild(iconNode);iconNode.appendChild(iconSprite);return frag;}
nmls.BUTTONS=BUTTONS;nmls.BUTTONS_VERTICAL=BUTTONS_VERTICAL;nmls.BUTTONS_BG=BUTTONS_BG;nmls.PANEL_BACKGROUND=PANEL_BACKGROUND;nmls.TIMELINE=TIMELINE;nmls.TIMELINE_YEAR=TIMELINE_YEAR;nmls.SHADOW=SHADOW;nmls.ZOOM=ZOOM;nmls.MAP_TOOLS=MAP_TOOLS;nmls.CURSOR_PAN_DOWN=CURSOR_PAN_DOWN;nmls.CURSOR_MAP_OVER=CURSOR_MAP_OVER;nmls.createClippedSprite=createClippedSprite;})();(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nmm=nearmap.maps;var nmg=nearmap.generics;var nml=nearmap.lib;var nmls=nearmap.lib.sprite;var nmlm=nearmap.lib.math;var nmh=nearmap.http;var nme=nearmap.memory;var nmev=nearmap.event;var nms=nearmap.style;var nmjson=nearmap.json;var ajax=nearmap.ajax;var nma=nearmap.animation;var nmo=nearmap.options;var nmd=nearmap.dom;var nmc=nearmap.client;var nmt=nearmap.touch;var nmov=nearmap.overlay;var TILE_BUFFER=3;var LEVEL_TIMEOUT=10000;var DEFAULT_LAT_LNG=new nmm.LatLng(-31.956967,115.875720);var _centerMarker;function showCenterPoint(map){var size=map.getSize(true);if(!_centerMarker){_centerMarker=document.createElement('div');}
_centerMarker.isMap=true;nms.css(_centerMarker,{'background-color':'lime','height':'5px','width':'5px','position':'absolute','left':Math.floor(size.width/2)+'px','top':Math.floor(size.height/2)+'px','z-index':'999'},true);document.body.appendChild(_centerMarker);}
function addDefaultControls(map){var shadow=new nmm.ShadowControl();var legal=new LegalControl();var output=nmh.CurrentMapHttpRequest.getMapOutput();var logo=(output===nmh.MapOutput.EMBED||output===nmh.MapOutput.EMBED_NOCONTROLS||output===nmh.MapOutput.IPHONE?new SmallLogoControl():new LargeLogoControl());var zoom;var coord;var requests;map.addControl(shadow);map.addControl(legal);map.addControl(logo);if(nmm.debug){zoom=new ZoomLevelControl();map.addControl(zoom);showCenterPoint(map);}
if(nmm.debug>=2){coord=new TileCoordinateControl();map.addControl(coord);}
if(nmm.debug>=3){requests=new RequestRateControl();map.addControl(requests);}}
function ZoomLevelControl(printable,selectable){this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var zoomLevel=document.createElement('span');zoomLevel.innerHTML='zoom: '+map.getZoom();nms.css(zoomLevel,{'font-weight':'bold','font-size':'30px','color':'#ff0000'},true);nmev.addListener(map,'setcenter',function(){zoomLevel.innerHTML='zoom: '+map.getZoom();});map.getContainer().appendChild(zoomLevel);return zoomLevel;};this.getDefaultPosition=function(){return new nmm.ControlPosition(nmm.ControlAnchor.ANCHOR_BOTTOM_LEFT,new nmm.Size(15,70));};}
function ZoomLockControl(printable,selectable){var _boxWidth=100;var _boxHeight=60;var _node;var _animateTimers=[];var _map;function createInHorizontal(v,width){var line=document.createElement('div');nms.css(line,{'background':'#ff0000','height':'2px','width':width+'px','position':'absolute','left':'0px'},true);line.style[v]='0px';return line;}
function createInVertical(h,height){var line=document.createElement('div');nms.css(line,{'background':'#ff0000','width':'2px','height':height+'px','position':'absolute','top':'0px'},true);line.style[h]='0px';return line;}
function createOutHorizontal(v,width){var line=document.createElement('div');nms.css(line,{'background':'#ff0000','height':'2px','width':width+'px','position':'absolute','left':'0px'},true);line.style[v==='top'?'bottom':'top']='0px';return line;}
function createOutVertical(h,height){var line=document.createElement('div');nms.css(line,{'background':'#ff0000','width':'2px','height':height+'px','position':'absolute','top':'0px'},true);line.style[h==='left'?'right':'left']='0px';return line;}
function createCorner(h,v,hCorner,vCorner){var frag=document.createDocumentFragment();var corner=document.createElement('div');var width=8;var height=8;nms.css(corner,{'height':height+'px','width':width+'px','position':'absolute'},true);corner.style[h]='0px';corner.style[v]='0px';corner.appendChild(hCorner(v,width));corner.appendChild(vCorner(h,height));return corner;}
function createBox(latlng,hCorner,vCorner){var box=document.createElement('div');var topLeft=createCorner('left','top',hCorner,vCorner);var topRight=createCorner('right','top',hCorner,vCorner);var bottomLeft=createCorner('left','bottom',hCorner,vCorner);var bottomRight=createCorner('right','bottom',hCorner,vCorner);var containerPx=_map.fromLatLngToContainerPixel(latlng);nms.css(box,{'display':'none','height':_boxHeight+'px','width':_boxWidth+'px','position':'absolute','top':containerPx.y+'px','left':containerPx.x+'px'},true);box.appendChild(topLeft);box.appendChild(topRight);box.appendChild(bottomLeft);box.appendChild(bottomRight);return box;}
function hide(){_node.style.display='none';}
function getZoomInScale(currentFrame,totalFrames){return currentFrame/totalFrames;}
function getZoomOutScale(currentFrame,totalFrames){var origin=0.3;return origin+((1-origin)*(totalFrames-currentFrame)/totalFrames);}
function scaleBox(getScale){return function(currentFrame,totalFrames){var scale=getScale(currentFrame,totalFrames);var width=Math.floor(_boxWidth*scale);var height=Math.floor(_boxHeight*scale);nms.css(_node,{'display':'block','height':height+'px','width':width+'px','marginTop':-Math.floor(height/2)+'px','marginLeft':-Math.floor(width/2)+'px'});};}
function animate(latlng,hCorner,vCorner,getScale){var box=createBox(latlng,hCorner,vCorner);var numFrames=6;var length=480;_node.parentNode.replaceChild(box,_node);nme.discardElement(_node,_map.getContainer());_node=box;if(_animateTimers.length>0){nma.stopFixedAnimation(_animateTimers);}
_animateTimers=nma.runFixedAnimation(numFrames,length,scaleBox(getScale),hide);}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){_map=map;_node=document.createElement('div');nms.css(_node,{'display':'none'},true);map.getContainer().appendChild(_node);return _node;};this.animateZoomIn=function(latlng){animate(latlng,createInHorizontal,createInVertical,getZoomInScale);};this.animateZoomOut=function(latlng){animate(latlng,createOutHorizontal,createOutVertical,getZoomOutScale);};this.getDefaultPosition=function(){return new nmm.ControlPosition(nmm.ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(100,100));};}
function TileCoordinateControl(printable,selectable){function containermousemove(e,map,node){var mapType=map.getCurrentMapType();var proj=mapType.getProjection();var size=map.getSize(true);var zoom=map.getZoom();var tSize=mapType.getTileSize();var tScale=mapType.getTileScale();var centerPx=proj.fromLatLngToPixel(map.getCenter(),zoom,tSize);var heading=mapType.getHeading();var mousePx;var mouseTile;var wrapTile;var mouseOffsetPx;var rotatedMouseOffsetPx;e=e||window.event;mouseOffsetPx=new nmm.Point(e.clientX-(size.width/2),e.clientY-(size.height/2));mouseOffsetPx.x=Math.floor(mouseOffsetPx.x/tScale.x);mouseOffsetPx.y=Math.floor(mouseOffsetPx.y/tScale.y);rotatedMouseOffsetPx=nmlm.rotatePoint(heading,mouseOffsetPx,nmm.Point.ORIGIN,Math.round);mousePx=centerPx.copy();mousePx.add(rotatedMouseOffsetPx.x,rotatedMouseOffsetPx.y);mouseTile=new nmm.Point(Math.floor(mousePx.x/tSize),Math.floor(mousePx.y/tSize));wrapTile=proj.wrapTileCoordinates(zoom,mouseTile.x,mouseTile.y);node.innerHTML='['+wrapTile.x+']['+wrapTile.y+']';}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var node=document.createElement('span');var container=map.getContainer();nms.css(node,{'font-weight':'bold','font-size':'30px','color':'red'},true);nmev.addDomListener(container,'mousemove',nmev.callbackArgs(container,containermousemove,map,node));container.appendChild(node);return node;};this.getDefaultPosition=function(){return new nmm.ControlPosition(nmm.ControlAnchor.ANCHOR_BOTTOM_LEFT,new nmm.Size(15,100));};}
function RequestRateControl(printable,selectable){function processHeaders(headers){}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var frag=document.createDocumentFragment();var node=document.createElement('div');var rpsWrap=document.createElement('div');var rkbpsWrap=document.createElement('div');nms.css(node,{'font-weight':'bold','font-size':'30px','color':'red'},true);frag.appendChild(node);node.appendChild(rpsWrap);node.appendChild(rkbpsWrap);rpsWrap.innerHTML='r/ps: ';rkbpsWrap.innerHTML='r kb/ps: ';map.getContainer().appendChild(frag);ajax.getHeaders(nmm.GET_SESSION,processHeaders);return node;};this.getDefaultPosition=function(){return new nmm.ControlPosition(nmm.ControlAnchor.ANCHOR_BOTTOM_LEFT,new nmm.Size(15,135));};}
function LegalControl(printable,selectable){function onlinkmouseover(){this.style.borderBottomStyle='solid';}
function onlinkmouseout(){this.style.borderBottomStyle='dotted';}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var link=document.createElement('a');link.href=nmm.HOST_URL+'legal';link.innerHTML='Terms of use';nms.css(link,{'border-bottom':'dotted 1px #fff','color':'#fff','font-size':'12px','line-height':'17px','margin':'0px 5px','text-decoration':'none','vertical-align':'bottom'},true);link.onmouseover=nmev.callback(link,onlinkmouseover);link.onmouseout=nmev.callback(link,onlinkmouseout);map.getContainer().appendChild(link);return link;};this.getDefaultPosition=function(){return new nmm.ControlPosition(nmm.ControlAnchor.ANCHOR_BOTTOM_LEFT,new nmm.Size(10,10));};}
function LargeLogoControl(printable,selectable){var _node;this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var sprite;_node=document.createElement('span');_node.isMap=true;sprite={url:nmm.HOST_URL+'img/nearmap_watermark.png',size:new nmm.Size(265,120)};nms.css(_node,{'display':'inline-block','height':sprite.size.getHeightString(),'width':sprite.size.getWidthString()},true);nms.applyPngAlphaBg(_node,sprite.url);map.getContainer().appendChild(_node);return _node;};this.getDefaultPosition=function(){return new nmm.ControlPosition(nmm.ControlAnchor.ANCHOR_BOTTOM_RIGHT,new nmm.Size(0,0));};}
function SmallLogoControl(printable,selectable){var _node;this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var sprite;_node=document.createElement('span');sprite={url:nmm.HOST_URL+'img/logo-small-white.png',size:new nmm.Size(110,36)};nms.css(_node,{'display':'inline-block','height':sprite.size.getHeightString(),'width':sprite.size.getWidthString()},true);nms.applyPngAlphaBg(_node,sprite.url);map.getContainer().appendChild(_node);return _node;};this.getDefaultPosition=function(){return new nmm.ControlPosition(nmm.ControlAnchor.ANCHOR_BOTTOM_RIGHT,new nmm.Size(10,10));};}
var InfoWindowOptions={selectedTab:0,maxWidth:300,noCloseOnClick:false,onOpenFn:null,onCloseFn:null,zoomLevel:19,mapType:nmm.MapType.PHOTO_MAP,maxContent:null,maxTitle:null,pixelOffset:new nmm.Size(0,0)};function InfoWindowTab(label,content){this.contentElem=content;this.name=label;}
function InfoWindow(){var _that=this;var _foregroundNode;var _backgroundNode;var _shadowNode;var _tabContainer;var _tabs;var _latlng;var _handlers=[];var _elements=[];var _contentContainers=[];var _opts;var _divPx;var _map;var _isAdded=false;var _clipContentBorders;var _tempClose=false;var _lastDrawn=null;function onmapclick(overlay,latlng,overlaylatlng){var limit=100;if(!_opts.noCloseOnClick&&!isHidden()&&(!overlay||overlay!==_that)&&(_lastDrawn&&new Date().getTime()-_lastDrawn.getTime()>limit)){hide();}}
function onzoomstart(){if(!isHidden()){_tempClose=true;}
hide();}
function onsetcenter(){redraw(true);if(_tempClose){show();}
_tempClose=false;}
function selectTab(index){if(typeof index!=='number'){throw'The selectedTab index must be a number';}
if(index<0||index>=_tabs.length){throw'You cannot select a tab that is out of the range of array bounds';}
opts.selectedTab=index;}
function hide(){if(_foregroundNode){_foregroundNode.style.visibility='hidden';}
if(_shadowNode){_shadowNode.style.visibility='hidden';}
nmev.trigger(_that,'hidden');}
function show(){if(_foregroundNode){_foregroundNode.style.visibility='visible';}
if(_shadowNode){_shadowNode.style.visibility='visible';}}
function isHidden(){return!_foregroundNode||_foregroundNode.style.visibility==='hidden';}
function reset(latlng,tabs,size,offset,selectedTab){var newTabContainer;var tab;if(latlng){_latlng=latlng;}
if(tabs){_tabs=tabs;newTabContainer=document.createElement('div');for(var i=0;i<_tabs.length;i++){tab=_tabs[i];if(typeof tab.contentElem==='string'){newTabContainer.innerHTML+=tab.contentElem;}
else{newTabContainer.appendChild(tab.contentElem);}}
if(_tabContainer){_tabContainer.parentNode.replaceChild(newTabContainer,_tabContainer);}
_tabContainer=newTabContainer;}
if(size){_contentSize=size;}
if(offset){_opts.pixelOffset=offset;}
if(typeof selectedTab==='number'){this.selectTab(selectedTab);}}
function getPoint(){return _latlng;}
function getPixelOffset(){return _opts.pixelOffset;}
function getSelectedTab(){return opts.selectedTab;}
function getTabs(){return _tabs;}
function getContentContainers(){}
function enableMaximize(){}
function disableMaximize(){}
function maximize(){}
function restore(){}
function clipBorders(sides){return function(height){var side;var offset;var len;len=sides.length;for(var i=0;i<len;i++){side=sides[i];offset=side.offset;nms.css(side.element,{'clip':'rect('+offset.y+'px '+(side.width+offset.x)+'px '+(height+offset.y)+'px '+offset.x+'px)','height':height+'px'});}
nms.applyPngAlphaBg(side.element,side.sprite.url,true);};}
function createTopBorder(width){var sprite=nmls.BUTTONS;var cornerSize=new nmm.Size(10,10);var frag=document.createDocumentFragment();var wrap=document.createElement('div');var leftCorner=nmls.createClippedSprite(sprite,cornerSize,new nmm.Point(60,150));var topBorder=nmls.createClippedSprite(sprite,new nmm.Size(width-(cornerSize.width*2),cornerSize.height),new nmm.Point(0,162),{x:true,y:false});var rightCorner=nmls.createClippedSprite(sprite,cornerSize,new nmm.Point(75,150));nms.css(wrap,{'position':'relative','height':cornerSize.getHeightString(),'width':width+'px'},true);nms.css(leftCorner.firstChild,{'position':'absolute','top':'0px','left':'0px'});nms.css(topBorder.firstChild,{'position':'absolute','top':'0px','left':cornerSize.getWidthString()});nms.css(rightCorner.firstChild,{'position':'absolute','top':'0px','right':'0px'});frag.appendChild(wrap);wrap.appendChild(leftCorner);wrap.appendChild(topBorder);wrap.appendChild(rightCorner);return frag;}
function createMiddleContent(width){var vertSprite=nmls.BUTTONS_VERTICAL;var borderSize=new nmm.Size(10,1);var leftBorderOffset=new nmm.Point(0,0);var rightBorderOffset=new nmm.Point(15,0);var frag=document.createDocumentFragment();var borderWrap=document.createElement('div');var leftBorder=nmls.createClippedSprite(vertSprite,borderSize,leftBorderOffset,{x:false,y:true});var rightBorder=nmls.createClippedSprite(vertSprite,borderSize,rightBorderOffset,{x:false,y:true});var contentWrap=document.createElement('div');var close=nmls.createClippedSprite(nmls.BUTTONS,new nmm.Size(18,18),new nmm.Point(41,192));nms.css(borderWrap,{'position':'relative','width':width+'px'},true);nms.css(leftBorder.firstChild,{'position':'absolute','top':'0px','left':'0px'});nms.css(contentWrap,{'background':'#fff','border':'solid 1px #c6c6c6','cursor':'default','margin':'0px 10px'},true);nms.css(rightBorder.firstChild,{'position':'absolute','top':'0px','right':'0px'});nms.css(close.firstChild,{'cursor':'pointer','overflow':'hidden','position':'absolute','right':'15px','top':'5px','zIndex':'1'});_clipContentBorders=clipBorders([{element:leftBorder.firstChild.firstChild,offset:leftBorderOffset,width:borderSize.width,sprite:vertSprite},{element:rightBorder.firstChild.firstChild,offset:rightBorderOffset,width:borderSize.width,sprite:vertSprite}]);_handlers.push(nmev.addDomListener(contentWrap,'mousedown',nmev.stopBubbling));_handlers.push(nmev.addDomListener(contentWrap,'mouseup',nmev.stopBubbling));_handlers.push(nmev.addDomListener(contentWrap,'click',nmev.stopBubblingDom2));_handlers.push(nmev.addDomListener(contentWrap,'dblclick',nmev.stopBubbling));_handlers.push(nmev.addDomListener(contentWrap,'mousewheel',nmev.stopBubbling));_handlers.push(nmev.addDomListener(close.firstChild,'click',hide));frag.appendChild(borderWrap);borderWrap.appendChild(leftBorder);borderWrap.appendChild(contentWrap);borderWrap.appendChild(rightBorder);contentWrap.appendChild(_tabContainer);contentWrap.appendChild(close);return frag;}
function createAnchor(width){var sprite=nmls.BUTTONS;var frag=document.createDocumentFragment();var borderHeight=10;var anchorSize=new nmm.Size(95,90);var cornerSize=new nmm.Size(10,borderHeight);var bottomWidth=width-anchorSize.width-cornerSize.width;var anchor=nmls.createClippedSprite(sprite,anchorSize,new nmm.Point(0,355));var anchorBottomBorder=nmls.createClippedSprite(sprite,new nmm.Size(bottomWidth,borderHeight),new nmm.Point(0,174));var anchorRightCorner=nmls.createClippedSprite(sprite,cornerSize,new nmm.Point(90,150));nms.css(anchor.firstChild,{'overflow':'hidden','position':'absolute','bottom':'0px','left':'0px'});nms.css(anchorBottomBorder.firstChild,{'overflow':'hidden','position':'absolute','bottom':(anchorSize.height-borderHeight)+'px','left':anchorSize.width+'px'});nms.css(anchorRightCorner.firstChild,{'overflow':'hidden','position':'absolute','bottom':(anchorSize.height-borderHeight)+'px','left':(anchorSize.width+bottomWidth)+'px'});nmev.disableSelect(anchor.firstChild);frag.appendChild(anchor);frag.appendChild(anchorBottomBorder);frag.appendChild(anchorRightCorner);return frag;}
function create(floatPane,floatShadowPane){var floatFrag=document.createDocumentFragment();var shadowFrag=document.createDocumentFragment();var foregroundWrap=document.createElement('div');var infoWrap=document.createElement('div');_foregroundNode=document.createElement('div');_elements.push(_foregroundNode);nms.css(_foregroundNode,{'position':'absolute','width':_opts.maxWidth+'px'},true);nms.css(foregroundWrap,{'position':'absolute','bottom':'0px'},true);nms.css(infoWrap,{'position':'absolute','bottom':'90px'},true);_handlers.push(nmev.addListener(_map,'zoomstart',onzoomstart));_handlers.push(nmev.addListener(_map,'setcenter',onsetcenter));_handlers.push(nmev.addListener(_map,'click',onmapclick));floatFrag.appendChild(_foregroundNode);_foregroundNode.appendChild(foregroundWrap);foregroundWrap.appendChild(infoWrap);foregroundWrap.appendChild(createAnchor(_opts.maxWidth));infoWrap.appendChild(createTopBorder(_opts.maxWidth));infoWrap.appendChild(createMiddleContent(_opts.maxWidth));floatPane.appendChild(floatFrag);}
function initialize(map){_map=map;create(map.getPane(nmov.MapPane.FLOAT_PANE),map.getPane(nmov.MapPane.FLOAT_SHADOW_PANE));_isAdded=true;}
function redraw(force){if(force){_lastDrawn=new Date();_clipContentBorders(_tabContainer.parentNode.offsetHeight);_divPx=nmov.OverlayHelper.reposition(_elements,_latlng,_map,_opts.pixelOffset);_foregroundNode.style.zIndex=nmov.Overlay.getZIndex(_latlng.lat());nmev.trigger(_that,'redraw');}}
function remove(){nmev.batchRemoveListeners(_handlers);_handlers=[];if(_foregroundNode){_foregroundNode.parentNode.removeChild(_foregroundNode);}
if(_backgroundNode){_backgroundNode.parentNode.removeChild(_backgroundNode);}
_isAdded=false;}
function isAdded(){return _isAdded;}
this.selectTab=selectTab;this.hide=hide;this.show=show;this.isHidden=isHidden;this.reset=reset;this.getPoint=getPoint;this.getPixelOffset=getPixelOffset;this.getSelectedTab=getSelectedTab;this.getTabs=getTabs;this.getContentContainers=getContentContainers;this.enableMaximize=enableMaximize;this.disableMaximize=disableMaximize;this.maximize=maximize;this.restore=restore;this.create=create;this.initialize=initialize;this.redraw=redraw;this.remove=remove;this.isAdded=isAdded;_opts=nmo.Synchronize.fill(_opts,InfoWindowOptions);}
InfoWindow.prototype=new nmov.Overlay();function UIManager(map,container,backgroundColor,size,cntrlMng){var _panes={};var _tileContainer;var _garbageContainer;var _historyContainer;var _currentUI;var _keyboardHndlr;function createContainers(){var frag=document.createDocumentFragment();var tileContainerWrap=document.createElement('div');_tileContainer=document.createElement('div');_garbageContainer=document.createElement('div');_historyContainer=document.createElement('div');container.isMap=true;tileContainerWrap.isMap=true;nms.css(container,{backgroundColor:backgroundColor,overflow:'hidden',position:'relative',webkitUserSelect:'none'});if(size){container.style.height=size.getHeightString();container.style.width=size.getWidthString();}
container.style.cursor=nmls.CURSOR_PAN_DOWN.css;container.style.cursor=nmls.CURSOR_MAP_OVER.css;nms.css(tileContainerWrap,{'overflow':'hidden','height':'100%','width':'100%','position':'absolute','left':'0px','top':'0px'},true);nms.css(_tileContainer,{'position':'absolute','left':'0px','top':'0px','z-index':'0'},true);nms.css(_garbageContainer,{'position':'absolute','left':'0px','top':'0px','z-index':'0'},true);nms.css(_historyContainer,{'position':'absolute','left':'0px','top':'0px','z-index':'0'},true);frag.appendChild(tileContainerWrap);tileContainerWrap.appendChild(_tileContainer);_tileContainer.appendChild(_garbageContainer);_tileContainer.appendChild(_historyContainer);container.appendChild(frag);}
function createPanes(){var startZIndex=100;var dvMapPane=document.createElement('div');var dvOverlayLayerPane=document.createElement('div');var dvMarkerShadowPane=document.createElement('div');var dvMarkerPane=document.createElement('div');var dvFloatShadowPane=document.createElement('div');var dvMarkerMousePane=document.createElement('div');var dvFloatPane=document.createElement('div');_panes[nmov.MapPane.MAP_PANE]=dvMapPane;_panes[nmov.MapPane.OVERLAY_LAYER_PANE]=dvOverlayLayerPane;_panes[nmov.MapPane.MARKER_SHADOW_PANE]=dvMarkerShadowPane;_panes[nmov.MapPane.MARKER_PANE]=dvMarkerPane;_panes[nmov.MapPane.FLOAT_SHADOW_PANE]=dvFloatShadowPane;_panes[nmov.MapPane.MARKER_MOUSE_TARGET_PANE]=dvMarkerMousePane;_panes[nmov.MapPane.FLOAT_PANE]=dvFloatPane;nms.css(dvMapPane,{'position':'absolute','left':'0px','top':'0px','z-index':startZIndex+nmov.MapPane.MAP_PANE},true);nms.css(dvOverlayLayerPane,{'position':'absolute','left':'0px','top':'0px','z-index':startZIndex+nmov.MapPane.OVERLAY_LAYER_PANE},true);nms.css(dvMarkerShadowPane,{'position':'absolute','left':'0px','top':'0px','z-index':startZIndex+nmov.MapPane.MARKER_SHADOW_PANE},true);nms.css(dvMarkerPane,{'position':'absolute','left':'0px','top':'0px','z-index':startZIndex+nmov.MapPane.MARKER_PANE},true);nms.css(dvFloatShadowPane,{'position':'absolute','left':'0px','top':'0px','z-index':startZIndex+nmov.MapPane.FLOAT_SHADOW_PANE},true);nms.css(dvMarkerMousePane,{'position':'absolute','left':'0px','top':'0px','z-index':startZIndex+nmov.MapPane.MARKER_MOUSE_TARGET_PANE},true);nms.css(dvFloatPane,{'position':'absolute','left':'0px','top':'0px','z-index':startZIndex+nmov.MapPane.FLOAT_PANE},true);_tileContainer.appendChild(dvMapPane);_tileContainer.appendChild(dvOverlayLayerPane);_tileContainer.appendChild(dvMarkerShadowPane);_tileContainer.appendChild(dvMarkerPane);_tileContainer.appendChild(dvFloatShadowPane);_tileContainer.appendChild(dvMarkerMousePane);_tileContainer.appendChild(dvFloatPane);}
function getContainer(){return container;}
function getTileContainer(){return _tileContainer;}
function getGarbageContainer(){return _garbageContainer;}
function getHistoryContainer(){return _historyContainer;}
function getPane(pane){return _panes[pane];}
function getDefaultUI(){return new nmm.MapUIOptions(new nmm.Size(400,300));}
function clearMapTypes(){var mapTypes=map.getMapTypes();for(var i=mapTypes.length;i--;){map.removeMapType(mapTypes[i]);}}
function setUI(ui){cntrlMng.clear();clearMapTypes();if(ui.maptypes.normal){map.addMapType(nmm.MapType.NORMAL_MAP);}
if(ui.maptypes.satellite){map.addMapType(nmm.MapType.SATELLITE_MAP);}
if(ui.maptypes.hybrid){map.addMapType(nmm.MapType.HYBRID_MAP);}
if(ui.maptypes.physical){map.addMapType(nmm.MapType.PHYSICAL_MAP);}
if(ui.zoom.scrollwheel){map.enableScrollWheelZoom();}
if(ui.zoom.doubleclick){map.enableDoubleClickZoom();}
if(_keyboardHndlr){_keyboardHndlr.remove();_keyboardHndlr=null;}
if(ui.keyboard){_keyboardHndlr=new nmm.KeyboardHandler(map);}
if(ui.controls.largemapcontrol3d){map.addControl(new nmm.SmallZoomControl3D());}
if(ui.controls.smallzoomcontrol3d){map.addControl(new nmm.SmallZoomControl3D());}
if(ui.controls.maptypecontrol){map.addControl(new nmm.ToggleAndRotateMapTypeViewControl());}
if(ui.controls.menumaptypecontrol){map.addControl(new nmm.ToggleAndRotateMapTypeViewControl());}
if(ui.controls.scalecontrol){map.addControl(new nmm.ScaleControl());}
_currentUI=ui;}
function setUIToDefault(){setUI(getDefaultUI());}
this.getContainer=getContainer;this.getTileContainer=getTileContainer;this.getGarbageContainer=getGarbageContainer;this.getHistoryContainer=getHistoryContainer;this.getPane=getPane;this.getDefaultUI=getDefaultUI;this.setUI=setUI;this.setUIToDefault=setUIToDefault;createContainers();createPanes();}
function ControlManager(map){var _controls=[];var _centeredControls=[];function indexOfControl(list,control){for(var i=list.length;i--;){if(list[i].control===control){return i;}}
return-1;}
function hideCenteredControls(){for(var i=_centeredControls.length;i--;){_centeredControls[i].node.style.display='none';}}
function repositionCenteredControls(){var cObj;for(var i=_centeredControls.length;i--;){cObj=_centeredControls[i];cObj.node.style.display='';cObj.position.apply(cObj.node);}}
function addControl(control,position,relativeToControl){var node;var ctrlProp;var rInd;if(nml.ArrayHelper.indexOf(_controls,control)>=0){throw new Error('The control you are trying to add already exists in the map.');}
if(!position){position=control.getDefaultPosition();}
node=control.initialize(map);node.style.position='absolute';rInd=(relativeToControl?indexOfControl(_controls,relativeToControl):-1);if(rInd>=0){position.applyRelative(node,_controls[rInd].node);}
else{position.apply(node);}
ctrlProp={control:control,position:position,node:node};_controls.push(ctrlProp);if(position.anchor===nmm.ControlAnchor.ANCHOR_CENTER){_centeredControls.push(ctrlProp);}}
function removeControl(control){var ctrlInd;var ctrlCntInd;var removedCenter=false;ctrlInd=indexOfControl(_controls,control);if(ctrlInd>=0){control.remove();_controls.splice(ctrlInd,1);ctrlCntInd=indexOfControl(_centeredControls,control);if(ctrlCntInd>=0){_centeredControls.splice(ctrlCntInd,1);}}}
function clear(){var ctrlCntInd;var control;for(var i=_controls.length;i--;){control=_controls[i];if(typeof(control.remove)==='function'){_controls.splice(i,1);ctrlCntInd=indexOfControl(_centeredControls,control);if(ctrlCntInd>=0){_centeredControls.splice(ctrlCntInd,1);}}}}
this.addControl=addControl;this.removeControl=removeControl;this.clear=clear;this.hideCenteredControls=hideCenteredControls;this.repositionCenteredControls=repositionCenteredControls;}
function OverlayManager(map){var _overlays=[];function addOverlay(overlay){overlay.initialize(map);overlay.redraw(true);_overlays.push(overlay);}
function removeOverlay(overlay){var i=nml.ArrayHelper.indexOf(_overlays,overlay);if(i>=0){overlay.remove();nmev.trigger(map,'removeoverlay',overlay);_overlays.splice(i,1);}}
function clearOverlays(){var len=_overlays.length;var overlay;for(var i=0;i<len;i++){overlay=_overlays[i];overlay.remove();}
_overlays=[];nmev.trigger(map,'clearoverlays');}
function hideMarkerPane(){var markerShadowPane=map.getPane(nmov.MapPane.MARKER_SHADOW_PANE);var markerPane=map.getPane(nmov.MapPane.MARKER_PANE);markerShadowPane.style.display='none';markerPane.style.display='none';}
function showMarkerPane(){var markerShadowPane=map.getPane(nmov.MapPane.MARKER_SHADOW_PANE);var markerPane=map.getPane(nmov.MapPane.MARKER_PANE);markerShadowPane.style.display='';markerPane.style.display='';}
this.addOverlay=addOverlay;this.removeOverlay=removeOverlay;this.clearOverlays=clearOverlays;this.hideMarkerPane=hideMarkerPane;this.showMarkerPane=showMarkerPane;}
function InfoWindowManager(map,overlayMng){var _infoWindow;var _infoWindowEnabled=true;function enableInfoWindow(){_infoWindowEnabled=true;}
function disableInfoWindow(){_infoWindowEnabled=false;}
function infoWindowEnabled(){return _infoWindowEnabled;}
function openInfoWindow(latlng,node,opts){var info;var infoNode;if(infoWindowEnabled()){info=getInfoWindow();info.reset(latlng,[new InfoWindowTab(null,node)],null,(opts&&opts.pixelOffset!==undefined?opts.pixelOffset:null),(opts&&opts.selectedTab!==undefined?opts.selectedTab:null));if(!info.isAdded()){overlayMng.addOverlay(info);}
info.show();info.redraw(true);}}
function openInfoWindowHtml(latlng,html,opts){var info;var infoNode;if(infoWindowEnabled()){info=getInfoWindow();info.reset(latlng,[new InfoWindowTab(null,html)],null,(opts&&opts.pixelOffset!==undefined?opts.pixelOffset:null),(opts&&opts.selectedTab!==undefined?opts.selectedTab:null));if(!info.isAdded()){overlayMng.addOverlay(info);}
info.show();info.redraw(true);}}
function openInfoWindowTabs(latlng,tabs,opts){}
function openInfoWindowTabsHtml(latlng,tabs,opts){}
function showMapBlowup(latlng,opts){}
function updateInfoWindow(tabs,onupdate){}
function updateCurrentTab(modifier,onupdate){}
function closeInfoWindow(){var info;if(infoWindowEnabled()){info=getInfoWindow();info.remove();}}
function getInfoWindow(){if(!_infoWindow){_infoWindow=new InfoWindow();}
return _infoWindow;}
this.enableInfoWindow=enableInfoWindow;this.disableInfoWindow=disableInfoWindow;this.infoWindowEnabled=infoWindowEnabled;this.openInfoWindow=openInfoWindow;this.openInfoWindowHtml=openInfoWindowHtml;this.openInfoWindowTabs=openInfoWindowTabs;this.openInfoWindowTabsHtml=openInfoWindowTabsHtml;this.showMapBlowup=showMapBlowup;this.updateInfoWindow=updateInfoWindow;this.updateCurrentTab=updateCurrentTab;this.closeInfoWindow=closeInfoWindow;this.getInfoWindow=getInfoWindow;}
function TileInfoManager(map,mapStateManager){var _that=this;var _availableTileDates={};var _availableMapTypeTileDates=[];var _availableTileLayers=[];function checkLayerNewTileDates(currentTileLayerKeys,currentTileDates,newTileDates){var j;var key;var isDiff=false;var currentDates;var newDates;var currentDateList={};var newDateList={};for(var i=0;i<currentTileLayerKeys.length;i++){key=currentTileLayerKeys[i];currentDates=currentTileDates[key];newDates=newTileDates[key];currentDateList[key]=currentDates;newDateList[key]=newDates;if(!isDiff){isDiff=nml.DateHelper.dateListDifferent(currentDates,newDates);}}
if(isDiff){nmev.trigger(map,'tiledatesupdated',currentDateList,newDateList);}}
function checkNewTileLayers(currentTileLayerKeys,currentTileLayers,newTileLayers){var i=0;if(currentTileLayers.length!==newTileLayers.length){nmev.trigger(map,'tilelayersupdated',currentTileLayers,newTileLayers);return;}
while(i<currentTileLayerKeys.length){if(nml.ArrayHelper.indexOf(newTileLayers,currentTileLayers[i])===-1){nmev.trigger(map,'tilelayersupdated',currentTileLayers,newTileLayers);return;}
i++;}}
function mergeDateLists(mapTypeKeys,newLayerTileDates){var newMapTypeTileDates=[];var oldMapTypeTileDates;var mergedDates=[];var dates;for(var i=0;i<mapTypeKeys.length;i++){dates=newLayerTileDates[mapTypeKeys[i]];if(dates){mergedDates=mergedDates.concat(dates);}}
newMapTypeTileDates=nml.DateHelper.sortUniqueAsc(mergedDates);if(nml.DateHelper.dateListDifferent(_availableMapTypeTileDates,newMapTypeTileDates)){oldMapTypeTileDates=_availableMapTypeTileDates.splice();_availableMapTypeTileDates=newMapTypeTileDates;nmev.trigger(map,'maptypetiledatesupdated',oldMapTypeTileDates,newMapTypeTileDates);}}
function parseTileInfo(point,zoom,requiredLayers){return function(data){var layers;var layerDates;var newTileLayers;var currentTileLayerKeys;var availLayerNewTileDates;var layerNewTileDates;var currentMapType;var reqCnt=0;if(!data){throw'There is no tile info data to parse';}
nmev.trigger(map,'tileinfoget',data,point,zoom);if(data.layers){layers=data.layers;newTileLayers=[];availLayerNewTileDates={};for(var p in layers){if(layers.hasOwnProperty(p)){if(requiredLayers&&nml.ArrayHelper.indexOf(requiredLayers,p)>=0){reqCnt++;}
layerNewTileDates=[];layerDates=layers[p];newTileLayers.push(p);for(var i=layerDates.length;i--;){layerNewTileDates[i]=layerDates[i];}
availLayerNewTileDates[p]=layerNewTileDates;}}
if(!requiredLayers||(requiredLayers&&requiredLayers.length===reqCnt)){currentMapType=mapStateManager.getCurrentMapType();currentTileLayerKeys=currentMapType.getTileLayerMetaKeys();checkLayerNewTileDates(currentTileLayerKeys,_availableTileDates,availLayerNewTileDates);checkNewTileLayers(currentTileLayerKeys,_availableTileLayers,newTileLayers);mergeDateLists(currentTileLayerKeys,availLayerNewTileDates);_availableTileDates=availLayerNewTileDates;_availableTileLayers=newTileLayers;}
else{_that.get(new nmm.Point(Math.floor(point.x/2),Math.floor(point.y/2)),zoom-1,requiredLayers);}}};}
function get(point,zoom,requiredLayers){var url;if(zoom>=0){url=nmm.TILE_INFO_URL_JSONP.replace(/\{Z\}/,zoom).replace(/\{X\}/,point.x).replace(/\{Y\}/,point.y);ajax.getJSON(url,parseTileInfo(point,zoom,requiredLayers),{withDate:true,error:function(){get({x:Math.floor(point.x/2),y:Math.floor(point.y/2)},zoom-1,requiredLayers);},timeoutError:function(){if(console&&console.log){console.log('Ajax JSONP timeout occured on TileInfo | x: %s | y: %s | z: %s',point.x,point.y,zoom);}}});}}
function getAvailableTileDates(){return _availableTileDates;}
function getAvailableMapTypeTileDates(){return _availableMapTypeTileDates;}
function getAvailableTileLayers(){return _availableTileLayers;}
this.get=get;this.getAvailableTileDates=getAvailableTileDates;this.getAvailableMapTypeTileDates=getAvailableMapTypeTileDates;this.getAvailableTileLayers=getAvailableTileLayers;this.mergeDateLists=mergeDateLists;}
function SplashManager(container){var _splash;function remove(){if(_splash){nme.discardElement(_splash,container);_splash=null;}}
function create(mainHeading,subHeading,message){var logoUrl=nmm.HOST_URL+'img/nearmap-logo-large.png';var frag=document.createDocumentFragment();var splashWrap=document.createElement('div');var logoWrap=document.createElement('span');var headWrap=document.createElement('h1');var mainContentWrap=document.createElement('div');var subHeadingWrap=document.createElement('h2');var messageWrap=document.createElement('div');var logo;remove();_splash=document.createElement('div');logo=nmd.create('img',{src:logoUrl,alt:'Nearmap logo',height:'179',width:'472'});headWrap.innerHTML=mainHeading;subHeadingWrap.innerHTML=subHeading;messageWrap.innerHTML=message;nms.css(_splash,{'background':'#fff','position':'absolute','top':'0px','left':'0px','width':'100%','height':'100%','z-index':'9999'},true);nms.css(splashWrap,{'color':'#003465','margin':'80px 100px 0px 100px'},true);nms.css(logoWrap,{'height':'179px','width':'472px','zoom':'1'},true);nms.fixPngImage(logoWrap,logoUrl,0);nms.css(headWrap,{'margin':'20px 0px 15px 0px','font-style':'italic'},true);nms.css(mainContentWrap,{'border':'dotted 1px #bfcad4','padding':'10px'},true);nms.css(subHeadingWrap,{'color':'#003465','font-size':'1em','margin':'0px 0px 10px 0px'},true);frag.appendChild(_splash);_splash.appendChild(splashWrap);splashWrap.appendChild(logoWrap);splashWrap.appendChild(headWrap);splashWrap.appendChild(mainContentWrap);mainContentWrap.appendChild(subHeadingWrap);mainContentWrap.appendChild(messageWrap);logoWrap.appendChild(logo);container.appendChild(frag);}
this.remove=remove;this.create=create;}
function SessionManager(container,splashMng){var _sessionimg;function createSessionImg(){_sessionimg=nmd.create('img',{alt:''});nms.css(_sessionimg,{'position':'absolute','top':'0px','left':'-999px'},true);container.appendChild(_sessionimg);}
function checkBusy(session,availableHandler,busyHandler){var available=nmh.TileSession.isAvailable(session);splashMng.remove();if(available&&availableHandler&&typeof availableHandler==='function'){availableHandler();}
else if(!available&&busyHandler&&typeof busyHandler==='function'){busyHandler();}}
function requestTileSessionCookie(availableHandler,busyHandler){var sessionThrottle=60000;var requestTime=new Date().getTime();if(!_sessionimg.requestTime||requestTime-_sessionimg.requestTime>sessionThrottle){_sessionimg.onload=function(){checkBusy(nmh.TileSession.get(),availableHandler,busyHandler);};if(busyHandler&&typeof busyHandler==='function'){_sessionimg.onerror=function(){_sessionimg.removeAttribute('src');createSplash("We're sorry.","We're currently having trouble communicating with the NearMap website. Please check your internet connection and try again.","If the problem persists please visit our <a href='http://forum.nearmap.com' title='NearMap support forum'>support forum</a>.");};}
_sessionimg.requestTime=requestTime;_sessionimg.src=nmh.TileSession.createRequestUrl();}}
function serversBusy(){return nmev.callbackArgs(this,splashMng.create,'Yes! You got here!','However, so did everyone else.','We\'re working hard to adjust the traffic, please connect to us again shortly');}
function processSession(availableHandler,busyHandler){var session=nmh.TileSession.get();var now=new Date().getTime();if(!session||(_sessionimg.requestTime&&(now-_sessionimg.requestTime>nmm.SESSION_COOKIE_EXPIRES-nmm.SESSION_COOKIE_CHECK_BEFORE))){requestTileSessionCookie(availableHandler,busyHandler||serversBusy());}
else{checkBusy(session,availableHandler,busyHandler||serversBusy());}}
this.processSession=processSession;createSessionImg();}
function TileHistoryManager(container,tileContainer,historyContainer,garbageContainer,sizeMng){var _history=new nmg.Dictionary();var _timers={};var _loadedTiles=[];var _chunkTimeout=100;function getHistoryKey(point,zoom){var key=point.x+'|'+point.y+'|'+zoom;return key;}
function addHistory(tile,mapType,addInvisible){var key=getHistoryKey(tile.wrappedPoint,tile.zoom);var isEmpty=false;var dateHistory;var dateKey;if(addInvisible||tile.style.visibility!=='hidden'){dateHistory=_history.getValue(key);dateKey=nml.DateHelper.toNearmapDateUTC(tile.date);if(!dateHistory){dateHistory=new nmg.Dictionary();_history.add(key,dateHistory);isEmpty=true;}
if(isEmpty||!dateHistory.exists(dateKey)){tile.tileSize=mapType.getTileSize();tile.tileScale=mapType.getTileScale();tile.projection=mapType.getProjection();tile.heading=mapType.getHeading();tile.initialTileSize=mapType.getTileSize();tile.mapType=mapType;dateHistory.add(dateKey,tile);return true;}}
nme.discardElement(tile,container);return false;}
function appendHistory(tile,mapType,addInvisible){if(addHistory(tile,mapType,addInvisible)){historyContainer.appendChild(tile);}}
function addTileSetHistory(mapType,mapTypeContainer,tileSets){var len=tileSets.length;var hasTransparency=false;var layer;var row;var rlen;var clen;for(var l=len;l--;){layer=tileSets[l];rlen=layer.length;for(var r=0;r<rlen;r++){row=layer[r];clen=row.length;for(var c=0;c<clen;c++){appendHistory(row[c],mapType);}}}
nme.discardElement(mapTypeContainer,container);}
function clearHistory(){var replacement;if(historyContainer.childNodes.length>0){_loadedTiles=[];_history.clear();historyContainer.innerHTML='';}}
function removeMaxScaleHistory(zoom,direction){var zoomInLimit=4;var zoomOutLimit=-4;var historyKeys=_history.getAllKeys();var dateHistory;var dateKeys;var tile;var key;var zx;for(var i=historyKeys.length;i--;){key=historyKeys[i];dateHistory=_history.getValue(key);if(dateHistory){dateKeys=dateHistory.getAllKeys();tile=dateHistory.getValue(dateKeys[0]);if(tile){zx=zoom-tile.zoom;if((direction>0&&zx>zoomInLimit)||(direction<0&&zx<zoomOutLimit)){removeDateHistory(dateHistory,key,null);}}}}}
function remove(coordinateKey,date){var dateHistory=_history.getValue(coordinateKey);var dateKey=nml.DateHelper.toNearmapDateUTC(date);var tile;if(dateHistory){tile=dateHistory.getValue(dateKey);if(tile){nme.discardElement(tile,container);dateHistory.remove(dateKey);if(dateHistory.getAllKeys().length===0){_history.remove(coordinateKey);}}}}
function removeDateHistory(dateHistory,historyKey,loadedTile){var allKeys=dateHistory.getAllKeys();var empty=true;var dateKey;var tile;for(var i=allKeys.length;i--;){dateKey=allKeys[i];tile=dateHistory.getValue(dateKey);if(tile!==loadedTile){nme.discardElement(tile,container);dateHistory.remove(dateKey);}
else{empty=false;}}
if(empty){_history.remove(historyKey);}}
function isOffset(tile,size,divOffset){var tileLeft=parseInt(tile.style.left,10)+divOffset.x;var tileTop=parseInt(tile.style.top,10)+divOffset.y;if(tileLeft+tile.width<0){return true;}
if(tileLeft>size.width){return true;}
if(tileTop+tile.height<0){return true;}
if(tileTop>size.height){return true;}
return false;}
function isObscured(loadedPoint,oldTile,tileOverlays,overlayKeys,loadedZoom,scale){var numTiles=Math.pow(2,scale);var numCovered=1;var covered=[];var coveredRow;var oldScaledX;var oldScaledY;var row;var col;var key;var overlay;var overlayScale;oldScaledX=oldTile.wrappedPoint.x*scale;oldScaledY=oldTile.wrappedPoint.y*scale;row=loadedPoint.y%oldScaledY;col=loadedPoint.x%oldScaledX;coveredRow=[];coveredRow[col]=1;covered[row]=coveredRow;for(var i=overlayKeys.length;i--;){key=overlayKeys[i];overlay=tileOverlays.getValue(key);if(overlay.zoom<=loadedZoom){overlayScale=Math.pow(2,loadedZoom-overlay.zoom);row=(overlayScale*overlay.y)%oldScaledY;col=(overlayScale*overlay.x)%oldScaledX;coveredRow=covered[row];if(!coveredRow){coveredRow=[];coveredRow[col]=1;covered[row]=coveredRow;numCovered++;}
else if(!coveredRow[col]){coveredRow[col]=1;numCovered++;}
if(numCovered===numTiles){return true;}}}
return false;}
function createTileChunk(){var maxProcess=10;var toProcess=(_loadedTiles.length<=maxProcess?_loadedTiles.length:maxProcess);var tiles=_loadedTiles.splice(0,toProcess);processTileChunk(tiles);if(_loadedTiles.length>0){_timers.processTileChunk=window.setTimeout(createTileChunk,_chunkTimeout);}
else{delete _timers.processTileChunk;}}
function processLoadedTile(tile){_loadedTiles.push(tile);if(!_timers.processTileChunk){_timers.processTileChunk=window.setTimeout(createTileChunk,_chunkTimeout);}}
function processTileChunk(tiles){var size=sizeMng.getSize();var divOffset=nmd.topLeft(tileContainer);var keys;var oldKey;var oldTile;var loadedTile;var loadedTileKey;var loadedZoom;var zx;var scale;var scaledX;var scaledY;var tileOverlays;var overlayKeys;var overlayKey;var dateHistory;var dateKeys;for(var i=tiles.length;i--;){loadedTile=tiles[i];loadedTileKey=getHistoryKey(loadedTile.wrappedPoint,loadedTile.zoom);keys=_history.getAllKeys();for(var k=keys.length;k--;){oldKey=keys[k];dateHistory=_history.getValue(oldKey);if(dateHistory){dateKeys=dateHistory.getAllKeys();oldTile=dateHistory.getValue(dateKeys[0]);loadedZoom=loadedTile.zoom;zx=loadedZoom-oldTile.zoom;scale=Math.pow(2,zx);if(scale===1){if(oldTile!==loadedTile&&oldTile.wrappedPoint.x===loadedTile.wrappedPoint.x&&oldTile.wrappedPoint.y===loadedTile.wrappedPoint.y){removeDateHistory(dateHistory,oldKey,loadedTile);}}
else if(scale<1){scaledX=Math.floor(oldTile.wrappedPoint.x*scale);scaledY=Math.floor(oldTile.wrappedPoint.y*scale);if(scaledX===loadedTile.wrappedPoint.x&&scaledY===loadedTile.wrappedPoint.y){removeDateHistory(dateHistory,oldKey,loadedTile);}}
else if(scale>1){if(isOffset(oldTile,size,divOffset)){removeDateHistory(dateHistory,oldKey,loadedTile);}
else{scaledX=Math.floor(loadedTile.wrappedPoint.x/scale);scaledY=Math.floor(loadedTile.wrappedPoint.y/scale);if(scaledX===oldTile.wrappedPoint.x&&scaledY===oldTile.wrappedPoint.y){if(!oldTile.overlays){tileOverlays=new nmg.Dictionary();oldTile.overlays=tileOverlays;}
else{tileOverlays=oldTile.overlays;}
overlayKeys=tileOverlays.getAllKeys();overlayKey=getHistoryKey(loadedTile.wrappedPoint,loadedTile.zoom);if(overlayKeys.length===0){tileOverlays.add(overlayKey,{x:loadedTile.wrappedPoint.x,y:loadedTile.wrappedPoint.y,zoom:loadedTile.zoom});}
else{if(isObscured(loadedTile.wrappedPoint,oldTile,tileOverlays,overlayKeys,loadedZoom,scale)){removeDateHistory(dateHistory,oldKey,loadedTile);}
else{tileOverlays.add(overlayKey,{x:loadedTile.wrappedPoint.x,y:loadedTile.wrappedPoint.y,zoom:loadedTile.zoom});}}}}}}}}}
function getHistory(){return _history;}
function exists(key){return _history.exists(key);}
this.getHistoryKey=getHistoryKey;this.appendHistory=appendHistory;this.addTileSetHistory=addTileSetHistory;this.clearHistory=clearHistory;this.removeMaxScaleHistory=removeMaxScaleHistory;this.processLoadedTile=processLoadedTile;this.getHistory=getHistory;this.exists=exists;this.remove=remove;}
function SizeManager(container,map,mapStateMng,ctrlMng){var _size;var _lastsize;function getSize(useCachedSize){if(useCachedSize===undefined||useCachedSize){return _size;}
_size=new nmm.Size(container.offsetWidth,container.offsetHeight);return _size;}
function getDimensions(mapType){var sclTSize=mapType.getScaledTileSize();var size=getSize();return new nmm.Size(Math.ceil(size.width/sclTSize.width),Math.ceil(size.height/sclTSize.height));}
function getBufferedDimensions(mapType){var sclTSize=mapType.getScaledTileSize();var size=getSize();return new nmm.Size(Math.floor(size.width/sclTSize.width)+TILE_BUFFER,Math.floor(size.height/sclTSize.height)+TILE_BUFFER);}
function getBufferedSize(){var dmns=getBufferedDimensions();var sclTSize=map.getCurrentMapType().getScaledTileSize();return new nmm.Size(dmns.width*sclTSize.width,dmns.height*sclTSize.height);}
function getResizeOffset(currentSize){var offsetX=0;var offsetY=0;if(_lastsize.width!==currentSize.width||_lastsize.height!==currentSize.height){offsetX=currentSize.width-_lastsize.width;offsetY=currentSize.height-_lastsize.height;_lastsize=currentSize.copy();}
return{x:offsetX,y:offsetY};}
this.getSize=getSize;this.getDimensions=getDimensions;this.getBufferedDimensions=getBufferedDimensions;this.getBufferedSize=getBufferedSize;this.getResizeOffset=getResizeOffset;_size=getSize(false);_lastsize=getSize(false);}
function PanManager(map,container,tileContainer,mapStateMng,sizeMng,sessionMng){var _draggable=false;var _moveTimeout=300;var _listeners={};var _timers={};var _animations={};var _startX=null;var _startY=null;function clear(){for(var p in _timers){if(_timers.hasOwnProperty(p)){window.clearTimeout(_timers[p]);delete _timers[p];}}
for(var a in _animations){if(_timers.hasOwnProperty(a)){nma.stopAnimation(_animations[a]);delete _animations[a];}}
_startX=null;_startY=null;}
function onmoveend(){var mapType=mapStateMng.getCurrentMapType();var layers=mapType.getTileLayers();var tileInfoMng=mapStateMng.getTileInfoManager();delete _timers.moveend;mapStateMng.savePosition();tileInfoMng.get(mapStateMng.getCenterTile(),mapStateMng.getZoom(),[layers[0].getMetaKey()]);nmev.trigger(map,'moveend');sessionMng.processSession();}
function panToInputPosition(e){var dx;var dy;e=e||window.event;dx=this.mouseX-e.clientX;dy=this.mouseY-e.clientY;if(dx!==0||dy!==0){this.mouseX=e.clientX;this.mouseY=e.clientY;panMap(dx,dy,true);}}
function dragstart(e){this.style.cursor=nmls.CURSOR_PAN_DOWN.css;nmev.trigger(map,'dragstart');}
function drag(e){panToInputPosition.apply(this,[e]);nmev.trigger(map,'drag');}
function dragend(e){e=e||window.event;this.style.cursor=nmls.CURSOR_MAP_OVER.css;this.mouseX=null;this.mouseY=null;this.hasDragged=null;nmev.trigger(map,'dragend');}
function containertouchstart(e){var touch;if(e.touches.length===1){touch=e.touches[0];this.mouseX=touch.clientX;this.mouseY=touch.clientY;}}
function containertouchend(e){delete this.mouseX;delete this.mouseY;}
function containertouchmove(e){if(e.touches.length===1){panToInputPosition.apply(this,[e.touches[0]]);nmev.trigger(map,'drag');return nmev.preventDefault(e);}
if(e.touches.length===2&&map.pinchToZoomEnabled()){return nmev.preventDefault(e);}}
function enableDragging(){if(!_listeners.dragndrop){_listeners.dragndrop=nml.dragndrop.add(container,dragstart,drag,dragend,nmev.MouseButton.LEFT_BUTTON,'isMap');}
if(!_listeners.touchstart){_listeners.touchstart=nmev.addDomListener(container,'touchstart',containertouchstart);}
if(!_listeners.touchend){_listeners.touchend=nmev.addDomListener(container,'touchend',containertouchend);}
if(!_listeners.touchmove){_listeners.touchmove=nmev.addDomListener(container,'touchmove',containertouchmove);}
_draggable=true;}
function disableDragging(){if(_listeners.dragndrop){nml.dragndrop.remove(_container);delete _listeners.dragndrop;}
if(_listeners.touchstart){nmev.removeListener(_listeners.touchstart);delete _listeners.touchstart;}
if(_listeners.touchend){nmev.removeListener(_listeners.touchend);delete _listeners.touchend;}
if(_listeners.touchmove){nmev.removeListener(_listeners.touchmove);delete _listeners.touchmove;}
_draggable=false;}
function draggingEnabled(){return _draggable;}
function reorganize(){var mapType=mapStateMng.getCurrentMapType();var divOffset=nmd.topLeft(tileContainer);var movedX=divOffset.x-_startX;var movedY=divOffset.y-_startY;var layers=mapType.getTileLayers();var vSize=sizeMng.getSize();var sclTSize=mapType.getScaledTileSize();var buffDimensions=sizeMng.getBufferedDimensions(mapType);var dimensions=sizeMng.getDimensions(mapType);var tlTile=layers[0].getTile(0,0);var tileOffset=nmd.topLeft(tlTile);var buffNw={x:tileOffset.x+divOffset.x,y:tileOffset.y+divOffset.y};var buffSe={x:tileOffset.x+(buffDimensions.width*sclTSize.width)-vSize.width+divOffset.x,y:tileOffset.y+(buffDimensions.height*sclTSize.height)-vSize.height+divOffset.y};var dx=0;var dy=0;var zoom;var tileDate;if(buffSe.x>(sclTSize.width*2)){dx=Math.ceil((buffSe.x-sclTSize.width)/sclTSize.width);}
else if(buffNw.x<-(sclTSize.width*2)){dx=-Math.ceil(Math.abs(buffNw.x+sclTSize.width)/sclTSize.width);}
if(buffSe.y>(sclTSize.height*2)){dy=Math.ceil((buffSe.y-sclTSize.height)/sclTSize.height);}
else if(buffNw.y<-(sclTSize.height*2)){dy=-Math.ceil(Math.abs(buffNw.y+sclTSize.height)/sclTSize.height);}
if(dx!==0||dy!==0){zoom=mapStateMng.getZoom();tileDate=mapStateMng.getTileDate();for(var i=0;i<layers.length;i++){layers[i].reorganize(zoom,tileDate,dx,dy);}}
_startX=null;_startY=null;}
function panMap(dx,dy,loadTiles){var reorganizeTimeout=nmc.browser.msie?200:10;var mapType;var tileSize;var sclTSize;var zoom;var divOffset;var newDivOffset;var size;var vSize;if(!_timers.moveend){nmev.trigger(map,'movestart');}
else{window.clearTimeout(_timers.moveend);}
nmev.trigger(map,'move');mapType=mapStateMng.getCurrentMapType();tileSize=mapType.getTileSize();sclTSize=mapType.getScaledTileSize();zoom=mapStateMng.getZoom();divOffset=nmd.topLeft(tileContainer);newDivOffset={x:divOffset.x-dx,y:divOffset.y-dy};vSize=sizeMng.getSize();if(loadTiles){if(_timers.reorganize){window.clearTimeout(_timers.reorganize);}
if(_startX===null&&_startY===null){_startX=divOffset.x;_startY=divOffset.y;}
_timers.reorganize=window.setTimeout(reorganize,reorganizeTimeout);}
tileContainer.style.left=newDivOffset.x+'px';tileContainer.style.top=newDivOffset.y+'px';_timers.moveend=window.setTimeout(onmoveend,_moveTimeout);var tScale=mapType.getTileScale();var proj=mapType.getProjection();var heading=mapType.getHeading();var topLeftTile=mapType.getTileLayers()[0].getTile(0,0);var preciseCurrentTileSize=mapStateMng.getPreciseTileSizeAtRelativeScale(tileSize,topLeftTile.zoom,zoom);var zoomScale=preciseCurrentTileSize/tileSize;var topLeftPx=new nmm.Point(topLeftTile.point.x*tileSize*zoomScale,topLeftTile.point.y*tileSize*zoomScale);var offset={x:Math.floor(vSize.width/2)-newDivOffset.x-parseInt(topLeftTile.style.left,10),y:Math.floor(vSize.height/2)-newDivOffset.y-parseInt(topLeftTile.style.top,10)};offset.x/=tScale.x;offset.y/=tScale.y;offset=nmlm.rotatePoint(heading,offset,nmm.Point.ORIGIN,Math.round);var midPoint=Math.floor(tileSize/2);var nwTileOffset=nmlm.rotatePoint(heading,nmm.Point.ORIGIN,new nmm.Point(midPoint,midPoint));nwTileOffset.x=Math.floor(nwTileOffset.x*zoomScale);nwTileOffset.y=Math.floor(nwTileOffset.y*zoomScale);var tileCenterPx=new nmm.Point(topLeftPx.x+offset.x+nwTileOffset.x,topLeftPx.y+offset.y+nwTileOffset.y);var latlng=proj.fromPixelToLatLng(tileCenterPx,mapStateMng.getZoom(),true,tileSize);mapStateMng.updateCenterLatLng(latlng);return latlng;}
function panTo(center){throw'Map2.panTo not implemented exception';}
function panBy(distance,animate,loadTiles){var frames=5;var length=205;var dxToGo=distance.width;var dyToGo=distance.height;var deltaRatio=1/frames;if(_animations.panBy){nma.stopFixedAnimation(_animations.panBy);}
if(animate===undefined?true:animate){_animations.panBy=nma.runFixedAnimation(frames,length,function(currentFrame,totalFrames){var dx;var dy;if(currentFrame===totalFrames){dx=dxToGo;dy=dyToGo;}
else{dx=Math.floor(distance.width*deltaRatio);dy=Math.floor(distance.height*deltaRatio);dxToGo-=dx;dyToGo-=dy;}
panMap(dx,dy,(loadTiles===undefined?true:loadTiles));});}
else{panMap(distance.width,distance.height,(loadTiles===undefined?true:loadTiles));}}
function panDirection(dx,dy,animate){var size=sizeMng.getSize();var halfWidth=Math.floor(size.width/2);var halfHeight=Math.floor(size.height/2);var panX=halfWidth*dx;var panY=halfHeight*dy;panBy(new nmm.Size(panX,panY),animate);}
enableDragging();this.clear=clear;this.enableDragging=enableDragging;this.disableDragging=disableDragging;this.draggingEnabled=draggingEnabled;this.panTo=panTo;this.panBy=panBy;this.panDirection=panDirection;}
function ZoomManager(map,container,tileContainer,zoomLockControl,mapStateMng,sizeMng,tileHistoryManager,panMng,uiMng){var _dblClickZoomEnabled=true;var _continuousZoomEnabled=false;var _scrollZoomEnabled=false;var _pinchZoomEnabled=true;var _isMapAnimating=false;var _listeners={};var _animations={};var _zoomFrom;var _zoomTo;function getMapCenterPixel(){var mapType=mapStateMng.getCurrentMapType();return mapType.getProjection().fromLatLngToPixel(mapStateMng.getCenter(),mapStateMng.getZoom(),mapType.getTileSize());}
function getMouseMapPixel(mouseOffset,heading,scale){var centerPx=getMapCenterPixel();var mousePx;var rotatedMouseOffset;rotatedMouseOffset=nmlm.rotatePoint(heading,mouseOffset,nmm.Point.ORIGIN);if(scale){rotatedMouseOffset.x=Math.floor(rotatedMouseOffset.x/scale.x);rotatedMouseOffset.y=Math.floor(rotatedMouseOffset.y/scale.y);}
mousePx=new nmm.Point(centerPx.x+rotatedMouseOffset.x,centerPx.y+rotatedMouseOffset.y);return mousePx;}
function getMouseCenterOffset(event,isScroll){var gmtry=new nmd.Geometry();var size=sizeMng.getSize();var mousePos;var cx;var cy;mousePos=gmtry.getDocPos(event,isScroll);cx=Math.floor(container.offsetLeft+(size.width/2));cy=Math.floor(container.offsetTop+(size.height/2));return new nmm.Point(mousePos.x-cx,mousePos.y-cy);}
function zoomLockToInputPosition(pointerPosition,zoomLevel,isMouseWheel,showLockAnimation){var zoom=map.getZoom();var newZoom=zoom+zoomLevel;var mapType=map.getCurrentMapType();var proj=mapType.getProjection();var rotatedTileScale;var mouseOffset;var scaledMouseOffset;var scale;var pointerPx;var pointerLatLng;var centerPx;var cLatLng;mouseOffset=getMouseCenterOffset(pointerPosition,isMouseWheel);scale=Math.pow(2,zoomLevel);rotatedTileScale=nmlm.rotatePoint(mapType.getHeading(),mapType.getTileScale(),nmm.Point.ORIGIN);if(rotatedTileScale.x<0){rotatedTileScale.x*=-1;}
if(rotatedTileScale.y<0){rotatedTileScale.y*=-1;}
scaledMouseOffset=new nmm.Point(mouseOffset.x-Math.floor(mouseOffset.x/scale),mouseOffset.y-Math.floor(mouseOffset.y/scale));pointerPx=getMouseMapPixel(mouseOffset,mapType.getHeading(),rotatedTileScale);centerPx=getMouseMapPixel(scaledMouseOffset,mapType.getHeading(),rotatedTileScale);cLatLng=proj.fromPixelToLatLng(centerPx,zoom,true,mapType.getTileSize());pointerLatLng=proj.fromPixelToLatLng(pointerPx,zoom,true,mapType.getTileSize());if(newZoom>=mapType.getMinimumResolution()){if(newZoom<=mapType.getMaximumResolution()){if(showLockAnimation){if(zoomLevel>0){}
else{}}
map.setZoom(newZoom,cLatLng);}}
return cLatLng;}
function getLockOffset(oldCenter,newCenter,zoom,tSize,scaleBy){var mapType=mapStateMng.getCurrentMapType();var tileScale=mapType.getTileScale();var proj=mapType.getProjection();var heading=mapType.getHeading();var offset;var oPx;var nPx;oPx=proj.fromLatLngToPixel(oldCenter,zoom,tSize);nPx=proj.fromLatLngToPixel(newCenter,zoom,tSize);offset=new nmm.Point(nPx.x-oPx.x,nPx.y-oPx.y);if(scaleBy>1){offset.x=offset.x*scaleBy;offset.y=offset.y*scaleBy;}
offset=nmlm.rotatePoint(-heading,offset,nmm.Point.ORIGIN);offset.x=Math.floor(offset.x*tileScale.x);offset.y=Math.floor(offset.y*tileScale.y);return offset;}
function zoomAnimateFinished(){var mapType=mapStateMng.getCurrentMapType();var downloadTiles=(_zoomTo<_zoomFrom?downloadTilesInwardStaircase:null);_zoomTo=Math.round(_zoomTo);map.setCenter(mapStateMng.getCenter(),_zoomTo,mapType,mapStateMng.getTileDate(),true,false,downloadTiles);_isMapAnimating=false;delete _animations.zoom;nmev.trigger(map,'zoomend',_zoomFrom,_zoomTo);mapStateMng.savePosition();}
function applyScale(tile,position,size){tile.style.cssText='position:absolute;'+
(nmm.debug?'border:solid 1px orange;':'')+'z-index:'+tile.zoom+';'+'visibility:'+(tile.style?tile.style.visibility:'hidden')+';'+'left:'+position.x+'px;'+'top:'+position.y+'px;'+'width:'+size.width+'px;'+'height:'+size.height+'px;';}
function scaleTiles(tileSet,scaledTileSize,divOffset){for(var i=tileSet.length-1;i>=0;i--){nmm.TileLayer.scaleTileSet(tileSet[i],scaledTileSize,divOffset);}}
function scaleOldTiles(centerLatLng,updateZoomTo,divOffset,vCenter){var historyCnt=uiMng.getHistoryContainer();var tile=historyCnt.firstChild;var centerPx;var currentScaleTileSize;var mapType;var tScale;var tileOffset;var tileSet;var initialTileSize;var scale;var proj;var heading;while(tile){proj=tile.projection;heading=tile.heading;tScale=tile.tileScale;initialTileSize=tile.initialTileSize;currentScaleTileSize=mapStateMng.getTileSizeAtRelativeScale(tile.tileSize,tile.zoom,updateZoomTo);scale=currentScaleTileSize/tile.tileSize;centerPx=proj.fromLatLngToPixel(centerLatLng,tile.zoom,initialTileSize);centerPx.x=Math.floor(centerPx.x*scale);centerPx.y=Math.floor(centerPx.y*scale);tileOffset=mapStateMng.getDivOffsetAtRelativeScale(tile.point,centerPx,currentScaleTileSize,tScale,heading,divOffset,vCenter);applyScale(tile,tileOffset,{width:Math.floor(currentScaleTileSize*tScale.x),height:Math.floor(currentScaleTileSize*tScale.y)});tile=tile.nextSibling;}}
function getBrowserAnimationLength(){var frames;var length;if(nmc.browser.msie){if(nmc.browser.majorVersion>=8){frames=4;length=164;}
else{frames=6;length=246;}}
else{frames=6;length=246;}
return{frames:frames,length:length};}
function downloadTilesInwardStaircase(tileSet,downloadTimers,height,width,divOffset,tileSize,tileCheckRange,getTileUrl,isPng,opacity){var tilesToLoad;var tileToLoadTimers=0;var maxTilesToLoad=5;var timerOffset=50;var size=map.getSize(true);var vCenter=new nmm.Point(size.width/2,size.height/2);var divOffsetCenterPx=new nmm.Point(vCenter.x-divOffset.x,vCenter.y-divOffset.y);var rows=height-1;var cols=width-1;var middleRow=Math.floor(rows/2);var middleCol=Math.floor(cols/2);var spiralRows;var spiralCols;var maxSteps;var minRow;var minCol;var maxRow;var maxCol;spiralRows=Math.ceil(height/2);spiralCols=Math.ceil(width/2);maxSteps=(spiralRows>spiralCols?spiralRows:spiralCols);for(var i=0;i<maxSteps;i++){tilesToLoad=[];minRow=0+i;maxRow=rows-i;minCol=0+i;maxCol=cols-i;for(var c=minCol;c<=maxCol;c++){if(minRow<=middleRow){tilesToLoad.push(tileSet[minRow][c]);}
if(minRow<maxRow&&maxRow>middleRow){tilesToLoad.push(tileSet[maxRow][c]);}
if(tilesToLoad.length>=maxTilesToLoad){downloadTimers[tileToLoadTimers]=window.setTimeout(mapStateMng.loadBatchTiles(tilesToLoad,tileCheckRange,getTileUrl,isPng,opacity,downloadTimers,tileToLoadTimers),timerOffset*tileToLoadTimers);tileToLoadTimers++;tilesToLoad=[];}}
for(var r=minRow+1;r<maxRow;r++){if(minCol<=middleCol){tilesToLoad.push(tileSet[r][minCol]);}
if(minCol<maxCol&&maxCol>middleCol){tilesToLoad.push(tileSet[r][maxCol]);}
if(tilesToLoad.length>=maxTilesToLoad){downloadTimers[tileToLoadTimers]=window.setTimeout(mapStateMng.loadBatchTiles(tilesToLoad,tileCheckRange,getTileUrl,isPng,opacity,downloadTimers,tileToLoadTimers),timerOffset*tileToLoadTimers);tileToLoadTimers++;tilesToLoad=[];}}
if(tilesToLoad.length>0){downloadTimers[tileToLoadTimers]=window.setTimeout(mapStateMng.loadBatchTiles(tilesToLoad,tileCheckRange,getTileUrl,isPng,opacity,downloadTimers,tileToLoadTimers),timerOffset*tileToLoadTimers);tileToLoadTimers++;}}
tilesToLoad=null;}
function getLockCenterLatLng(centerPx,offset,mapType,projection,tileScale,currentTileSize){var heading=mapType.getHeading();var scaledOffset;scaledOffset={x:offset.x/tileScale.x,y:offset.y/tileScale.y};scaledOffset=nmlm.rotatePoint(heading,scaledOffset,nmm.Point.ORIGIN,Math.round);centerPx.add(scaledOffset.x,scaledOffset.y);return projection.fromPixelToLatLng(centerPx,_zoomFrom,true,currentTileSize);}
function zoomMap(step,latlng){var startZoom=mapStateMng.getZoom();var scaleBy;var mapType;var pivot;var recentering;var maxRes;var minRes;var zx;function scaleLayers(){var container=map.getContainer();var tScale=mapType.getTileScale();var tSize=mapType.getTileSize();var animationLength=getBrowserAnimationLength();var endSize=tSize*Math.pow(2,_zoomTo-_zoomFrom);var startSize=mapStateMng.getTileSizeAtRelativeScale(tSize,_zoomFrom,startZoom);var centerLatLng=map.getCenter();var distanceMoved=new nmm.Point(0,0);var direction=(step<0?-1:1);var scaleBy=Math.pow(2,step);var tileSets;var newCenterLatLng;var panOffset;_isMapAnimating=true;if(_animations.zoom){nma.stopFixedAnimation(_animations.zoom);}
if(centerLatLng.equals(latlng)){panOffset=new nmm.Point(0,0);}
else{panOffset=getLockOffset(centerLatLng,latlng,startZoom,tSize,scaleBy);}
mapType.hideTransparentLayers();tileSets=mapType.getVisibleTileSets();_animations.zoom=nma.runFixedAnimation(animationLength.frames,animationLength.length,function(currentFrame,totalFrames){var prevZoom=map.getZoom();var updateZoomTo=startZoom+(currentFrame/totalFrames*step*Math.abs(_zoomTo-startZoom));var currentTileSize=mapStateMng.getTileSizeAtRelativeScale(tSize,_zoomFrom,updateZoomTo);var prevTileSize=mapStateMng.getTileSizeAtRelativeScale(tSize,_zoomFrom,prevZoom);var panScale=(prevTileSize!==0?currentTileSize/prevTileSize:0);var divOffset=nmd.topLeft(tileContainer);var tileScale=mapType.getTileScale();var heading=mapType.getHeading();var proj=mapType.getProjection();var size=sizeMng.getSize();var vCenter;var framePanOffset;var tileOffset;var centerPx;var scale;scale=currentTileSize/(zx>=0?Math.pow(2,zx)*tSize:tSize);if(scale===0){mapType.hideAllTileLayers();return;}
mapStateMng.updateZoom(updateZoomTo);if(step>0){framePanOffset=new nmm.Point(Math.round((panOffset.x*panScale))-panOffset.x,Math.round((panOffset.y*panScale))-panOffset.y);}
else{framePanOffset=new nmm.Point(panOffset.x-Math.round((panOffset.x*panScale)),panOffset.y-Math.round(panOffset.y*panScale));}
if(zx<0){centerPx=proj.fromLatLngToPixel(map.getCenter(true),_zoomFrom,tSize);centerPx.x=Math.floor(centerPx.x*scale);centerPx.y=Math.floor(centerPx.y*scale);}
else{centerPx=proj.fromLatLngToPixel(map.getCenter(true),_zoomTo,tSize);centerPx.x=Math.floor(centerPx.x*scale);centerPx.y=Math.floor(centerPx.y*scale);}
newCenterLatLng=getLockCenterLatLng(centerPx,framePanOffset,mapType,proj,tileScale,currentTileSize);mapStateMng.updateCenterLatLng(newCenterLatLng);vCenter={x:Math.floor(size.width/2),y:Math.floor(size.height/2)};tileOffset=mapStateMng.getDivOffsetAtRelativeScale(tileSets[0][0][0].point,centerPx,Math.floor(currentTileSize),tileScale,heading,divOffset,vCenter);scaleTiles(tileSets,new nmm.Size(currentTileSize*tScale.x,currentTileSize*tScale.y),tileOffset);scaleOldTiles(newCenterLatLng,updateZoomTo,divOffset,vCenter);},zoomAnimateFinished);}
if(step===0){return;}
panMng.clear();if(startZoom%1===0){nml.abortDownloads();_zoomFrom=startZoom;_zoomTo=startZoom+step;nmev.trigger(map,'zoomstart',step,pivot,recentering);}
else{_zoomTo=_zoomTo+step;nmev.trigger(map,'zooming');}
mapType=map.getCurrentMapType();maxRes=mapType.getMaximumResolution();minRes=mapType.getMinimumResolution();if(_zoomTo>maxRes){_zoomTo=maxRes;}
if(_zoomTo<minRes){_zoomTo=minRes;}
zx=_zoomTo-_zoomFrom;if(arguments.length<2||!(latlng instanceof nmm.LatLng)){latlng=mapStateMng.getCenter();}
tileHistoryManager.removeMaxScaleHistory(startZoom,step);scaleLayers();}
function setZoom(level,latlng){var mapType=mapStateMng.getCurrentMapType();var minZ=mapType.getMinimumResolution();var maxZ=mapType.getMaximumResolution();var zoom=mapStateMng.getZoom();var dz;if(level<minZ){dz=minZ-zoom;}
else if(level>maxZ){dz=maxZ-zoom;}
else{dz=level-zoom;}
if(dz!==0){zoomMap(dz,latlng);}}
function zoomIn(latlng,doCenter,doContinuousZoom){var oldLevel=mapStateMng.getZoom();if(mapStateMng.getCurrentMapType().getMaximumResolution()>oldLevel){zoomMap(1,latlng);}}
function zoomOut(latlng,doContinuousZoom){var oldLevel=mapStateMng.getZoom();var newCenterLatLng;var bounds;var centerPx;var latlngPx;var offsetX;var offsetY;var tileSize;var mapType;var proj;var zoom;if(mapStateMng.getCurrentMapType().getMinimumResolution()<oldLevel){if(latlng){bounds=mapStateMng.getBounds();if(bounds.containsLatLng(latlng)){zoom=mapStateMng.getZoom();mapType=mapStateMng.getCurrentMapType();proj=mapType.getProjection();tileSize=mapType.getTileSize();centerPx=mapStateMng.getCenterPixel();latlngPx=proj.fromLatLngToPixel(latlng,zoom,tileSize);offsetX=centerPx.x-latlngPx.x;offsetY=centerPx.y-latlngPx.y;centerPx.add(offsetX,offsetY);newCenterLatLng=proj.fromPixelToLatLng(centerPx,zoom,true,tileSize);}}
zoomMap(-1,newCenterLatLng);}}
function enableDoubleClickZoom(){if(!_listeners.dblclickzoom){_listeners.dblclickzoom=nmev.addDomListener(container,'dblclick',ondblclick);}
if(!_listeners.dblrightclickzoom){_listeners.dblrightclickzoom=nmev.addListener(map,'dblrightclick',ondblrightclick);}
if(!_listeners.onepointdoubletapzoom){_listeners.onepointdoubletapzoom=nmev.addDomListener(container,'touchstart',nmt.onePointDoubleTap(containeronepointdbltap));}
if(!_listeners.twopointdoubletapzoom){_listeners.twopointdoubletapzoom=nmev.addDomListener(container,'touchstart',nmt.twoPointDoubleTap(containertwopointdbltap));}
_dblClickZoomEnabled=true;}
function disableDoubleClickZoom(){if(_listeners.dblclickzoom){nmev.removeListener(_listeners.dblclickzoom);delete _listeners.dblclickzoom;}
if(_listeners.dblrightclickzoom){nmev.removeListener(_listeners.dblrightclickzoom);delete _listeners.dblrightclickzoom;}
if(_listeners.onepointdoubletapzoom){nmev.removeListener(_listeners.onepointdoubletapzoom);delete _listeners.onepointdoubletapzoom;}
if(_listeners.twopointdoubletapzoom){nmev.removeListener(_listeners.twopointdoubletapzoom);delete _listeners.twopointdoubletapzoom;}
_dblClickZoomEnabled=false;}
function doubleClickZoomEnabled(){return _dblClickZoomEnabled;}
function enableContinuousZoom(){_continuousZoomEnabled=true;}
function disableContinuousZoom(){_continuousZoomEnabled=false;}
function continuousZoomEnabled(){return _continuousZoomEnabled;}
function enableScrollWheelZoom(){if(!_listeners.scrollwheelzoom){nmev.addDomListener(container,'mousewheel',containermousewheel);}
_scrollZoomEnabled=true;}
function disableScrollWheelZoom(){if(_listeners.scrollwheelzoom){nmev.removeListener(_listeners.scrollwheelzoom);delete _listeners.scrollwheelzoom;}
_scrollZoomEnabled=false;}
function scrollWheelZoomEnabled(){return _scrollZoomEnabled;}
function enablePinchZoom(){if(!_listeners.containergestureend){_listeners.containergestureend=nmev.addDomListener(container,'gestureend',containergestureend);}
_pinchZoomEnabled=true;}
function disablePinchZoom(){if(_listeners.containergestureend){nmev.removeListener(_listeners.containergestureend);delete _listeners.containergestureend;}
_pinchZoomEnabled=false;}
function pinchToZoomEnabled(){return _pinchZoomEnabled;}
function ondblclick(e){var clickLatLng;var target;e=e||window.event;target=nmev.getTarget(e);if(target.isMap){clickLatLng=zoomLockToInputPosition(e,1);nmev.trigger(map,'dblclick',null,clickLatLng);}}
function ondblrightclick(overlay,latlng){zoomOut(latlng);}
function containermousewheel(e){var target;var mapType;var wheelDelta;e=e||window.event;target=nmev.getTarget(e);if(target&&nmd.isInput(target.nodeName)){return;}
mapType=map.getCurrentMapType();wheelDelta=nmev.normalizeWheelDelta(e);zoomLockToInputPosition(e,wheelDelta,true,true);nmev.stopBubbling(e);return nmev.preventDefault(e);}
function containergestureend(e){if(e.scale>1){map.zoomIn();}
else if(e.scale<1){map.zoomOut();}}
function containeronepointdbltap(e){var touch=e.touches[0];var tapLatLng=zoomLockToInputPosition(touch,1);return nmev.preventDefault(e);}
function containertwopointdbltap(e){var touch=e.touches[1];var tapLatLng=zoomLockToInputPosition(touch,-1);return nmev.preventDefault(e);}
enableDoubleClickZoom();enablePinchZoom();this.enableDoubleClickZoom=enableDoubleClickZoom;this.disableDoubleClickZoom=disableDoubleClickZoom;this.doubleClickZoomEnabled=doubleClickZoomEnabled;this.enableContinuousZoom=enableContinuousZoom;this.disableContinuousZoom=disableContinuousZoom;this.continuousZoomEnabled=disableContinuousZoom;this.enableScrollWheelZoom=enableScrollWheelZoom;this.disableScrollWheelZoom=disableScrollWheelZoom;this.scrollWheelZoomEnabled=scrollWheelZoomEnabled;this.enablePinchZoom=enablePinchZoom;this.disablePinchZoom=disablePinchZoom;this.pinchToZoomEnabled=pinchToZoomEnabled;this.setZoom=setZoom;this.zoomIn=zoomIn;this.zoomOut=zoomOut;}
function MapStateManager(map,mapTypes,container,tileContainer,historyContainer,sizeMng,sessionMng,tileHistoryMng,ctrlMng){var _that=this;var _tileInfoMng=new TileInfoManager(map,_that);var _zoom=0;var _prevZoom=_zoom;var _isLoaded=false;var _timers={};var _mapTypes=[];var _showingDate=null;var _tileDate;var _currentMapType;var _currentMapTypeContainer;var _centerLatLng;var _wrapYDivPx;function isMapTypeRegistered(type){for(var i=_mapTypes.length;i--;){if(_mapTypes[i]===type){return true;}}
return false;}
function registerMapTypes(){_mapTypes=mapTypes.slice();}
function tilesAvailable(latlng,zoom,tileDate,mapType,getTileInfo,downloadTiles){createMapType(latlng,zoom,tileDate,mapType,getTileInfo,downloadTiles);savePosition();if(!_isLoaded){addDefaultControls(map);_isLoaded=true;nmev.trigger(map,'load');}}
function checkBaseLayerLoaded(layerContainer){var allReturned=false;var numTiles=layerContainer.childNodes.length;if(layerContainer.tilesReturned>=numTiles){allReturned=true;if(layerContainer.tilesLoaded>=numTiles){layerContainer.tilesLoaded=numTiles;if(layerContainer.parentNode){tileHistoryMng.clearHistory();}}}
return allReturned;}
function createBackFillTile(origPoint,origZoom,lastZoom,tileDate,mapType,getTileUrl){var zoom=lastZoom-1;var scale;var point;var key;var tScale;var tileSize;var stretchTileSize;var scaledTileSize;var position;var tile;var divOffset;var size;var vCenter;var proj;var centerPx;var heading;var dateHistory;if(zoom>=0){scale=Math.pow(2,origZoom-zoom);point={x:Math.floor(origPoint.x/scale),y:Math.floor(origPoint.y/scale)};key=tileHistoryMng.getHistoryKey(point,zoom);dateHistory=tileHistoryMng.getHistory().getValue(key);if(!dateHistory||!dateHistory.exists(nml.DateHelper.toNearmapDateUTC(tileDate))){size=sizeMng.getSize();vCenter={x:Math.floor(size.width/2),y:Math.floor(size.height/2)};tScale=mapType.getTileScale();tileSize=mapType.getTileSize();stretchTileSize=tileSize*scale;scaledTileSize=new nmm.Size(stretchTileSize*tScale.x,stretchTileSize*tScale.y);divOffset=nmd.topLeft(tileContainer);heading=mapType.getHeading();proj=mapType.getProjection();centerPx=proj.fromLatLngToPixel(getCenter(),origZoom,tileSize);position=getDivOffsetAtRelativeScale(point,centerPx,stretchTileSize,tScale,heading,divOffset,vCenter);tile=nmm.TileLayer.createTile(point,point,zoom,tileDate,scaledTileSize,position,onbackfilltileload,onbackfilltileerror(origPoint,origZoom,tileDate,mapType,getTileUrl));if(nmm.debug){tile.style.borderColor='lime';}
tileHistoryMng.appendHistory(tile,mapType,true);tile.src=getTileUrl(point,zoom,tileDate);}}}
function onbackfilltileload(e){this.style.visibility='visible';tileHistoryMng.processLoadedTile(this);}
function onbackfilltileerror(origPoint,origZoom,tileDate,mapType,getTileUrl){return function(e){this.style.visibility='hidden';createBackFillTile(origPoint,origZoom,this.zoom,this.date,mapType,getTileUrl);tileHistoryMng.remove(tileHistoryMng.getHistoryKey(this.wrappedPoint,this.zoom),this.date);};}
function ontileload(e){var cnt=this.parentNode;var loadHandler;var processLoadedTimeout=100;var src;if(!cnt||!this.src||this.src===nmm.DUMMY_TILE||(this.src===nmm.TRANSPARENT_GIF&&!this.replaceTransparent)){this.style.visibility='hidden';return;}
if(!this.replaceTransparent){this.style.visibility='visible';}
if(cnt.layerIndex===0&&!this.returned){cnt.tilesLoaded++;cnt.tilesReturned++;checkBaseLayerLoaded(cnt);tileHistoryMng.processLoadedTile(this);}
this.returned=true;if(this.replaceTransparent){src=this.src;loadHandler=this.onload;this.onload=null;this.src=nmm.TRANSPARENT_GIF;this.style.visibility='visible';nms.applyPngAlphaBg(this,src,true);window.setTimeout(function(tile,loadHandler){return function(){tile.onload=loadHandler;};}(this,loadHandler),0);}}
function ontileerror(mapType,getTileUrl){return function(e){var cnt=this.parentNode;this.style.visibility='hidden';if(!cnt){return;}
this.errored=true;if(cnt.layerIndex===0&&!this.returned){cnt.tilesReturned++;checkBaseLayerLoaded(cnt);}
this.returned=true;createBackFillTile(this.wrappedPoint,this.zoom,this.zoom,this.date,mapType,getTileUrl);};}
function getPreciseTileSizeAtRelativeScale(origSize,origZoom,newZoom){var baseZoom=Math.floor(newZoom);var baseZx=baseZoom-origZoom;var baseScale=Math.pow(2,baseZx);var baseTSize=origSize*baseScale;var ceilTSize=baseTSize*2;var fraction=newZoom%1;return baseTSize+((ceilTSize-baseTSize)*fraction);}
function getTileSizeAtRelativeScale(origSize,origZoom,newZoom){return Math.floor(getPreciseTileSizeAtRelativeScale(origSize,origZoom,newZoom));}
function getDivOffsetAtRelativeScale(point,centerPx,newTileSize,tileScale,heading,tileContainerOffset,vCenter){var wrapWidth;var centerOffset;var tilePx;var midPoint;var nwTileOffset;tilePx={x:point.x*newTileSize,y:point.y*newTileSize};midPoint=Math.floor(newTileSize/2);nwTileOffset=nmlm.rotatePoint(heading,nmm.Point.ORIGIN,new nmm.Point(midPoint,midPoint));centerOffset=new nmm.Point(Math.floor((tilePx.x-centerPx.x+nwTileOffset.x)),Math.floor((tilePx.y-centerPx.y+nwTileOffset.y)));centerOffset=nmlm.rotatePoint(-heading,centerOffset,nmm.Point.ORIGIN,Math.round);centerOffset.x*=tileScale.x;centerOffset.y*=tileScale.y;centerOffset.x=Math.floor(centerOffset.x+vCenter.x);centerOffset.y=Math.floor(centerOffset.y+vCenter.y);return new nmm.Point(centerOffset.x-tileContainerOffset.x,centerOffset.y-tileContainerOffset.y);}
function createMapType(centerLatLng,zoom,tileDate,mapType,retrieveTileInfo,downloadTiles){var dmns;var centerPx;var cnrOffset;var tlCnrOffset;var divOffset;var cntTopLeftPx;var proj;var sclTSize;var tSize;var tScale;var centerTile;var topLeftTile;var bufTlPx;var layerContainer;var mapTypeContainer;var tlen;var tLayers;var layer;var size;var unscaledNthCPx;var scaledNthTlTile;var scaledNthTlPx;var nthPxOffset;var squareMidPoint;var midPoint;var rtPxOffset;var rtScaledNthPx;var vCenter;var wrapYMin;var offsetLeft;var offsetTop;var rotatedCornerOffset;var heading=mapType.getHeading();dmns=sizeMng.getBufferedDimensions(mapType);cnrOffset=new nmm.Point(Math.ceil(dmns.width/2)-1,Math.ceil(dmns.height/2)-1);rotatedCornerOffset=nmlm.rotatePoint(heading,cnrOffset,nmm.Point.ORIGIN,Math.round);tLayers=mapType.getTileLayers();tlen=tLayers.length;size=sizeMng.getSize(true);proj=mapType.getProjection();sclTSize=mapType.getScaledTileSize();tSize=mapType.getTileSize();tScale=mapType.getTileScale();centerLatLng=centerLatLng.copy(false);centerPx=proj.fromLatLngToPixel(centerLatLng,zoom,sclTSize);centerTile=new nmm.Point(Math.floor(centerPx.x/sclTSize.width),Math.floor(centerPx.y/sclTSize.height));topLeftTile=new nmm.Point(centerTile.x-rotatedCornerOffset.x,centerTile.y-rotatedCornerOffset.y);unscaledNthCPx=proj.fromLatLngToPixel(centerLatLng,zoom,tSize);scaledNthTlTile=new nmm.Point(centerTile.x-cnrOffset.x,centerTile.y-cnrOffset.y);scaledNthTlPx=new nmm.Point(scaledNthTlTile.x*sclTSize.width,scaledNthTlTile.y*sclTSize.height);nthPxOffset=new nmm.Point(unscaledNthCPx.x%tSize,unscaledNthCPx.y%tSize);squareMidPoint=Math.floor(tSize/2);midPoint=new nmm.Point(squareMidPoint,squareMidPoint);rtPxOffset=nmlm.rotatePoint(-heading,nthPxOffset,midPoint);rtScaledNthPx=new nmm.Point(Math.floor(((centerTile.x*tSize)+rtPxOffset.x)*tScale.x),Math.floor(((centerTile.y*tSize)+rtPxOffset.y)*tScale.y));vCenter=new nmm.Point(Math.floor(size.width/2),Math.floor(size.height/2));divOffset=new nmm.Point(scaledNthTlPx.x-rtScaledNthPx.x+vCenter.x,scaledNthTlPx.y-rtScaledNthPx.y+vCenter.y);offsetLeft=parseInt(tileContainer.style.left,10);offsetTop=parseInt(tileContainer.style.top,10);if(_currentMapType){divOffset.x-=offsetLeft;divOffset.y-=offsetTop;}
wrapYMin=(Math.floor(size.height/2)-centerPx.y)-offsetTop;_wrapYDivPx={min:wrapYMin,max:wrapYMin+proj.getWrapHeight(zoom,sclTSize.height)};_currentMapType=mapType;mapTypeContainer=document.createElement('div');nms.css(mapTypeContainer,{'position':'absolute','top':'0px','left':'0px'},true);tileContainer.appendChild(mapTypeContainer);_currentMapTypeContainer=mapTypeContainer;for(var lcnt=0;lcnt<tlen;lcnt++){layer=tLayers[lcnt];layerContainer=layer.initialize(zoom,tileDate,topLeftTile,dmns,divOffset,proj,{heading:heading,tileSize:sclTSize,tileLoadHandler:ontileload,tileErrorHandler:ontileerror(mapType,layer.getTileUrl),layerIndex:lcnt,downloadTiles:downloadTiles||downloadTilesOutwardStaircase});mapTypeContainer.appendChild(layerContainer);if(lcnt===0&&retrieveTileInfo){_tileInfoMng.get(centerTile,zoom,[layer.getMetaKey()]);}}}
function loadBatchTiles(tilesToLoad,tileCheckRange,getTileUrl,isPng,opacity,timers,timerKey){return function(){var tile;var tileUrl;for(var i=tilesToLoad.length;i--;){tile=tilesToLoad[i];if(tileCheckRange(tile.point,tile.zoom)){tileUrl=getTileUrl(tile.wrappedPoint,tile.zoom,tile.date);if(isPng&&opacity<1){nms.replaceIEPngTile(tile);}
tile.src=tileUrl;}
else{tile.src=nmm.WRAP_TILE;}}
delete timers[timerKey];};}
function downloadTilesOutwardStaircase(tileSet,downloadTimers,height,width,divOffset,tileSize,tileCheckRange,getTileUrl,isPng,opacity){var tilesToLoad;var tileToLoadTimers=0;var maxTilesToLoad=5;var timerOffset=50;var size=sizeMng.getSize();var vCenter=new nmm.Point(size.width/2,size.height/2);var offsetLeft;var offsetTop;var divOffsetCenterPx;var centerTile;var spiralRows;var spiralCols;var maxSteps;var minRow;var minCol;var maxRow;var maxCol;offsetLeft=parseInt(tileContainer.style.left,10);offsetTop=parseInt(tileContainer.style.top,10);divOffsetCenterPx=new nmm.Point(vCenter.x-divOffset.x-offsetLeft,vCenter.y-divOffset.y-offsetTop);centerTile=new nmm.Point(Math.floor(divOffsetCenterPx.x/tileSize.width),Math.floor(divOffsetCenterPx.y/tileSize.height));spiralRows=Math.floor(height/2)+1;spiralCols=Math.floor(width/2)+1;maxSteps=(spiralRows>spiralCols?spiralRows:spiralCols);for(var i=0;i<maxSteps;i++){tilesToLoad=[];minRow=centerTile.y-i;maxRow=centerTile.y+i;minCol=centerTile.x-i;maxCol=centerTile.x+i;for(var c=minCol;c<=maxCol;c++){if(c>=0&&c<width){if(minRow>=0){tilesToLoad.push(tileSet[minRow][c]);}
if(minRow!==maxRow&&maxRow<height){tilesToLoad.push(tileSet[maxRow][c]);}
if(tilesToLoad.length>=maxTilesToLoad){downloadTimers[tileToLoadTimers]=window.setTimeout(loadBatchTiles(tilesToLoad,tileCheckRange,getTileUrl,isPng,opacity,downloadTimers,tileToLoadTimers),timerOffset*tileToLoadTimers);tilesToLoad=[];tileToLoadTimers++;}}}
for(var r=minRow+1;r<maxRow;r++){if(r>=0&&r<height){if(minCol>=0){tilesToLoad.push(tileSet[r][minCol]);}
if(minCol!==maxCol&&maxCol<width){tilesToLoad.push(tileSet[r][maxCol]);}
if(tilesToLoad.length>=maxTilesToLoad){downloadTimers[tileToLoadTimers]=window.setTimeout(loadBatchTiles(tilesToLoad,tileCheckRange,getTileUrl,isPng,opacity,downloadTimers,tileToLoadTimers),timerOffset*tileToLoadTimers);tilesToLoad=[];tileToLoadTimers++;}}}
if(tilesToLoad.length>0){downloadTimers[tileToLoadTimers]=window.setTimeout(loadBatchTiles(tilesToLoad,tileCheckRange,getTileUrl,isPng,opacity,downloadTimers,tileToLoadTimers),timerOffset*tileToLoadTimers);tilesToLoad=[];tileToLoadTimers++;}}
tilesToLoad=null;}
function getZoom(){return _zoom;}
function getCenter(unbounded){return unbounded?_centerLatLng:_centerLatLng.copy();}
function getCenterPixel(unbounded){var mapType=getCurrentMapType();var proj=mapType.getProjection();var tileSize=mapType.getTileSize();var zoom=getZoom();return proj.fromLatLngToPixel(getCenter(unbounded),zoom,tileSize);}
function getScaledCenterPixel(unbounded){var centerPx=getCenterPixel(unbounded);var mapType=getCurrentMapType();var tScale=mapType.getTileScale();centerPx.x=Math.floor(centerPx.x*tScale.x);centerPx.y=Math.floor(centerPx.y*tScale.y);return centerPx;}
function getCenterTile(unbounded){var px=getCenterPixel(unbounded);var mapType=getCurrentMapType();var tileSize=mapType.getTileSize();return new nmm.Point(Math.floor(px.x/tileSize),Math.floor(px.y/tileSize));}
function getTileDate(){return _tileDate;}
function getShowingDate(){return _showingDate;}
function getMapTypes(){return _mapTypes;}
function getCurrentMapType(){return _currentMapType;}
function getBounds(){var size=sizeMng.getSize(true);var proj=_currentMapType.getProjection();var tScale=_currentMapType.getTileScale();var tSize=_currentMapType.getTileSize();var zoom=getZoom();var heading=_currentMapType.getHeading();var centerPx;var pxsw,pxse;var sw,se;var vCenter;var sclVCenter;var maxPx;vCenter=new nmm.Point(Math.floor(size.width/2),Math.floor(size.height/2));centerPx=proj.fromLatLngToPixel(getCenter(),zoom,tSize);maxPx=new nmm.Point(proj.getWrapWidth(zoom,tSize),proj.getWrapHeight(zoom,tSize));sclVCenter=new nmm.Point(Math.floor(vCenter.x/tScale.x),Math.floor(vCenter.y/tScale.y));sclVCenter=nmlm.rotatePoint(-heading,sclVCenter,nmm.Point.ORIGIN);sclVCenter.x=Math.abs(sclVCenter.x);sclVCenter.y=Math.abs(sclVCenter.y);pxsw=new nmm.Point(centerPx.x-sclVCenter.x,centerPx.y+sclVCenter.y);pxne=new nmm.Point(centerPx.x+sclVCenter.x,centerPx.y-sclVCenter.y);if(pxne.y<0){pxne.y=0;}
if(pxsw.y>=maxPx.y){pxsw.y=maxPx.y-1;}
sw=proj.fromPixelToLatLng(pxsw,zoom,false,tSize);ne=proj.fromPixelToLatLng(pxne,zoom,false,tSize);if(pxne.x-pxsw.x>=maxPx.x){sw=new nmm.LatLng(sw.lat(),-180);ne=new nmm.LatLng(ne.lat(),180);}
return new nmm.LatLngBounds(sw,ne);}
function getBoundsZoomLevel(bounds,size,minZoom){var ne=bounds.getNorthEast();var sw=bounds.getSouthWest();var proj=_currentMapType.getProjection();var zoom=(minZoom===undefined||minZoom<1?1:minZoom);var sclTSize=_currentMapType.getScaledTileSize();var nePx=proj.fromLatLngToPixel(ne,zoom,sclTSize);var swPx=proj.fromLatLngToPixel(sw,zoom,sclTSize);if(!size){size=sizeMng.getSize(true);}
if(nePx.x-swPx.x<size.width&&swPx.y-nePx.y<size.height){return this.getBoundsZoomLevel(bounds,size,zoom+1);}
else{return zoom-1;}}
function savePosition(){nmh.MapCookie.setZoom(getZoom());nmh.MapCookie.setLatLng(getCenter());nmh.MapCookie.setMapType(getCurrentMapType());nmh.MapCookie.setTileDate(getTileDate());nmh.MapCookie.save();}
function returnToSavedPosition(){setCenter(nmh.MapCookie.getLatLng(),nmh.MapCookie.getZoom());}
function setCenter(latlng,zoom,mapType,date,getTileInfo,forceOldRemove,downloadTiles){var oldMapType=getCurrentMapType();var session=nmh.TileSession.get();var oldDate=_tileDate;var location=_currentMapType?getCenter():null;var tileSets;if(_timers.cleanHistory){window.clearTimeout(_timers.cleanHistory);}
if(!mapType&&_mapTypes.length>0){mapType=_mapTypes[0];}
if(!isMapTypeRegistered(mapType)){throw new Error('You must register the map type before performing actions on it.');}
if(arguments.length<5){getTileInfo=true;}
if(_isLoaded){tileSets=oldMapType.getVisibleTileSets();oldMapType.clearTileLayerTileSets();tileHistoryMng.addTileSetHistory(_currentMapType,_currentMapTypeContainer,tileSets);}
if(forceOldRemove){tileHistoryMng.clearHistory();}
_zoom=zoom;_prevZoom=_zoom;_tileDate=date&&date instanceof Date?date:null;_centerLatLng=latlng;sessionMng.processSession();tilesAvailable(latlng,zoom,date,mapType,getTileInfo,downloadTiles);if(oldMapType!==mapType){if(oldMapType){nmev.trigger(map,'maptypechanged');}}
if((_tileDate&&!oldDate)||(!_tileDate&&oldDate)||(oldDate&&_tileDate&&oldDate.getTime()-_tileDate.getTime()!==0)){nmev.trigger(map,'tiledatechanged',oldDate,_tileDate);}
nmev.trigger(map,'setcenter',location,latlng);}
function setMapType(type){if(_currentMapType===type){return;}
if(!isMapTypeRegistered(type)){throw new Error('You can only set a map type that is known to the map. Use addMapType() to register the map type');}
nml.abortDownloads();setCenter(getCenter(),getZoom(),type,getTileDate());}
function setTileDate(newDate){var oldDate=getTileDate();if((newDate&&!oldDate)||(!newDate&&oldDate)||(newDate&&oldDate&&oldDate.getTime()-newDate.getTime()!==0)){nml.abortDownloads();setCenter(getCenter(),getZoom(),getCurrentMapType(),newDate,false);}}
function addMapType(type){if(!isMapTypeRegistered(type)){_mapTypes.push(type);nmev.trigger(map,'addmaptype',type);}}
function removeMapType(type){var i=nml.ArrayHelper.indexOf(_mapTypes,type);if(i>=0){_mapTypes.splice(i,1);nmev.trigger(map,'removemaptype',type);}}
function isLoaded(){return _isLoaded;}
function updateZoom(zoom){_zoom=zoom;}
function updateCenterLatLng(latlng){_centerLatLng=latlng;}
function fromContainerPixelToLatLng(pixel){var proj=_currentMapType.getProjection();var tSize=_currentMapType.getTileSize();var tScale=_currentMapType.getTileScale();var zoom=getZoom();var size=sizeMng.getSize();var vCenter;var centerPx;var pointPx;var centerOffset;var pixelLatLng;vCenter=new nmm.Point(Math.floor(size.width/2),Math.floor(size.height/2));centerOffset=new nmm.Point(Math.floor((pixel.x-vCenter.x)/tScale.x),Math.floor((pixel.y-vCenter.y)/tScale.y));centerOffset=nmlm.rotatePoint(_currentMapType.getHeading(),centerOffset,nmm.Point.ORIGIN);centerPx=proj.fromLatLngToPixel(getCenter(),zoom,tSize);pointPx=centerPx.copy();pointPx.add(centerOffset.x,centerOffset.y);pixelLatLng=proj.fromPixelToLatLng(pointPx,zoom,false,tSize);return pixelLatLng;}
function fromLatLngToContainerPixel(latlng){var divPx=fromLatLngToDivPixel(latlng);var offset=nmd.topLeft(tileContainer);divPx.add(offset.x,offset.y);return divPx;}
function fromLatLngToDivPixel(latlng){var mapType=getCurrentMapType();var proj=mapType.getProjection();var tSize=mapType.getTileSize();var sclTSize=mapType.getScaledTileSize();var tScale=mapType.getTileScale();var zoom=getZoom();var worldPx=proj.fromLatLngToPixel(latlng,zoom,tSize);var centerPx=proj.fromLatLngToPixel(getCenter(),zoom,tSize);var divOffset=nmd.topLeft(tileContainer);var size=sizeMng.getSize(true);var vCenter=new nmm.Point(Math.floor(size.width/2),Math.floor(size.height/2));var centerDivOffset=new nmm.Point(vCenter.x-divOffset.x,vCenter.y-divOffset.y);var nthCenterOffset=new nmm.Point(centerPx.x-worldPx.x,centerPx.y-worldPx.y);var rotatedCenterOffset;var wrapWidth=proj.getWrapWidth(zoom,sclTSize.width);var wrapHeight=proj.getWrapWidth(zoom,sclTSize.height);rotatedCenterOffset=nmlm.rotatePoint(-_currentMapType.getHeading(),nthCenterOffset,nmm.Point.ORIGIN);rotatedCenterOffset.x=Math.floor(rotatedCenterOffset.x*tScale.x);rotatedCenterOffset.y=Math.floor(rotatedCenterOffset.y*tScale.y);divPx=new nmm.Point(centerDivOffset.x-rotatedCenterOffset.x,centerDivOffset.y-rotatedCenterOffset.y);if(divPx.x>wrapWidth&&divPx.x+divOffset.x>size.width){divPx.x-=wrapWidth;}
if(divPx.y<_wrapYDivPx.min){divPx.y+=(Math.ceil((_wrapYDivPx.min-divPx.y)/wrapHeight)*wrapHeight);}
if(divPx.y>_wrapYDivPx.max){divPx.y-=(Math.ceil((divPx.y-_wrapYDivPx.max)/wrapHeight)*wrapHeight);}
return divPx;}
function fromDivPixelToLatLng(pixel){}
function checkResize(){var size=sizeMng.getSize(false);var resizeOffset=sizeMng.getResizeOffset(size);var centerPx;var mapType;var proj;var tSize;var tScale;var offset;var heading;var centerLatLng;if(resizeOffset.x!==0||resizeOffset.y!==0){mapType=getCurrentMapType();proj=mapType.getProjection();zoom=getZoom();tScale=mapType.getTileScale();tSize=mapType.getTileSize();heading=mapType.getHeading();offset={x:Math.round(resizeOffset.x/2/tScale.x),y:Math.round(resizeOffset.y/2/tScale.y)};offset=nmlm.rotatePoint(heading,offset,nmm.Point.ORIGIN,Math.round);centerPx=proj.fromLatLngToPixel(getCenter(),zoom,tSize);centerPx.add(offset.x,offset.y);centerLatLng=proj.fromPixelToLatLng(centerPx,zoom,false,tSize);ctrlMng.hideCenteredControls();nmev.trigger(map,'resizestart');if(nmm.debug){showCenterPoint(map);}
setCenter(centerLatLng,zoom,mapType,getTileDate());ctrlMng.repositionCenteredControls();nmev.trigger(map,'resizeend');}}
function getTileInfoManager(){return _tileInfoMng;}
function updateShowingDate(oldDates,newDates){var oldShowingDate=_showingDate;var newShowingDate=null;var showingChanged=false;var len=newDates.length;var currentMs;var surveyDate;var surveyDateMs;var i;if(len>0){if(!_tileDate){newShowingDate=newDates[len-1];}
else{currentMs=_tileDate.getTime();i=len-1;while(i>=0&&!showingChanged){surveyDate=newDates[i];surveyDateMs=surveyDate.getTime();if(currentMs===surveyDateMs){newShowingDate=surveyDate;showingChanged=true;}
else if(currentMs>surveyDateMs){newShowingDate=surveyDate;showingChanged=true;}
i--;}}}
_showingDate=newShowingDate;if((_showingDate&&oldShowingDate&&_showingDate.getTime()!==oldShowingDate.getTime())||(!_showingDate&&oldShowingDate)||(_showingDate&&!oldShowingDate)){nmev.trigger(map,'showingdatechanged',oldShowingDate,_showingDate);}}
function updateShowingDateOnTileDateChanged(){updateShowingDate(null,_tileInfoMng.getAvailableMapTypeTileDates());}
this.getCurrentMapType=getCurrentMapType;this.getMapTypes=getMapTypes;this.setMapType=setMapType;this.addMapType=addMapType;this.removeMapType=removeMapType;this.getAvailableMapTypeTileDates=_tileInfoMng.getAvailableMapTypeTileDates;this.getZoom=getZoom;this.getCenter=getCenter;this.getCenterPixel=getCenterPixel;this.getScaledCenterPixel=getScaledCenterPixel;this.getCenterTile=getCenterTile;this.getTileDate=getTileDate;this.getShowingDate=getShowingDate;this.getBounds=getBounds;this.getBoundsZoomLevel=getBoundsZoomLevel;this.savePosition=savePosition;this.returnToSavedPosition=returnToSavedPosition;this.setCenter=setCenter;this.setTileDate=setTileDate;this.isLoaded=isLoaded;this.updateZoom=updateZoom;this.updateCenterLatLng=updateCenterLatLng;this.fromContainerPixelToLatLng=fromContainerPixelToLatLng;this.fromLatLngToContainerPixel=fromLatLngToContainerPixel;this.fromDivPixelToLatLng=fromDivPixelToLatLng;this.fromLatLngToDivPixel=fromLatLngToDivPixel;this.getPreciseTileSizeAtRelativeScale=getPreciseTileSizeAtRelativeScale;this.getTileSizeAtRelativeScale=getTileSizeAtRelativeScale;this.getDivOffsetAtRelativeScale=getDivOffsetAtRelativeScale;this.checkResize=checkResize;this.loadBatchTiles=loadBatchTiles;this.getTileInfoManager=getTileInfoManager;registerMapTypes();nmev.addListener(map,'maptypetiledatesupdated',updateShowingDate);nmev.addListener(map,'tiledatechanged',updateShowingDateOnTileDateChanged);}
function MapEventManager(map,container,mapStateMng){var _that=this;var _dragCnt=0;var _panSpeed=50;var _listeners={};var _timers={};function showContextMenu(elm){var nodeName=elm.nodeName.toLowerCase();if(nodeName==='textarea'||(nodeName==='input'&&elm.type==='text')||(nodeName==='a'&&elm.href)){return true;}
else if(nodeName==='body'||nodeName==='html'){return false;}
else{return showContextMenu(elm.parentNode);}}
function oncontextmenu(e){var dblclickTimeout=250;var target;var clickPoint;var latlng;e=e||window.event;target=nmev.getTarget(e);if(target.isMap){clickPoint=new nmm.Point(e.clientX-container.offsetLeft,e.clientY-container.offsetTop);if(!_timers.singlerightclick){_timers.singlerightclick=window.setTimeout(function(clickPoint,target){return function(){delete _timers.singlerightclick;nmev.trigger(map,'singlerightclick',clickPoint,target,null);};}(clickPoint,target),dblclickTimeout);}
else{window.clearTimeout(_timers.singlerightclick);delete _timers.singlerightclick;clickPoint=new nmm.Point(e.clientX-container.offsetLeft,e.clientY-container.offsetTop);latlng=mapStateMng.fromContainerPixelToLatLng(clickPoint);nmev.trigger(map,'dblrightclick',null,latlng);}
return false;}
return showContextMenu(target);}
function containermouseover(e){nmev.trigger(map,'mouseover');}
function containermouseout(e){}
function containermousedown(e){var target;e=e||window.event;if(nmev.getMouseButton(e)===nmev.MouseButton.LEFT_BUTTON){target=nmev.getTarget(e);if(target.isMap){container.mouseDownX=e.clientX;container.mouseDownY=e.clientY;}}}
function containermouseup(e){var latlng;var containerPx;var target;e=e||window.event;target=nmev.getTarget(e);if(container.mouseDownX===e.clientX||container.mouseDownY===e.clientY){containerPx={x:e.clientX-container.offsetLeft,y:e.clientY-container.offsetTop};latlng=mapStateMng.fromContainerPixelToLatLng(containerPx);nmev.trigger(map,'click',null,latlng,null);}
container.mouseDownX=null;container.mouseDownY=null;}
nmev.addDomListener(window,'resize',mapStateMng.checkResize);container.oncontextmenu=oncontextmenu;nmev.addDomListener(container,'mouseover',containermouseover);nmev.addDomListener(container,'mouseout',containermouseout);nmev.addDomListener(container,'mousedown',containermousedown);nmev.addDomListener(container,'mouseup',containermouseup);}
function MapManager(map,container,opts){var _nearmapBarEnabled=false;var _tileContainer;var _zoomLockControl;var _uiMng;var _sizeMng;var _zoomMng;var _panMng;var _controlMng;var _overlayMng;var _infoWindowMng;var _tileHistoryMng;var _splashMng;var _sessionMng;var _mapStateMng;var _mapEventMng;opts=nmo.Synchronize.fill(opts,nmm.MapOptions);_zoomLockControl=new ZoomLockControl();_controlMng=new ControlManager(map);_uiMng=new UIManager(map,container,opts.backgroundColor,opts.size,_controlMng);_tileContainer=_uiMng.getTileContainer();_sizeMng=new SizeManager(container);_tileHistoryMng=new TileHistoryManager(container,_tileContainer,_uiMng.getHistoryContainer(),_uiMng.getGarbageContainer(),_sizeMng);_splashMng=new SplashManager(container);_sessionMng=new SessionManager(container,_splashMng);_mapStateMng=new MapStateManager(map,opts.mapTypes,container,_tileContainer,_uiMng.getHistoryContainer(),_sizeMng,_sessionMng,_tileHistoryMng,_controlMng);_overlayMng=new OverlayManager(map);_infoWindowMng=new InfoWindowManager(map,_overlayMng);_panMng=new PanManager(map,container,_tileContainer,_mapStateMng,_sizeMng,_sessionMng);_zoomMng=new ZoomManager(map,container,_tileContainer,_zoomLockControl,_mapStateMng,_sizeMng,_tileHistoryMng,_panMng,_uiMng);_mapEventMng=new MapEventManager(map,container,_mapStateMng);map.getContainer=_uiMng.getContainer;map.getTileContainer=_uiMng.getTileContainer;map.getBackfillContainer=_uiMng.getBackfillContainer;map.getPane=_uiMng.getPane;map.enableDragging=_panMng.enableDragging;map.disableDragging=_panMng.disableDragging;map.draggingEnabled=_panMng.draggingEnabled;map.enableDoubleClickZoom=_zoomMng.enableDoubleClickZoom;map.disableDoubleClickZoom=_zoomMng.disableDoubleClickZoom;map.doubleClickZoomEnabled=_zoomMng.doubleClickZoomEnabled;map.enableContinuousZoom=_zoomMng.enableContinuousZoom;map.disableContinuousZoom=_zoomMng.disableContinuousZoom;map.continuousZoomEnabled=_zoomMng.disableContinuousZoom;map.enableScrollWheelZoom=_zoomMng.enableScrollWheelZoom;map.disableScrollWheelZoom=_zoomMng.disableScrollWheelZoom;map.scrollWheelZoomEnabled=_zoomMng.scrollWheelZoomEnabled;map.enablePinchZoom=_zoomMng.enablePinchZoom;map.disablePinchZoom=_zoomMng.disablePinchZoom;map.pinchToZoomEnabled=_zoomMng.pinchToZoomEnabled;map.enableInfoWindow=_infoWindowMng.enableInfoWindow;map.disableInfoWindow=_infoWindowMng.disableInfoWindow;map.infoWindowEnabled=_infoWindowMng.infoWindowEnabled;map.getMapTypes=_mapStateMng.getMapTypes;map.getCurrentMapType=_mapStateMng.getCurrentMapType;map.setMapType=_mapStateMng.setMapType;map.addMapType=_mapStateMng.addMapType;map.removeMapType=_mapStateMng.removeMapType;map.getAvailableMapTypeTileDates=_mapStateMng.getAvailableMapTypeTileDates;map.getSize=_sizeMng.getSize;map.getZoom=_mapStateMng.getZoom;map.getTileDate=_mapStateMng.getTileDate;map.getShowingDate=_mapStateMng.getShowingDate;map.getCenter=_mapStateMng.getCenter;map.getBounds=_mapStateMng.getBounds;map.getBoundsZoomLevel=_mapStateMng.getBoundsZoomLevel;map.setCenter=_mapStateMng.setCenter;map.setTileDate=_mapStateMng.setTileDate;map.setZoom=_zoomMng.setZoom;map.zoomIn=_zoomMng.zoomIn;map.zoomOut=_zoomMng.zoomOut;map.panTo=_panMng.panTo;map.panBy=_panMng.panBy;map.panDirection=_panMng.panDirection;map.fromContainerPixelToLatLng=_mapStateMng.fromContainerPixelToLatLng;map.fromLatLngToContainerPixel=_mapStateMng.fromLatLngToContainerPixel;map.fromLatLngToDivPixel=_mapStateMng.fromLatLngToDivPixel;map.fromDivPixelToLatLng=_mapStateMng.fromDivPixelToLatLng;map.addControl=_controlMng.addControl;map.removeControl=_controlMng.removeControl;map.hideCenteredControls=_controlMng.hideCenteredControls;map.repositionCenteredControls=_controlMng.repositionCenteredControls;map.addOverlay=_overlayMng.addOverlay;map.removeOverlay=_overlayMng.removeOverlay;map.clearOverlays=_overlayMng.clearOverlays;map.openInfoWindow=_infoWindowMng.openInfoWindow;map.openInfoWindowHtml=_infoWindowMng.openInfoWindowHtml;map.openInfoWindowTabs=_infoWindowMng.openInfoWindowTabs;map.openInfoWindowTabsHtml=_infoWindowMng.openInfoWindowTabsHtml;map.showMapBlowup=_infoWindowMng.showMapBlowup;map.updateInfoWindow=_infoWindowMng.updateInfoWindow;map.updateCurrentTab=_infoWindowMng.updateCurrentTab;map.closeInfoWindow=_infoWindowMng.closeInfoWindow;map.getInfoWindow=_infoWindowMng.getInfoWindow;map.processSession=_sessionMng.processSession;map.getDefaultUI=_uiMng.getDefaultUI;map.setUI=_uiMng.setUI;map.setUIToDefault=_uiMng.setUIToDefault;map.addControl(_zoomLockControl);nmev.addListener(map,'zoomstart',_overlayMng.hideMarkerPane);nmev.addListener(map,'zoomend',_overlayMng.showMarkerPane);}
var MapOptions={size:null,mapTypes:nmm.MapType.DEFAULT_MAP_TYPES,draggableCursor:'pointer',draggingCursor:'pointer',nearmapBarOptions:nmm.NearMapBarOptions,backgroundColor:'#ccc'};function Map2(container,opts){var _mapMng=new MapManager(this,container,opts);var _nearmapBarEnabled=false;function enableNearmapBar(){_nearmapBarEnabled=true;}
function disableNearmapBar(){_nearmapBarEnabled=false;}
this.getDragObject=function(){};this.getEarthInstance=function(callback){};this.enableNearmapBar=enableNearmapBar;this.disableNearmapBar=disableNearmapBar;}
Map2.prototype.generatePermalink=function(opts){var args=[];var mtKey;var mapType=(opts&&opts.mapType?opts.mapType:this.getCurrentMapType());var urlArg=mapType.getUrlArg();var latlng=(opts&&opts.latlng?opts.latlng:this.getCenter());var zoom=(opts&&opts.zoom?opts.zoom:this.getZoom());var surveyDates;var tileDate=(opts&&opts.tileDate?opts.tileDate:this.getTileDate());if(!urlArg){throw new Exception('You must provide a url argument to the permalink control');}
if(opts&&opts.query){args.push(nmm.SEARCH_QUERY_KEY+'='+opts.query);}
if(latlng){args.push(nmm.LATLNG_KEY+'='+latlng.toUrlValue());}
if(zoom>0){args.push(nmm.ZOOM_KEY+'='+zoom);}
mtKey=nmm.MapType.Keys[mapType.getName(false)];if(mtKey){args.push(nmm.MAPTYPE_KEY+'='+mtKey);}
if(!tileDate){surveyDates=this.getAvailableMapTypeTileDates();if(surveyDates.length>0){tileDate=surveyDates[surveyDates.length-1];}}
if(tileDate){args.push(nmm.TILE_DATE_KEY+'='+nml.DateHelper.toNearmapDateUTC(tileDate));}
return nmh.HttpResponse.formatUrl(urlArg,args);};nmm.Map2=Map2;nmm.MapOptions=MapOptions;nmm.InfoWindowOptions=InfoWindowOptions;nmm.InfoWindowTab=InfoWindowTab;nmm.DEFAULT_LAT_LNG=DEFAULT_LAT_LNG;})();(function(){var window=this;var document=window.document;var nearmap=window.nearmap;var nmm=nearmap.maps;var nmc=nearmap.client;var nms=nearmap.style;var nme=nearmap.memory;var nmo=nearmap.options;var nml=nearmap.lib;var nmls=nearmap.lib.sprite;var nmlh=nearmap.lib.history;var nmev=nearmap.event;var nmh=nearmap.http;var nmd=nearmap.dom;var ajax=nearmap.ajax;var nmov=nearmap.overlay;var nma=nearmap.animation;var ControlAnchor={ANCHOR_TOP_RIGHT:1,ANCHOR_BOTTOM_LEFT:2,ANCHOR_BOTTOM_RIGHT:3,ANCHOR_TOP_LEFT:4,ANCHOR_CENTER:5};function ControlPosition(anchor,offset){this.anchor=anchor;this.offset=offset||new nmm.Size(0,0);}
ControlPosition.prototype.apply=function(elm){var container;if(this.anchor===ControlAnchor.ANCHOR_CENTER){container=elm.parentNode;elm.style.left=Math.floor((container.offsetWidth/2)-(elm.offsetWidth/2)+this.offset.width)+'px';elm.style.top=Math.floor((container.offsetHeight/2)-(elm.offsetHeight/2)+this.offset.height)+'px';}
else{elm.style[this.xA()]=this.offset.getWidthString();elm.style[this.yA()]=this.offset.getHeightString();}};ControlPosition.prototype.applyRelative=function(elm,relativeTo){var container=elm.parentNode;var relH;var relV;var offsetH;var offsetV;if(this.anchor===ControlAnchor.ANCHOR_CENTER){elm.style.left=Math.floor((container.offsetWidth/2)-(elm.offsetWidth/2)+this.offset.width)+'px';elm.style.top=Math.floor((container.offsetHeight/2)-(elm.offsetHeight/2)+this.offset.height)+'px';}
else{relH=(relativeTo.style.right?'right':'left');relV=(relativeTo.style.bottom?'bottom':'top');if(this.xA()==='left'){offsetH=relativeTo.offsetLeft+relativeTo.offsetWidth-container.offsetLeft;}
else{offsetH=relativeTo.offsetLeft-container.offsetLeft;}
if(this.yA()==='top'){offsetV=relativeTo.offsetTop+relativeTo.offsetHeight-container.offsetTop;}
else{offsetV=relativeTo.offsetTop-container.offsetTop;}
elm.style[relH]=(offsetH+this.offset.width)+'px';elm.style[relV]=(offsetV+this.offset.height)+'px';}};ControlPosition.prototype.xA=function(){switch(this.anchor){case 1:case 3:return"right";default:return"left";}};ControlPosition.prototype.yA=function(){switch(this.anchor){case 2:case 3:return"bottom";default:return"top";}};function Control(printable,selectable){this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){};this.getDefaultPosition=function(){};}
function PanControl(printable,selectable){var _panSpeed=50;this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var domChain=document.createElement('div'),north=document.createElement('a'),east=document.createElement('a'),south=document.createElement('a'),west=document.createElement('a'),buttons=[north,east,south,west],lstnMouseUp,doPan;function up(){window.clearInterval(doPan);nmev.removeListener(lstnMouseUp);}
function down(e){var d;e=e||window.event;if(e.button===0){switch(this){case north:d=new nmm.Size(0,_panSpeed);break;case east:d=new nmm.Size(-_panSpeed,0);break;case south:d=new nmm.Size(0,-_panSpeed);break;case west:d=new nmm.Size(_panSpeed,0);break;}
map.panBy(d);lstnMouseUp=nmev.addDomListener(window.document,'mouseup',up);doPan=window.setInterval(function(){map.panBy(d);},50);}
nmev.stopBubbling(e);}
function over(){switch(this){case north:this.style.background=nmm.sprites.maptools+' no-repeat 0 -50px';return;case east:this.style.background=nmm.sprites.maptools+' no-repeat -25px -99px';return;case south:this.style.background=nmm.sprites.maptools+' no-repeat 0 -75px';return;case west:this.style.background=nmm.sprites.maptools+' no-repeat 0 -99px';return;}}
function out(){this.style.background=null;}
nms.css(domChain,{background:'url('+nmls.MAP_TOOLS.url+') no-repeat',width:'44px',height:'44px',margin:'0px 0px 8px 0px',position:'relative'});nms.css(north,{cursor:'pointer',position:'absolute',left:'7px',top:'0px',display:'block',width:'30px',height:'14px'});nms.css(east,{cursor:'pointer',position:'absolute',left:'28px',top:'6px',display:'block',width:'16px',height:'30px'});nms.css(south,{cursor:'pointer',position:'absolute',left:'7px',top:'28px',display:'block',width:'30px',height:'14px'});nms.css(west,{cursor:'pointer',position:'absolute',left:'0px',top:'6px',display:'block',width:'16px',height:'30px'});for(var i=0;i<buttons.length;i++){nmev.addDomListener(buttons[i],'mousedown',down);nmev.addDomListener(buttons[i],'mouseover',over);nmev.addDomListener(buttons[i],'mouseout',out);nmev.addDomListener(buttons[i],'dblclick',nmev.stopBubbling);}
domChain.appendChild(north);domChain.appendChild(east);domChain.appendChild(south);domChain.appendChild(west);return domChain;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(0,0));};}
function ZoomInControl(printable,selectable){var _sprite=nmls.ZOOM;var _node;function onzoomclick(e,map){map.zoomIn();}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var spriteBtn=document.createElement('span');_node=document.createElement('a');_node.title='Zoom in';nms.css(_node,{cursor:'pointer',height:'18px',width:'18px',position:'relative'});nms.css(spriteBtn,{clip:'rect(0px 18px 18px 0px)',height:'18px',width:'18px',position:'absolute',left:'0px'});nms.applyPngAlphaBg(spriteBtn,_sprite.url);nmev.addDomListener(_node,'click',nmev.callbackArgs(_node,onzoomclick,map));_node.appendChild(spriteBtn);return _node;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(0,0));};}
function ZoomOutControl(printable,selectable){var _node;var _sprite=nmls.ZOOM;function onzoomclick(e,map){map.zoomOut();}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var spriteBtn=document.createElement('span');_node=document.createElement('a');_node.title='Zoom out';nms.css(_node,{cursor:'pointer',height:'18px',width:'18px',position:'relative'});nms.css(spriteBtn,{clip:'rect(26px 18px 44px 0px)',height:'44px',width:'18px',position:'absolute',top:'-26px',left:'0px'});nms.applyPngAlphaBg(spriteBtn,_sprite.url);nmev.addDomListener(_node,'click',nmev.callbackArgs(_node,onzoomclick,map));_node.appendChild(spriteBtn);return _node;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(0,0));};}
function ResetControl(printable,selectable){var _node;var _sprite=nmls.ZOOM;function onbuttonclick(e,map){map.setCenter(nmm.DEFAULT_LAT_LNG,nmm.DEFAULT_ZOOM,nmm.DEFAULT_MAP_TYPE,null);}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var spriteBtn=document.createElement('span');_node=document.createElement('a');_node.title="Show the whole world";nms.css(_node,{cursor:'pointer',height:'18px',width:'18px',position:'relative'});nms.css(spriteBtn,{clip:'rect(92px 18px 110px 0px)',height:'110px',width:'18px',position:'absolute',top:'-92px',left:'0px'});nms.applyPngAlphaBg(spriteBtn,_sprite.url);nmev.addDomListener(_node,'click',nmev.callbackArgs(_node,onbuttonclick,map));_node.appendChild(spriteBtn);return _node;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(0,0));};}
function SmallZoomControl3D(printable,selectable){var _node;var _sprite=nmls.ZOOM;function createBackground(){var frag=document.createDocumentFragment();var borderTop=document.createElement('div');var middle=document.createElement('div');var borderBottom=document.createElement('div');nms.css(borderTop,{'clip':'rect(50px 27px 56px 0px)','height':'56px','width':'27px','position':'absolute','top':'-50px','left':'0px'},true);nms.applyPngAlphaBg(borderTop,_sprite.url);nms.css(middle,{'clip':'rect(0px 57px 67px 30px)','height':'67px','width':_sprite.size.getWidthString(),'position':'absolute','top':'6px','left':'-30px'},true);nms.applyPngAlphaBg(middle,_sprite.url,true);nms.css(borderBottom,{'clip':'rect(61px 27px 67px 0px)','height':'67px','width':'27px','position':'absolute','top':'12px','left':'0px'},true);nms.applyPngAlphaBg(borderBottom,_sprite.url);frag.appendChild(borderTop);frag.appendChild(middle);frag.appendChild(borderBottom);return frag;}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var frag=document.createDocumentFragment();var zoomIn=new ZoomInControl(this.printable(),this.selectable());var zoomOut=new ZoomOutControl(this.printable(),this.selectable());var reset=new ResetControl(this.printable(),this.selectable());var zoomInNode=zoomIn.initialize(map);var zoomOutNode=zoomOut.initialize(map);var resetNode=reset.initialize(map);_node=document.createElement('div');nms.css(_node,{'cursor':'default','height':'80px','width':'30px'},true);nms.css(zoomInNode,{'position':'absolute','top':'5px','left':'4px'});nms.css(zoomOutNode,{'position':'absolute','top':'30px','left':'4px'});nms.css(resetNode,{'position':'absolute','top':'53px','left':'4px'});if(!this.selectable()){nmev.disableSelect(_node);}
frag.appendChild(_node);_node.appendChild(createBackground());_node.appendChild(zoomInNode);_node.appendChild(zoomOutNode);_node.appendChild(resetNode);map.getContainer().appendChild(frag);return _node;};this.getNode=function(){return _node;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(10,10));};}
var SmallZoomControl=SmallZoomControl3D;function SliderControl(printable,selectable){this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var domChain=document.createElement('div'),sliderBgSprite=document.createElement('div'),sliderNotch=document.createElement('a'),sliderNotchSprite=document.createElement('span'),height=198,mapType=map.getCurrentMapType(),zoomLevels,notchHeight=5,notchTotHeight,notchTopPos,lstnSldMouseUp,lstnSldMouseMove;function sliderStop(slider){var zoomMove,sliderLevel;zoomMove=parseInt(slider.style.top,10)-slider.startY;sliderLevel=Math.ceil((height-parseInt(slider.style.top,10))/notchTotHeight);slider.style.top=(height-(sliderLevel*notchTotHeight))+'px';slider.style.background=nmm.sprites.maptools+' no-repeat -77px -104px';slider.startY=null;slider.lastY=null;map.setZoom(sliderLevel);}
function mousemove(e){var zoomMove,ypos;e=e||window.event;zoomMove=e.clientY-sliderNotch.lastY;sliderNotch.lastY=e.clientY;ypos=(parseInt(sliderNotch.style.top,10)+zoomMove);if(zoomMove!==0&&ypos<sliderNotch.bounds.top){ypos=sliderNotch.bounds.top;}
else
if(zoomMove!==0&&ypos>sliderNotch.bounds.bottom){ypos=sliderNotch.bounds.bottom;}
sliderNotch.style.top=ypos+'px';nmev.stopBubbling(e);return nmev.preventDefault(e);}
function mouseup(e){sliderStop(sliderNotch);nmev.removeListener(lstnSldMouseUp);nmev.removeListener(lstnSldMouseMove);}
function mousedown(e){e=e||window.event;if(nmev.getMouseButton(e)===nmev.MouseButton.LEFT_BUTTON){sliderNotch.style.background=nmm.sprites.maptools+' no-repeat -77px -79px';sliderNotch.startY=parseInt(sliderNotch.style.top,10);sliderNotch.lastY=e.clientY;lstnSldMouseUp=nmev.addDomListener(window.document,'mouseup',mouseup);lstnSldMouseMove=nmev.addDomListener(window.document,'mousemove',mousemove);}
nmev.stopBubbling(e);return nmev.preventDefault(e);}
function syncNotch(){notchTopPos=height-((map.getZoom())*notchTotHeight);sliderNotch.style.top=notchTopPos+'px';}
zoomLevels=mapType.getMaximumResolution()-mapType.getMinimumResolution()+1;notchTotHeight=notchHeight+Math.floor((height-(zoomLevels*notchHeight))/zoomLevels);domChain.slider=sliderNotch;sliderNotch.slider=sliderNotch;sliderNotch.bounds={top:0,bottom:height-notchTotHeight};nms.css(domChain,{cursor:'default',height:height+'px',width:'16px',margin:'auto',position:'relative',textAlign:'center'});nms.css(sliderBgSprite,{clip:'rect(0px, 69px, '+height+'px, 53px)',height:height+'px',width:'69px',position:'absolute',left:'-52px',top:'0px'});nms.applyPngAlphaBg(sliderBgSprite,nmls.MAP_TOOLS.url);nms.css(sliderNotch,{cursor:'pointer',height:'9px',width:'23px',position:'absolute',left:'-2px'});nms.css(sliderNotchSprite,{clip:'rect(104px, 99px, 113px, 76px)',height:'113px',width:'99px',position:'absolute',left:'-77px',top:'-104px'});nms.applyPngAlphaBg(sliderNotchSprite,nmls.MAP_TOOLS.url);syncNotch();nmev.addDomListener(sliderNotch,'mousedown',mousedown);nmev.addDomListener(domChain,'dblclick',nmev.stopBubbling);nmev.addDomListener(domChain,'mousedown',nmev.stopBubbling);nmev.addListener(map,'zoomend',syncNotch);domChain.appendChild(sliderBgSprite);domChain.appendChild(sliderNotch);sliderNotch.appendChild(sliderNotchSprite);return domChain;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(0,0));};}
function LargeMapControl3D(){this.printable=function(){return false;};this.selectable=function(){return false;};this.initialize=function(map){var chain=document.createElement('div'),pan=new PanControl(this.printable(),this.selectable()),zoomIn=new ZoomInControl(this.printable(),this.selectable()),zoomOut=new ZoomOutControl(this.printable(),this.selectable()),slider=new SliderControl(this.printable(),this.selectable());chain.appendChild(pan.initialize(map));chain.appendChild(zoomIn.initialize(map));chain.appendChild(slider.initialize(map));chain.appendChild(zoomOut.initialize(map));map.getContainer().appendChild(chain);return chain;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(0,0));};}
var LargeMapControl=LargeMapControl3D;function MapTypeControl(useShortNames){function styleActiveButton(b,poverY,overY){var p=b.parentNode;p.style.background='url('+nmls.BUTTONS.url+') no-repeat right '+poverY;p.style.height='17px';p.style.marginLeft=p.previousSibling?'13px':'5px';p.style.display='inline-block';p.style.background='url('+nmls.BUTTONS.url+') no-repeat 0 '+overY;b.style.cursor='pointer';b.style.height='17px';b.style.display='inline-block';b.style.marginLeft='-5px';b.style.padding='0 8px';b.style.color='#fff';b.style.fontSize='11px';}
function styleInactiveButton(b,outY){var p=b.parentNode;p.style.background='url('+nmls.BUTTONS.url+') no-repeat right 0';p.style.height='17px';p.style.marginLeft=p.previousSibling?'13px':'5px';p.style.display='inline-block';p.style.background='url('+nmls.BUTTONS.url+') no-repeat 0 '+outY;b.style.height='17px';b.style.display='inline-block';b.style.marginLeft='-5px';b.style.padding='0 8px';b.style.color='#333';b.style.fontSize='11px';}
function styleHoverButton(b,poverY,overY){b.style.cursor='pointer';b.style.color='#fff';b.style.backgroundPosition='0 '+overY;b.parentNode.style.backgroundPosition='right '+poverY;}
function clearSelection(buttons,outY){for(var i=0;i<buttons.length;i++){styleInactiveButton(buttons[i],outY);}}
this.useShortNames=Boolean(useShortNames);this.printable=function(){return true;};this.selectable=function(){return false;};this.initialize=function(map){var chain=document.createElement('div');var btn;var btnCnt;var evnt=nmev.Events;var outY='-18px';var overY='-58px';var poverY='-40px';var mapTypes=map.getMapTypes();var currentMapType=map.getCurrentMapType();var buttons=[];function click(e){if(!map.getCurrentMapType().equals(this.mapType)){map.setMapType(this.mapType);clearSelection(buttons,outY);styleActiveButton(this.firstChild,poverY,overY);}}
function mouseover(e){e=e||window.event;styleHoverButton(this,poverY,overY);nmev.stopBubbling(e);}
function mouseout(e){e=e||window.event;if(!map.getCurrentMapType().equals(this.parentNode.mapType)){styleInactiveButton(this,outY);}
nmev.stopBubbling(e);}
for(var i=0;i<mapTypes.length;i++){btn=document.createElement('a');btnCnt=document.createElement('span');btnCnt.innerHTML=mapTypes[i].getName(this.useShortNames);btn.appendChild(btnCnt);chain.appendChild(btn);if(currentMapType.equals(mapTypes[i])){styleActiveButton(btnCnt,poverY,overY);}
else{styleInactiveButton(btnCnt,outY);}
btn.onclick=click;btn.ondblclick=nmev.stopBubbling;btn.onmousedown=nmev.stopBubbling;btn.onmouseover=mouseover;btn.onmouseout=mouseout;btnCnt.onmouseover=mouseover;btnCnt.onmouseout=mouseout;btn.mapType=mapTypes[i];buttons[i]=btnCnt;}
map.getContainer().appendChild(chain);return chain;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(10,10));};}
function ToggleAndRotateMapTypeViewControl(printable,selectable,useShortNames){var _that=this;var _relationships={};var _node;var _currentRequestId=0;var _listeners={};var _prevMapType;var _toggleRelationShipOrder=[];var _toggleRelationships={};var _toggleOnMapTypes=[];var _normalMapTypes=[];var _parentMapTypes=[];var _toggleButtons=[];var _normalButtons=[];var _parentButtons=[];function normalbtnmaptypechanged(normalBtn){var currentMapType=this.getCurrentMapType();if(currentMapType===normalBtn.mapType||isCurrentToggleOffState(currentMapType,normalBtn.mapType)){normalBtn.style.color='#089853';}
else{normalBtn.style.color='#00284d';}}
function ontogglebtnmaptypechanged(toggleBtn,toggleRelationship){var currentMapType=this.getCurrentMapType();if(isToggleOnRelationship(toggleRelationship,currentMapType)){toggleBtn.mapType=currentMapType;toggleBtn.style.color='#089853';}
else{toggleBtn.style.color='#00284d';}}
function linkbtnmouseover(e,map){this.style.color='#089853';}
function linkbtnmouseout(e,map){var currentMapType=map.getCurrentMapType();if(currentMapType!==this.mapType&&!isCurrentToggleOffState(currentMapType,this.mapType)){this.style.color='#00284d';}}
function ontogglebtnclick(e,map,toggleRelationship){var i=0;var j=0;var toggleOn=null;var toggleOff=null;var currentMapType=map.getCurrentMapType();while((!toggleOn||!toggleOff)&&i<toggleRelationship.length){if(toggleRelationship[i].on===currentMapType){toggleOn=toggleRelationship[i];}
if(toggleRelationship[i].off===currentMapType){toggleOff=toggleRelationship[i];}
i++;}
if(toggleOn){this.mapType=null;map.setMapType(toggleOn.off);return;}
if(!toggleOff){if(_prevMapType){toggleOff={on:isToggleOnState(this.mapType)?this.mapType:getToggleOnFromRelationship(toggleRelationship,_prevMapType)};}
if(!toggleOff||!toggleOff.on){toggleOff=toggleRelationship[0];}}
styleInactiveButtons();this.mapType=toggleOff.on;map.setMapType(toggleOff.on);}
function onnormalbtnclick(e,map){var currentMapType=map.getCurrentMapType();var toggleOn;if(currentMapType!==this.mapType&&!isCurrentToggleOffState(currentMapType,this.mapType)){toggleOn=getToggleOn(currentMapType,this.mapType);styleInactiveButtons();map.setMapType(toggleOn||this.mapType);}}
function parentbtnmouseover(e){var prntRel=_relationships[this.mapType.getName(false)];this.style.color='#089853';this.firstChild.nodeValue=prntRel.firstChild.getName(true);}
function parentbtnmouseout(e){this.style.color='#00284d';this.firstChild.nodeValue=this.mapType.getName(true);}
function parentbtnclick(e,map){var prntRel=_relationships[this.mapType.getName(false)];_prevMapType=map.getCurrentMapType();this.firstChild.nodeValue=this.mapType.getName(true);map.setMapType(prntRel.firstChild);}
function clockwisemouseover(e){nms.css(this.firstChild,{'clip':'rect(112px 38px 138px 0px)','height':'138px','top':'-112px'});}
function clockwisemouseout(e){nms.css(this.firstChild,{'clip':'rect(84px 38px 110px 0px)','height':'110px','top':'-84px'});}
function anticlockwisemouseover(e){nms.css(this.firstChild,{'clip':'rect(112px 78px 138px 40px)','height':'138px','top':'-112px','left':'-40px'});}
function anticlockwisemouseout(e){nms.css(this.firstChild,{'clip':'rect(84px 78px 110px 40px)','height':'110px','left':'-40px','top':'-84px'});}
function clockwiseclick(e,parent,map,mapType){var prntRel,cwKey,cwChild;prntRel=_relationships[parent.getName(false)];cwKey=prntRel.children[mapType.getName(false)].clockwise.getName(false);cwChild=prntRel.children[cwKey];map.setMapType(cwChild.node);}
function anticlockwiseclick(e,parent,map,mapType){var prntRel,acwKey,acwChild;prntRel=_relationships[parent.getName(false)];acwKey=prntRel.children[mapType.getName(false)].antiClockwise.getName(false);acwChild=prntRel.children[acwKey];map.setMapType(acwChild.node);}
function toggleparentbtn(parentBtn,parentMapType){parentBtn.style.display=isChildActive(this.getCurrentMapType(),parentMapType)?'none':'block';}
function getParentRelationship(key){var parent;parent=_relationships[key];if(!parent){parent={children:{}};_relationships[key]=parent;}
return parent;}
function hideChildButton(mapType,parentBtn,childBtn){if(this.getCurrentMapType().equals(mapType)){parentBtn.style.display='none';childBtn.style.display='inline';styleInactiveButtons();}
else{childBtn.style.display='none';}}
function ontilelayersupdated(oldTileLayers,newTileLayers,btnLst,parentBtn){var prntRel=_relationships[parentBtn.mapType.getName(false)];var children=prntRel.children;var relMapType;var metaKeys;for(var c in children){if(children.hasOwnProperty(c)){relMapType=children[c].node;if(children.hasOwnProperty(c)){metaKeys=relMapType.getTileLayerMetaKeys();for(var i=0;i<metaKeys.length;i++){if(nml.ArrayHelper.indexOf(newTileLayers,metaKeys[i])>=0){if(isChildActive(this.getCurrentMapType(),parentBtn.mapType)){parentBtn.style.display='none';}
btnLst.style.visibility='visible';return;}}}}}
if((_prevMapType||prntRel.fallback)&&isChildActive(this.getCurrentMapType(),parentBtn.mapType)){this.setMapType(_prevMapType||prntRel.fallback);}
btnLst.style.visibility='hidden';}
function isToggleOnState(mapType){var group;for(var p in _toggleRelationships){if(_toggleRelationships.hasOwnProperty(p)){group=_toggleRelationships[p];for(var i=0;i<group.length;i++){if(group[i].on===mapType){return true;}}}}
return false;}
function isToggleOffState(mapType){var group;for(var p in _toggleRelationships){if(_toggleRelationships.hasOwnProperty(p)){group=_toggleRelationships[p];for(var i=0;i<group.length;i++){if(group[i].off===mapType){return true;}}}}}
function isCurrentToggleOffState(currentMapType,mapType){var group;for(var p in _toggleRelationships){if(_toggleRelationships.hasOwnProperty(p)){group=_toggleRelationships[p];for(var i=0;i<group.length;i++){if(group[i].on===currentMapType&&group[i].off===mapType){return true;}}}}
return false;}
function isCurrentToggleOnState(currentMapType,mapType){var group;if(currentMapType===mapType){for(var p in _toggleRelationships){if(_toggleRelationships.hasOwnProperty(p)){group=_toggleRelationships[p];for(var i=0;i<group.length;i++){if(group[i].on===currentMapType){return true;}}}}}
return false;}
function getToggleOn(currentMapType,selectedMapType){var togglePair;var rel;var isToggleOn;var toggleOnMapType;for(var p in _toggleRelationships){if(_toggleRelationships.hasOwnProperty(p)){toggleOn=toggleOff=false;if(_toggleRelationships.hasOwnProperty(p)){rel=_toggleRelationships[p];for(var i=0;i<rel.length;i++){togglePair=rel[i];if(togglePair.on===currentMapType){isToggleOn=true;}
if(togglePair.off===selectedMapType){toggleOnMapType=togglePair.on;}
if(isToggleOn&&toggleOnMapType){return toggleOnMapType;}}}}}
return null;}
function getToggleOnFromRelationship(relationship,offstate){var togglePair;var rel;var isToggleOn;var toggleOnMapType;for(var i=0;i<relationship.length;i++){togglePair=relationship[i];if(togglePair.off===offstate){return togglePair.on;}}
return null;}
function isToggleOnRelationship(relationship,onstate){for(var i=0;i<relationship.length;i++){if(relationship[i].on===onstate){return true;}}
return false;}
function isParent(type){return Boolean(_relationships[type.getName(false)]);}
function isChild(type){for(var p in _relationships){if(_relationships[p].children[type.getName(false)]){return true;}}
return false;}
function isChildActive(currentMapType,parent){var prntRel=_relationships[parent.getName(false)];for(var c in prntRel.children){if(prntRel.children[c].node.equals(currentMapType)){return true;}}
return false;}
function createInactiveLink(map,mapType,first){var currentMapType=map.getCurrentMapType();var sprite=nmls.BUTTONS;var lnkSpc;var lnk=document.createElement('a');var lnkTxt=document.createTextNode(mapType.getName(true));nms.css(lnk,{'color':currentMapType===mapType||isCurrentToggleOffState(currentMapType,mapType)?'#089853':'#00284d','cursor':'pointer','display':'inline','float':'left','font-size':'13px','font-family':'Arial, Helvetica, sans-serif','font-weight':'bold','line-height':'17px','margin-right':'6px','margin-top':'4px','vertical-align':'top'},true);nmev.addDomListener(lnk,'mouseover',nmev.callbackArgs(lnk,linkbtnmouseover,map));nmev.addDomListener(lnk,'mouseout',nmev.callbackArgs(lnk,linkbtnmouseout,map));nmev.addDomListener(lnk,'click',nmev.callbackArgs(lnk,onnormalbtnclick,map));nmev.addListener(map,'maptypechanged',nmev.callbackArgs(map,normalbtnmaptypechanged,lnk));if(!first){lnkSpc=document.createElement('span');nms.css(lnkSpc,{'background':'url('+sprite.url+') -107px -84px no-repeat','display':'inline','float':'left','line-height':'13px','margin':'0px 5px 0px 0px','width':'2px','height':'19px'},true);lnk.appendChild(lnkSpc);}
lnk.appendChild(lnkTxt);return lnk;}
function createInactiveParentLink(map,mapType){var lnk=document.createElement('a');var lnkTxt=document.createTextNode(mapType.getName(true));nms.css(lnk,{'color':'#00284d','cursor':'pointer','font-family':'Arial, Helvetica, sans-serif','font-size':'13px','font-weight':'bold','line-height':'25px','margin-right':'5px','padding-left':'5px','text-align':'center','vertical-align':'middle','display':'block'},true);nmev.addDomListener(lnk,'mouseover',nmev.callback(lnk,parentbtnmouseover));nmev.addDomListener(lnk,'mouseout',nmev.callback(lnk,parentbtnmouseout));nmev.addDomListener(lnk,'click',nmev.callbackArgs(lnk,parentbtnclick,map));lnk.appendChild(lnkTxt);return lnk;}
function styleInactiveButtons(){var nrmlBtn;for(var n=0;n<_normalButtons.length;n++){_normalButtons[n].style.color='#00284d';}
for(var t=0;t<_toggleButtons.length;t++){_toggleButtons[t].style.color='#00284d';}}
function createToggleButton(map,groupName,toggleRelationship,first){var sprite=nmls.BUTTONS;var lnkSpc;var lnk=document.createElement('a');var lnkTxt=document.createTextNode(groupName);var currentMapType=map.getCurrentMapType();for(var i=0;i<toggleRelationship.length;i++){if(currentMapType===toggleRelationship[i].on){lnk.mapType=toggleRelationship[i].on;}}
nms.css(lnk,{'color':isCurrentToggleOnState(currentMapType,lnk.mapType)?'#089853':'#00284d','cursor':'pointer','display':'inline','float':'left','font-family':'Arial, Helvetica, sans-serif','font-size':'13px','font-weight':'bold','line-height':'17px','margin-right':'0px','margin-top':'4px','vertical-align':'top'},true);nmev.addDomListener(lnk,'mouseover',nmev.callbackArgs(lnk,linkbtnmouseover,map));nmev.addDomListener(lnk,'mouseout',nmev.callbackArgs(lnk,linkbtnmouseout,map));nmev.addDomListener(lnk,'click',nmev.callbackArgs(lnk,ontogglebtnclick,map,toggleRelationship));nmev.addListener(map,'maptypechanged',nmev.callbackArgs(map,ontogglebtnmaptypechanged,lnk,toggleRelationship));if(!first){lnkSpc=document.createElement('span');nms.css(lnkSpc,{'background':'url('+sprite.url+') -107px -84px no-repeat','display':'inline','float':'left','line-height':'13px','margin':'0px 5px 0px 0px','width':'2px','height':'19px'},true);lnk.appendChild(lnkSpc);}
lnk.appendChild(lnkTxt);_toggleButtons.push(lnk);return lnk;}
function createNormalButton(map,mapType,first){var btn=createInactiveLink(map,mapType,first);btn.mapType=mapType;_normalButtons.push(btn);return btn;}
function createToggleButtons(map){var sprite=nmls.BUTTONS;var frag=document.createDocumentFragment();var cnt=document.createElement('div');var btnLst=document.createElement('div');var leftShoulder=document.createElement('span');var leftShoulderSprite=document.createElement('span');var groupName;nms.css(cnt,{'display':'inline'},true);nms.css(btnLst,{'background':'url('+sprite.url+') repeat-x','display':'inline','float':'left','height':'26px','padding-left':'5px'},true);nms.css(leftShoulder,{'display':'inline-block','float':'left','position':'relative','height':'26px','width':'3px'},true);nms.css(leftShoulderSprite,{'clip':'rect(28px 8px 54px 5px)','display':'inline-block','height':'54px','width':'8px','position':'absolute','left':'-5px','top':'-28px'},true);nms.applyPngAlphaBg(leftShoulderSprite,sprite.url);frag.appendChild(cnt);cnt.appendChild(leftShoulder);cnt.appendChild(btnLst);leftShoulder.appendChild(leftShoulderSprite);for(var i=0;i<_toggleRelationShipOrder.length;i++){groupName=_toggleRelationShipOrder[i];if(groupName in _toggleRelationships){btnLst.appendChild(createToggleButton(map,groupName,_toggleRelationships[groupName],i===0));}}
return frag;}
function createNormalButtons(map){var mt;var sprite=nmls.BUTTONS;var frag=document.createDocumentFragment();var cnt=document.createElement('div');var leftShoulder=document.createElement('span');var leftShoulderSprite=document.createElement('span');var rightShoulder=document.createElement('span');var rightShoulderSprite=document.createElement('span');var btnLst=document.createElement('div');nms.css(cnt,{'display':'inline'},true);nms.css(btnLst,{'background':'url('+sprite.url+') repeat-x','display':'inline','float':'left','height':'26px','padding-left':'5px'},true);nms.css(leftShoulder,{'display':'inline-block','float':'left','position':'relative','height':'26px','width':'3px'},true);nms.css(leftShoulderSprite,{'clip':'rect(28px 8px 54px 5px)','display':'inline-block','height':'54px','width':'8px','position':'absolute','left':'-5px','top':'-28px'},true);nms.applyPngAlphaBg(leftShoulderSprite,sprite.url);nms.css(rightShoulder,{'display':'inline-block','float':'left','position':'relative','height':'26px','width':'3px'},true);nms.css(rightShoulderSprite,{'clip':'rect(28px 3px 54px 0px)','display':'inline-block','height':'54px','width':'8px','position':'absolute','left':'0px','top':'-28px'},true);nms.applyPngAlphaBg(rightShoulderSprite,sprite.url);frag.appendChild(cnt);cnt.appendChild(btnLst);cnt.appendChild(rightShoulder);leftShoulder.appendChild(leftShoulderSprite);rightShoulder.appendChild(rightShoulderSprite);for(var i=0;i<_normalMapTypes.length;i++){mt=_normalMapTypes[i];btnLst.appendChild(createNormalButton(map,mt,(_toggleOnMapTypes.length===0&&i===0)));}
return frag;}
function createChildButton(parentBtn,parentMapType,map,mapType){var sprite=nmls.BUTTONS;var cnt=document.createElement('span');var clockwise=document.createElement('a');var clockwiseSprite=document.createElement('span');var antiClockwise=document.createElement('a');var antiClockwiseSprite=document.createElement('span');var nameCnt=document.createElement('strong');cnt.style.display=map.getCurrentMapType()===mapType?'inline':'none';nms.css(clockwise,{'cursor':'pointer','float':'left','height':'26px','width':'38px','overflow':'hidden','position':'relative'},true);nms.css(clockwiseSprite,{'clip':'rect(84px 38px 110px 0px)','height':'110px','width':'38px','position':'absolute','top':'-84px'},true);nms.applyPngAlphaBg(clockwiseSprite,sprite.url);nms.css(antiClockwise,{'cursor':'pointer','float':'right','height':'26px','width':'38px','overflow':'hidden','position':'relative'},true);nms.css(antiClockwiseSprite,{'clip':'rect(84px 78px 110px 40px)','height':'110px','width':'78px','position':'absolute','top':'-84px','left':'-40px'},true);nms.applyPngAlphaBg(antiClockwiseSprite,sprite.url);nms.css(nameCnt,{'color':'#089853','display':'inline','float':'left','font-family':'Arial, Helvetica, sans-serif','font-weight':'bold','font-size':'13px','line-height':'25px','text-align':'center','width':'50px'},true);nmev.addDomListener(clockwise,'mouseover',nmev.callback(clockwise,clockwisemouseover));nmev.addDomListener(antiClockwise,'mouseover',nmev.callback(antiClockwise,anticlockwisemouseover));nmev.addDomListener(clockwise,'mouseout',nmev.callback(clockwise,clockwisemouseout));nmev.addDomListener(antiClockwise,'mouseout',nmev.callback(antiClockwise,anticlockwisemouseout));nmev.addDomListener(clockwise,'click',nmev.callbackArgs(clockwise,clockwiseclick,parentMapType,map,mapType));nmev.addDomListener(antiClockwise,'click',nmev.callbackArgs(antiClockwise,anticlockwiseclick,parentMapType,map,mapType));nmev.addListener(map,'maptypechanged',nmev.callbackArgs(map,hideChildButton,mapType,parentBtn,cnt));cnt.appendChild(clockwise);cnt.appendChild(nameCnt);cnt.appendChild(antiClockwise);clockwise.appendChild(clockwiseSprite);antiClockwise.appendChild(antiClockwiseSprite);nameCnt.appendChild(document.createTextNode(mapType.getName(true)));return cnt;}
function createParentButton(map,mapType){var sprite=nmls.BUTTONS;var prntLnk;var children=_relationships[mapType.getName(false)].children;var frag=document.createDocumentFragment();var cnt=document.createElement('div');var btnLst=document.createElement('div');var rightShoulder=document.createElement('span');var rightShoulderSprite=document.createElement('span');prntLnk=createInactiveParentLink(map,mapType);prntLnk.mapType=mapType;nms.css(cnt,{'background':'url('+sprite.url+') 0px -56px repeat-x','cursor':'default','display':'inline','float':'left','position':'relative','left':'-3px','width':'130px'},true);nms.css(rightShoulder,{'display':'inline','float':'left','position':'absolute','right':'0px','height':'26px','width':'3px'},true);nms.css(rightShoulderSprite,{'clip':'rect(28px 3px 54px 0px)','display':'inline-block','height':'54px','width':'8px','position':'absolute','left':'0px','top':'-28px'},true);nms.applyPngAlphaBg(rightShoulderSprite,sprite.url);nms.css(btnLst,{'display':'inline','float':'left','height':'26px','width':'130px','padding-left':'3px','visibility':'hidden'},true);nmev.addListener(map,'maptypechanged',nmev.callbackArgs(map,toggleparentbtn,prntLnk,mapType));nmev.addListener(map,'tilelayersupdated',nmev.callbackArgs(map,ontilelayersupdated,btnLst,prntLnk));frag.appendChild(cnt);cnt.appendChild(rightShoulder);cnt.appendChild(btnLst);rightShoulder.appendChild(rightShoulderSprite);btnLst.appendChild(prntLnk);for(var c in children){if(children.hasOwnProperty(c)){btnLst.appendChild(createChildButton(prntLnk,mapType,map,children[c].node));}}
_parentButtons.push(prntLnk);return frag;}
function createParentButtons(map){var frag=document.createDocumentFragment();var mt;for(var i=0;i<_parentMapTypes.length;i++){mt=_parentMapTypes[i];frag.appendChild(createParentButton(map,mt));}
return frag;}
this.getNode=function(){return _node;};this.initialize=function(map){var frag=document.createDocumentFragment();var mapTypes=map.getMapTypes();var mt;_node=document.createElement('div');for(var i=0;i<mapTypes.length;i++){mt=mapTypes[i];if(isParent(mt)){_parentMapTypes.push(mt);}
else if(isToggleOnState(mt)){_toggleOnMapTypes.push(mt);}
else if(!isChild(mt)){_normalMapTypes.push(mt);}}
nmev.addDomListener(_node,'click',nmev.stopBubbling);nmev.addDomListener(_node,'dblclick',nmev.stopBubbling);if(!this.selectable()){nmev.disableSelect(_node);}
frag.appendChild(_node);_node.appendChild(createToggleButtons(map));_node.appendChild(createNormalButtons(map));_node.appendChild(createParentButtons(map));map.getContainer().appendChild(frag);return _node;};this.useShortNames=Boolean(useShortNames);this.printable=function(){return true;};this.selectable=function(){return false;};this.clearRelationships=function(){_relationships={};};this.addFallback=function(parent,fallback){var prntRel=getParentRelationship(parent.getName(false));prntRel.fallback=fallback;};this.addRelationship=function(parent,child,isFirstChild){var prntRel=getParentRelationship(parent.getName(false));prntRel.children[child.getName(false)]={node:child};if(!prntRel.firstChild||isFirstChild){prntRel.firstChild=child;}};this.addRotateRelationship=function(node,clockwise,antiClockwise){var key=node.getName(false),childNode,childCnt=0;for(var p in _relationships){if(_relationships.hasOwnProperty(p)){childNode=_relationships[p].children[key];if(childNode){childNode.clockwise=clockwise;childNode.antiClockwise=antiClockwise;childCnt++;}}}
if(childCnt===0){throw new Error('You can only add a rotate relationship to MapTypes that are a child of a current relationship. Use already addRelationship() before calling addRotateRelationship()');}};this.removeRelationShip=function(type){var key=type.getName(false);delete _relationships[key];for(var p in _relationships){if(_relationships.hasOwnProperty(p)){delete _relationships[p].children[key];for(var rp in _relationships[p].children){if(_relationships[p].hasOwnProperty(rp)){if(_relationships[p].children[rp].clockwise.equals(type)){delete _relationships[p].children[rp].clockwise;}
if(_relationships[p].children[rp].antiClockwise.equals(type)){delete _relationships[p].children[rp].antiClockwise;}}}}}};this.addRelationship(nmm.MapType.MULTI_VIEW_MAP,nmm.MapType.MULTI_VIEW_NORTH_MAP);this.addRelationship(nmm.MapType.MULTI_VIEW_MAP,nmm.MapType.MULTI_VIEW_EAST_MAP);this.addRelationship(nmm.MapType.MULTI_VIEW_MAP,nmm.MapType.MULTI_VIEW_SOUTH_MAP);this.addRelationship(nmm.MapType.MULTI_VIEW_MAP,nmm.MapType.MULTI_VIEW_WEST_MAP);this.addFallback(nmm.MapType.MULTI_VIEW_MAP,nmm.MapType.PHOTO_MAP);this.addRotateRelationship(nmm.MapType.MULTI_VIEW_NORTH_MAP,nmm.MapType.MULTI_VIEW_EAST_MAP,nmm.MapType.MULTI_VIEW_WEST_MAP);this.addRotateRelationship(nmm.MapType.MULTI_VIEW_EAST_MAP,nmm.MapType.MULTI_VIEW_SOUTH_MAP,nmm.MapType.MULTI_VIEW_NORTH_MAP);this.addRotateRelationship(nmm.MapType.MULTI_VIEW_SOUTH_MAP,nmm.MapType.MULTI_VIEW_WEST_MAP,nmm.MapType.MULTI_VIEW_EAST_MAP);this.addRotateRelationship(nmm.MapType.MULTI_VIEW_WEST_MAP,nmm.MapType.MULTI_VIEW_NORTH_MAP,nmm.MapType.MULTI_VIEW_SOUTH_MAP);_toggleRelationShipOrder.push('StreetMap');_toggleRelationships.StreetMap=[{on:nmm.MapType.HYBRID_MAP,off:nmm.MapType.PHOTO_MAP},{on:nmm.MapType.PHYSICAL_HYBRID_MAP,off:nmm.MapType.PHYSICAL_MAP}];}
ToggleAndRotateMapTypeViewControl.prototype.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_RIGHT,new nmm.Size(10,10));};function MenuMapTypeControl(printable,selectable){var _node;function createMapTypeOption(mapType){var opt=document.createElement('option');opt.innerHTML=mapType.getName(true);opt.value=mapType.getName(false);return opt;}
function onselectchange(e){}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var mapTypes=map.getMapTypes();var frag=document.createDocumentFragment();_node=document.createElement('select');frag.appendChild(_node);for(var i=0;i<mapTypes.length;i++){_node.appendChild(createMapTypeOption(mapTypes[i]));}
_node.onchange=onselectchange;map.getContainer().appendChild(_node);return _node;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(15,10));};}
function ScaleControl(printable,selectable){function getResolution(map){var projection=map.getCurrentMapType().getProjection();if(projection instanceof nmm.MercatorProjection){return Math.abs(156543.04*Math.cos(map.getCenter().lat()*nml.PI/180))/Math.pow(2,map.getZoom());}
else{return;}}
function getClosestBase(l){var baseunit;if(l/2000>=1){baseunit=2000;}
else if(l/1000>=1){baseunit=1000;}
else if(l/500>=1){baseunit=500;}
else if(l/100>=1){baseunit=100;}
else if(l/50>=1){baseunit=50;}
else if(l/10>=1){baseunit=10;}
else if(l/5>=1){baseunit=5;}
else if(l/2>=1){baseunit=2;}
else{baseunit=1;}
return Math.round(l/baseunit)*baseunit;}
function getImperialMeasurements(pxRes,unroundedWidth){var impPxRes=pxRes*nml.METER_TO_INCH;var unroundedLength=impPxRes*unroundedWidth;var scaleMeasurements={};var toFeet=unroundedLength/12;var toMile=toFeet/5280;if(toMile>=1){scaleMeasurements.unit='mi';scaleMeasurements.value=getClosestBase(toMile);scaleMeasurements.width=Math.ceil(scaleMeasurements.value/impPxRes*12*5280);}
else if(toFeet>=1){scaleMeasurements.unit='ft';scaleMeasurements.value=getClosestBase(toFeet);scaleMeasurements.width=Math.ceil(scaleMeasurements.value/impPxRes*12);}
else{scaleMeasurements.unit='in';scaleMeasurements.value=getClosestBase(unroundedLength);scaleMeasurements.width=Math.ceil(scaleMeasurements.value/impPxRes);}
return scaleMeasurements;}
function getMetricMeasurements(pxRes,unroundedWidth){var unroundedLength=pxRes*unroundedWidth;var scaleMeasurements={};var toKm=unroundedLength/1000;var toCm=unroundedLength*100;if(toKm>=1){scaleMeasurements.unit='km';scaleMeasurements.value=getClosestBase(toKm);scaleMeasurements.width=Math.ceil(scaleMeasurements.value/pxRes*1000);}
else if(unroundedLength>=1){scaleMeasurements.unit='m';scaleMeasurements.value=getClosestBase(unroundedLength);scaleMeasurements.width=Math.ceil(scaleMeasurements.value/pxRes);}
else{scaleMeasurements.unit='cm';scaleMeasurements.value=getClosestBase(toCm);scaleMeasurements.width=Math.ceil(scaleMeasurements.value/pxRes/100);}
return scaleMeasurements;}
function setResolution(){var metricUnit=arguments[arguments.length-1];var imperialUnit=arguments[arguments.length-2];var metricEnd=arguments[arguments.length-3];var imperialEnd=arguments[arguments.length-4];var run=arguments[arguments.length-5];var pxRes=getResolution(this);var metricRes;var imperialRes;var unroundedWidth=100;var endOffset=-78;var runWidth;metricRes=getMetricMeasurements(pxRes,unroundedWidth);imperialRes=getImperialMeasurements(pxRes,unroundedWidth);runWidth=(metricRes.width>imperialRes.width?metricRes.width:imperialRes.width);metricUnit.innerHTML=metricRes.value+' '+metricRes.unit;imperialUnit.innerHTML=imperialRes.value+' '+imperialRes.unit;nms.css(run,{clip:'rect(89px '+runWidth+'px 93px 0px)',width:runWidth+'px'});metricEnd.style.left=(endOffset+metricRes.width)+'px';imperialEnd.style.left=(endOffset+imperialRes.width)+'px';}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var sprite=nmls.TIMELINE;var frag=document.createDocumentFragment();var node=document.createElement('div');var measure=document.createElement('div');var start=document.createElement('div');var run=document.createElement('div');var metricEnd=document.createElement('div');var imperialEnd=document.createElement('div');var metricUnit=document.createElement('span');var imperialUnit=document.createElement('span');nms.css(node,{'cursor':'default','height':'30px','overflow':'hidden','vertical-align':'top'},true);nms.css(measure,{'height':'30px','width':'150px','position':'relative'},true);nms.css(start,{'clip':'rect(0px 74px 30px 70px)','height':'30px','width':'74px','position':'absolute','top':'0px','left':'-70px'},true);nms.applyPngAlphaBg(start,sprite.url);nms.css(run,{'height':'93px','position':'absolute','left':'3px','top':'-75px'},true);nms.applyPngAlphaBg(run,sprite.url);nms.css(metricEnd,{'clip':'rect(0px 81px 15px 77px)','height':'15px','width':'81px','position':'absolute','top':'0px'},true);nms.applyPngAlphaBg(metricEnd,sprite.url);nms.css(imperialEnd,{'clip':'rect(0px 81px 15px 77px)','height':'15px','width':'81px','position':'absolute','top':'15px'},true);nms.applyPngAlphaBg(imperialEnd,sprite.url);nms.css(metricUnit,{'color':'#fff','font-size':'.85em','line-height':'1em','position':'absolute','top':'0px','left':'15px'},true);nms.css(imperialUnit,{'color':'#fff','font-size':'.85em','line-height':'1em','position':'absolute','bottom':'0px','left':'15px'},true);setResolution.apply(map,[run,imperialEnd,metricEnd,imperialUnit,metricUnit]);nmev.addListener(map,'moveend',nmev.callbackArgs(map,setResolution,run,imperialEnd,metricEnd,imperialUnit,metricUnit));nmev.addListener(map,'setcenter',nmev.callbackArgs(map,setResolution,run,imperialEnd,metricEnd,imperialUnit,metricUnit));if(!this.selectable()){nmev.disableSelect(node);}
frag.appendChild(node);measure.appendChild(start);measure.appendChild(metricEnd);measure.appendChild(imperialEnd);measure.appendChild(run);node.appendChild(measure);node.appendChild(metricUnit);node.appendChild(imperialUnit);map.getContainer().appendChild(frag);return node;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_BOTTOM_LEFT,new nmm.Size(15,30));};}
function ShadowControl(printable,selectable){this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var sprite=nmls.SHADOW;var node=document.createElement('div');nms.css(node,{'height':sprite.size.getHeightString(),'width':sprite.size.getWidthString(),'overflow':'hidden','vertical-align':'top'},true);nms.applyPngAlphaBg(node,sprite.url);map.getContainer().appendChild(node);return node;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_BOTTOM_LEFT,new nmm.Size(0,0));};}
function LargeZoomControl(printable,selectable){this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var chain=document.createElement('div'),zoomIn=new ZoomInControl(this.printable(),this.selectable()),zoomOut=new ZoomOutControl(this.printable(),this.selectable()),slider=new SliderControl(this.printable(),this.selectable());nms.css(chain,{display:'inline-block',width:'25px'});chain.appendChild(zoomIn.initialize(map));chain.appendChild(slider.initialize(map));chain.appendChild(zoomOut.initialize(map));map.getContainer().appendChild(chain);return chain;};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(0,0));};}
var TimelineControlOptions={controlLeft:null,controlRight:null,minWidth:0};function TimelineControl(printable,selectable,container,opts){var _that=this;var _sprite=nmls.TIMELINE;var _wheelVelocity=0;var _listeners={};var _timers={};var _surveyDates=[];var _animations={};var _node;var _btnCnt;var _activeDate;var _dateList;var _horizOffset;var _leftCtrlNode;var _rightCtrlNode;var _lineDmnsn;var _baseLayers;var _glow;function ondatebuttonover(btn,map){return function(e){var tileDate=map.getTileDate();var showingDate=map.getShowingDate();var btnTime=btn.surveyDate.getTime();if((tileDate&&btnTime===tileDate.getTime())||(showingDate&&btnTime===showingDate.getTime())){return;}
styleInactiveDateHover(btn,btn.firstChild);};}
function ondatebuttonout(btn,map){return function(e){var tileDate=map.getTileDate();var showingDate=map.getShowingDate();var btnTime=btn.surveyDate.getTime();if((tileDate&&btnTime===tileDate.getTime())||(showingDate&&btnTime===showingDate.getTime())){return;}
styleInactiveDate(btn,btn.firstChild);};}
function ondatebuttonclick(btn,map){return function(e){var oldDate=map.getTileDate();if(oldDate!==btn.surveyDate){map.setTileDate(btn.surveyDate);}};}
function oncleardateclick(e,map){map.setTileDate(null);}
function ondatelistmousewheel(e,map){var target;var node;e=e||window.event;target=nmev.getTarget(e);node=target.nodeName.toLowerCase();if(!this.focused&&node==='select'){wheelTimeline(nmev.normalizeWheelDelta(e),map);nmev.stopBubbling(e);}
else if(nmc.browser.msie||node==='option'){nmev.stopBubbling(e);}}
function ondatelistfocus(e){this.focused=true;}
function ondatelistblur(e){this.focused=false;}
function ondatelistkeyup(e,map){var selVal;if(!nmc.browser.msie){e=e||window.event;if(e.keyCode<37||e.keyCode>40){return;}
selVal=this.options[this.selectedIndex].value;map.setTileDate(selVal?nml.DateHelper.fromNearmapDateUTC(selVal):null);nmev.stopBubbling(e);}}
function ondatelistkeydown(e,map){e=e||window.event;if(e.keyCode>=37&&e.keyCode<=40){nmev.stopBubbling(e);}}
function ondatelistchange(e,map){map.setTileDate(this.value?nml.DateHelper.fromNearmapDateUTC(this.value):null);}
function ontimelinewheel(e,map){e=e||window.event;wheelTimeline(nmev.normalizeWheelDelta(e),map);nmev.stopBubbling(e);}
function onbuttontiledatechanged(oldDate,newDate,btn,btnSprite){var surveyMs=btn.surveyDate.getTime();var showingDate=this.getShowingDate();if(newDate&&surveyMs===newDate.getTime()){styleActiveDate(btn,btnSprite);}
else if(showingDate&&showingDate.getTime()===surveyMs){styleShowingDate(btn,btnSprite);}
else{styleInactiveDate(btn,btnSprite);}}
function onbuttonshowingdatechanged(oldShowingDate,newShowingDate,btn){}
function ondatelisttiledatechanged(oldDate,newDate,dateList){var newDateMs,len;if(newDate){newDateMs=newDate.getTime();len=dateList.length;for(var i=1;i<len;i++){if(nml.DateHelper.fromNearmapDateUTC(dateList[i].value).getTime()===newDateMs){dateList.selectedIndex=i;return;}}}
else{dateList.selectedIndex=0;}}
function getSurveyDatePosition(d,surveyDates){var ms;if(!d){return-1;}
ms=d.getTime();for(var i=0;i<surveyDates.length;i++){if(surveyDates[i].getTime()===ms){return i;}}
return-1;}
function getButtonOffset(dateRangeMin,surveyDate,dayPx,arrayPos,btnHalfMargin,btnFullMargin,timelinePadding){return(Math.floor(dayPx*getDaysBetween(dateRangeMin,surveyDate))+(btnHalfMargin+(arrayPos*btnFullMargin))+timelinePadding)+'px';}
function setSurveyDate(timeDirection,map){var viewedDate=map.getTileDate();var newDateInd=null;var len=_surveyDates.length;var newDate;if(!viewedDate&&timeDirection<0){newDateInd=len-1+timeDirection;}
else if(viewedDate){newDateInd=getViewedDatePos(viewedDate,_surveyDates)+timeDirection;}
if(newDateInd===null||newDateInd>=len){newDate=null;}
else if(newDateInd<0){newDate=_surveyDates[0];}
else{newDate=_surveyDates[newDateInd];}
map.setTileDate(newDate);}
function calculateHorizontalOffsets(){var cntWidth=container.offsetWidth;var cntOffset=container.offsetLeft;var defaultOffset=5;_horizOffset.right=_rightCtrlNode?cntWidth-cntOffset-_rightCtrlNode.offsetLeft:defaultOffset;_horizOffset.left=_leftCtrlNode?_leftCtrlNode.offsetLeft+_leftCtrlNode.offsetWidth-cntOffset:defaultOffset;}
function getWidthAvailable(){return container.offsetWidth-_horizOffset.left-_horizOffset.right;}
function clearContainer(){var childNode=_node.lastChild;while(childNode){prevChildNode=childNode.previousSibling;nmev.clearNode(childNode);nme.discardElement(childNode,container);childNode=prevChildNode;}}
function removeDateContainer(btnCnt){var dateBtn;if(btnCnt){dateBtn=btnCnt.firstChild;while(dateBtn){dateBtn.onmouseover=null;dateBtn.onmouseout=null;dateBtn.onclick=null;nmev.removeListener(dateBtn.ontiledatechanged);nmev.removeListener(dateBtn.onshowingdatechanged);dateBtn.ontiledatechanged=null;dateBtn.onshowingdatechanged=null;dateBtn=dateBtn.nextSibling;}
removeDateOptions(_dateList);nme.discardElement(btnCnt,container);}}
function getViewedDatePos(viewedDate,surveyDates){var vwdDateInd=-1;var i=0;var len=surveyDates.length;while(i<len&&vwdDateInd===-1){if(surveyDates[i].getTime()-viewedDate.getTime()===0){vwdDateInd=i;}
i++;}
return vwdDateInd;}
function styleNewActiveDate(oldDate,newDate){var next=_btnCnt.firstChild,btnTime;while(next){btnTime=next.surveyDate.getTime();if(newDate&&btnTime-newDate.getTime()===0){styleActiveDate(next,next.firstChild);}
else{styleInactiveDate(next,next.firstChild);}
next=next.nextSibling;}}
function styleInactiveDateHover(btn,btnSprite){var size=new nmm.Size(15,13);nms.css(btn,{height:size.getHeightString(),width:size.getWidthString(),marginLeft:-Math.floor(size.width/2)+'px',marginTop:-Math.floor(size.height/2)+'px'});nms.css(btnSprite,{clip:'rect(0px, 49px, 13px, 34px)',top:'0px',left:'-34px'});}
function styleInactiveDate(btn,btnSprite){var size=new nmm.Size(15,13);nms.css(btn,{height:size.getHeightString(),width:size.getWidthString(),marginLeft:-Math.floor(size.width/2)+'px',marginTop:-Math.floor(size.height/2)+'px'});nms.css(btnSprite,{clip:'rect(0px, 29px, 13px, 14px)',height:_sprite.size.getHeightString(),width:'49px',position:'absolute',top:'0px',left:'-14px'});nms.applyPngAlphaBg(btnSprite,_sprite.url);}
function styleActiveDate(btn,btnSprite){var size=new nmm.Size(15,26);nms.css(btn,{height:size.getHeightString(),width:size.getWidthString(),marginLeft:-Math.floor(size.width/2)+'px',marginTop:-Math.floor(size.height/2)+'px'});nms.css(btnSprite,{clip:'rect(14px, 49px, 40px, 34px)',height:_sprite.size.getHeightString(),width:'49px',position:'absolute',top:'-14px',left:'-34px'});nms.applyPngAlphaBg(btnSprite,_sprite.url);}
function styleShowingDate(btn,btnSprite){var size=new nmm.Size(15,26);nms.css(btn,{height:size.getHeightString(),width:size.getWidthString(),marginLeft:-Math.floor(size.width/2)+'px',marginTop:-Math.floor(size.height/2)+'px'});nms.css(btnSprite,{clip:'rect(0px, 141px, 26px, 126px)',height:_sprite.size.getHeightString(),width:'141px',position:'absolute',top:'0px',left:'-126px'});nms.applyPngAlphaBg(btnSprite,_sprite.url);}
function createDateButton(yearCnt,surveyDate,viewedDate,showingDate,map){var dateBtn=document.createElement('a');var dateBtnSprite=document.createElement('span');var nearmapDate=nml.DateHelper.smallDateUTC(surveyDate);dateBtn.surveyDate=surveyDate;dateBtnSprite.className='canceltooltip';nms.css(dateBtn,{cursor:'pointer',overflow:'hidden',position:'absolute',top:'7px'});yearCnt.appendChild(dateBtn);dateBtn.appendChild(dateBtnSprite);if(viewedDate&&surveyDate.getTime()-viewedDate.getTime()===0){dateBtn.title='Show up to and including '+nearmapDate;styleActiveDate(dateBtn,dateBtnSprite);}
else if(showingDate&&showingDate.getTime()===surveyDate.getTime()){dateBtn.title='Showing '+nearmapDate;styleShowingDate(dateBtn,dateBtnSprite);}
else{dateBtn.title=nearmapDate;styleInactiveDate(dateBtn,dateBtnSprite);}
dateBtn.onmouseover=ondatebuttonover(dateBtn,map);dateBtn.onmouseout=ondatebuttonout(dateBtn,map);dateBtn.onclick=ondatebuttonclick(dateBtn,map);dateBtn.ontiledatechanged=nmev.addListener(map,'tiledatechanged',nmev.callbackArgs(map,onbuttontiledatechanged,dateBtn,dateBtnSprite));dateBtn.onshowingdatechanged=nmev.addListener(map,'showingdatechanged',nmev.callbackArgs(map,onbuttonshowingdatechanged,dateBtn));return dateBtn;}
function selectOptionDate(dateList,toSelectDate){var nmDate;if(!toSelectDate){dateList.selectedIndex=0;return;}
nmDate=nml.DateHelper.toNearmapDateUTC(toSelectDate);for(var i=1;i<dateList.length;i++){if(dateList[i].value===nmDate){dateList.selectedIndex=i;return;}}}
function removeDateOptions(dateList){var latest=dateList.options[0];var latestTxt='Latest';if(latest){latest.text=latestTxt;}
for(var i=dateList.length-1;i>0;i--){nme.discardElement(dateList.options[i],container);}}
function addDateListOption(dateList,surveyDate){var option=document.createElement('option');option.text=nml.DateHelper.smallDateUTC(surveyDate);option.value=nml.DateHelper.toNearmapDateUTC(surveyDate);dateList.options.add(option,1);}
function getDaysBetween(min,max){return Math.ceil((max.getTime()-min.getTime())/nml.MS_IN_DAY);}
function getDateRange(yearRange){return{min:new Date(yearRange.min,0,1),max:new Date(yearRange.max,11,31)};}
function getYearRange(viewedDate,surveyDates){var vwdMs=viewedDate?viewedDate.getTime():null;var minSurvey=surveyDates[0];var maxSurvey=surveyDates[surveyDates.length-1];return{min:viewedDate&&minSurvey&&vwdMs-minSurvey.getTime()<0?viewedDate.getUTCFullYear():(minSurvey?minSurvey.getUTCFullYear():null),max:viewedDate&&maxSurvey&&vwdMs-maxSurvey.getTime()>0?viewedDate.getUTCFullYear():(maxSurvey?maxSurvey.getUTCFullYear():null)};}
function renderLarge(dateList,viewedDate,map){var frag=document.createDocumentFragment();var btnCnt=document.createElement('div');var btnHalfMargin=2;var btnFullMargin=btnHalfMargin*2;var yearRange=getYearRange(viewedDate,_surveyDates);var dateRange=getDateRange(yearRange);var daysBetween=getDaysBetween(dateRange.min,dateRange.max);var optLatest=dateList.options[0];var timelinePadding=10;var buttonAvailableWidth=_lineDmnsn.width-(timelinePadding*2);var showingDate=map.getShowingDate();var dateBtn;var len;var surveyDate;var latestDate;var dayPx;nms.css(btnCnt,{display:'inline-block',height:'15px',width:_lineDmnsn.width+'px',position:'absolute',left:_lineDmnsn.left+'px',top:'8px',zIndex:'1'});len=_surveyDates.length;latestDate=len>0?_surveyDates[len-1]:null;dayPx=(buttonAvailableWidth-(len*btnFullMargin))/daysBetween;if(optLatest){optLatest.text='Latest'+(latestDate?' ('+nml.DateHelper.smallDateUTC(latestDate)+')':'');}
frag.appendChild(btnCnt);for(var i=0;i<len;i++){surveyDate=_surveyDates[i];addDateListOption(dateList,surveyDate);dateBtn=createDateButton(btnCnt,surveyDate,viewedDate,showingDate,map);dateBtn.style.left=getButtonOffset(dateRange.min,surveyDate,dayPx,i,btnHalfMargin,btnFullMargin,timelinePadding);}
selectOptionDate(dateList,viewedDate);return frag;}
function renderSmall(dateList,viewedDate){var frag=document.createDocumentFragment();var dateBtn;var len;var latestDate;var optLatest=dateList.options[0];len=_surveyDates.length;latestDate=len>0?_surveyDates[len-1]:null;if(optLatest){optLatest.text='Latest'+(latestDate?' ('+nml.DateHelper.smallDateUTC(latestDate)+')':'');}
for(var i=0;i<len;i++){addDateListOption(dateList,_surveyDates[i]);}
selectOptionDate(dateList,viewedDate);frag.appendChild(document.createElement('div'));return frag;}
function onmaptypetiledatesupdated(oldDates,newDates,showButtons){var viewedDate=this.getTileDate();var vwdPos;var frag;vwdPos=getSurveyDatePosition(viewedDate,newDates);_surveyDates=(vwdPos===-1&&viewedDate?nml.DateHelper.insertUniqueAsc(newDates,viewedDate):newDates.slice(0,newDates.length));removeDateContainer(_btnCnt);if(showButtons){frag=renderLarge(_dateList,viewedDate,this);}
else{frag=renderSmall(_dateList,viewedDate);}
_btnCnt=frag.firstChild;_node.appendChild(frag);}
function wheelTimeline(direction,map){if(_timers.timelinewheel){window.clearTimeout(_timers.timelinewheel);delete _timers.timelinewheel;}
setSurveyDate(direction,map);}
function createBackground(ctrlWidth){var shoulderSize=new nmm.Size(5,39);var bgCnt=document.createElement('div');var bgLeft=document.createElement('span');var bgMiddle=document.createElement('span');var bgRight=document.createElement('span');var bgSize=new nmm.Size(ctrlWidth,shoulderSize.height);var middleBgSize=new nmm.Size(bgSize.width-(shoulderSize.width*2),shoulderSize.height);nms.css(_node,{'cursor':'default','width':(ctrlWidth)+'px','z-index':'1'},true);nms.css(bgCnt,{'height':shoulderSize.getHeightString(),'overflow':'hidden','position':'relative'});nms.css(bgLeft,{clip:'rect(0px, '+shoulderSize.getWidthString()+', 39px, 0px)',display:'inline-block',fontSize:'0px',position:'absolute',left:'0px',height:shoulderSize.getHeightString(),width:_sprite.size.getWidthString()});nms.applyPngAlphaBg(bgLeft,_sprite.url);nms.css(bgMiddle,{'clip':'rect(41px, '+middleBgSize.width+'px, 80px, 0px)','display':'inline-block','font-size':'0px','position':'absolute','left':shoulderSize.getWidthString(),'top':'-41px','height':_sprite.size.getHeightString(),'width':middleBgSize.getWidthString()},true);nms.applyPngAlphaBg(bgMiddle,_sprite.url,true);nms.css(bgRight,{clip:'rect(0px, 11px, 39px, 6px)',display:'inline-block',fontSize:'0px',position:'absolute',left:(bgSize.width-shoulderSize.width-6)+'px',height:shoulderSize.getHeightString(),width:_sprite.size.getWidthString()});nms.applyPngAlphaBg(bgRight,_sprite.url);_node.appendChild(bgCnt);bgCnt.appendChild(bgLeft);bgCnt.appendChild(bgMiddle);bgCnt.appendChild(bgRight);return bgCnt;}
function createDateList(bgCnt,dateListWidth,map,centerList){var latest=document.createElement('option');_dateList=document.createElement('select');_dateList.className='canceltooltip';latest.text='Latest';latest.value='';if(centerList){bgCnt.style.textAlign='center';nms.css(_dateList,{'position':'relative','margin':'5px 0px 0px 0px','z-index':'10'},true);}
else{nms.css(_dateList,{'position':'relative','margin':'5px 0px 0px 4px','width':dateListWidth+'px','z-index':'10'},true);}
_dateList.options.add(latest);nmev.addDomListener(_dateList,'keyup',nmev.callbackArgs(_dateList,ondatelistkeyup,map));nmev.addDomListener(_dateList,'keydown',nmev.callbackArgs(_dateList,ondatelistkeydown,map));nmev.addDomListener(_dateList,'blur',nmev.callback(_dateList,ondatelistblur));nmev.addDomListener(_dateList,'focus',nmev.callback(_dateList,ondatelistfocus));nmev.addDomListener(_dateList,'mousewheel',nmev.callbackArgs(_dateList,ondatelistmousewheel,map));nmev.addDomListener(_dateList,'change',nmev.callbackArgs(_dateList,ondatelistchange,map));nmev.addListener(map,'tiledatechanged',nmev.callbackArgs(map,ondatelisttiledatechanged,_dateList));bgCnt.appendChild(_dateList);}
function createContiuum(bgCnt,ctrlWidth,dateListWidth,map){var clearSize=new nmm.Size(9,9);var horizMargin=4;var line=document.createElement('span');var clearDate=document.createElement('a');_lineDmnsn={width:ctrlWidth-((clearSize.width+horizMargin)+(dateListWidth+horizMargin)),left:(horizMargin+dateListWidth)};clearDate.title='View latest';clearDate.className='canceltooltip';nms.css(line,{clip:'rect(82px, '+_lineDmnsn.width+'px, 87px, 0px)',display:'inline-block',height:_sprite.size.getHeightString(),width:_lineDmnsn.width+'px',position:'absolute',left:_lineDmnsn.left+'px',top:'-70px'});nms.applyPngAlphaBg(line,_sprite.url,true);nms.css(clearDate,{clip:'rect(14px, 64px, 23px, 55px)',cursor:'pointer',display:'inline-block',height:_sprite.size.getHeightString(),width:'64px',position:'absolute',left:(_lineDmnsn.width+_lineDmnsn.left-55)+'px',top:'-4px'});nms.applyPngAlphaBg(clearDate,_sprite.url);nmev.addDomListener(clearDate,'click',nmev.callbackArgs(clearDate,oncleardateclick,map));bgCnt.appendChild(line);bgCnt.appendChild(clearDate);}
function renderContainer(map,widthAvail){var marginRight=15;var dateListWidth=165;var ctrlWidth=widthAvail-marginRight;var bgCnt;var showButtons=false;if(_listeners.maptypetiledatesupdated){nmev.removeListener(_listeners.maptypetiledatesupdated);}
clearContainer();bgCnt=createBackground(ctrlWidth);if(widthAvail>=opts.minWidth){showButtons=true;createContiuum(bgCnt,ctrlWidth,dateListWidth,map);}
createDateList(bgCnt,dateListWidth,map,!showButtons);_node.style.display='block';_listeners.maptypetiledatesupdated=nmev.addListener(map,'maptypetiledatesupdated',nmev.callbackArgs(map,onmaptypetiledatesupdated,showButtons));onmaptypetiledatesupdated.apply(map,[null,map.getAvailableMapTypeTileDates(),showButtons]);return showButtons;}
function reInitializeControl(map){var bottom=_node.style.bottom;var top=bottom?null:(_node.style.top||'0px');var right=_node.style.right;var left=right?null:(_node.style.left||'0px');var showButtons;showButtons=renderContainer(map,getWidthAvailable());_node.style.position='absolute';if(bottom){_node.style.bottom=bottom;}
else{_node.style.top=top;}
if(right){_node.style.right=right;}
else{_node.style.left=left;}
onmaptypetiledatesupdated.apply(map,[null,map.getAvailableMapTypeTileDates(),showButtons]);}
function registerMapEvents(map){nmev.addDomListener(_node,'mousewheel',nmev.callbackArgs(_node,ontimelinewheel,map));nmev.addDomListener(_node,'mousedown',nmev.stopBubbling);nmev.addDomListener(_node,'mouseup',function(e){e=e||window.event;if(nmev.getMouseButton(e)===nmev.MouseButton.RIGHT_BUTTON){nmev.stopBubbling(e);}});nmev.addDomListener(_node,'dblclick',nmev.stopBubbling);nmev.addDomListener(_node,'click',nmev.stopBubbling);nmev.addListener(map,'resizestart',nmev.callbackArgs(map,reInitializeControl,map));nmev.addListener(map,'maptypechanged',function(){_baseLayers=map.getCurrentMapType().getTileLayers();});}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.getNode=function(){return _node;};this.getHorizontalOffset=function(){return _horizOffset;};this.getSurveyDates=function(){return _surveyDates;};this.initialize=function(map){var frag=document.createDocumentFragment();var widthAvail;var childNode;var prevChildNode;var tooltip;_node=document.createElement('div');_baseLayers=map.getCurrentMapType().getTileLayers();calculateHorizontalOffsets();frag.appendChild(_node);renderContainer(map,getWidthAvailable());registerMapEvents(map);tooltip=new nmd.Tooltip('Click dots to select dates and use scroll wheel to change dates',_node,map.getContainer(),{maxWidth:'210px'});if(!this.selectable()){nmev.disableSelect(_node);}
map.getContainer().appendChild(frag);return _node;};opts=nmo.Synchronize.fill(opts,TimelineControlOptions);_leftCtrlNode=opts.controlLeft&&opts.controlLeft.getNode?opts.controlLeft.getNode():null;_rightCtrlNode=opts.controlRight&&opts.controlRight.getNode?opts.controlRight.getNode():null;_horizOffset={left:0,right:0};}
TimelineControl.prototype.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(0,0));};function LatestImageryControl(printable,selectable){var _node;function findClosestImageDate(surveyDates,selectedDate){var sDate;var selMs;if(surveyDates.length===0){return null;}
if(selectedDate===null){return surveyDates[surveyDates.length-1];}
selMs=selectedDate.getTime();for(var i=surveyDates.length-1;i>=0;i--){sDate=surveyDates[i];if(selMs-sDate.getTime()>=0){return sDate;}}}
function setLatestDateLabel(surveyDates,selectedDate,label){var imgDate=findClosestImageDate(surveyDates,selectedDate);if(!imgDate){label.nodeValue='unavailable';}
else{label.nodeValue=nml.DateHelper.smallDateUTC(imgDate);}}
function onmaptypetiledatesupdated(oldDates,newDates,latestDateTxt){setLatestDateLabel(newDates,this.getTileDate(),latestDateTxt);}
function ontiledatechanged(oldDate,newDate,latestDateTxt){setLatestDateLabel(this.getAvailableMapTypeTileDates(),newDate,latestDateTxt);}
this.printable=function(){return printable;};this.selectable=function(){return selectable;};this.getNode=function(){return _node;};this.initialize=function(map){var frag=document.createDocumentFragment();var latest=document.createTextNode('Showing ');var latestDateTxt=document.createTextNode(' (searching...)');_node=document.createElement('div');nms.css(_node,{'cursor':'default','color':'#fff','font-size':'12px'},true);nmev.addListener(map,'maptypetiledatesupdated',nmev.callbackArgs(map,onmaptypetiledatesupdated,latestDateTxt));nmev.addListener(map,'tiledatechanged',nmev.callbackArgs(map,ontiledatechanged,latestDateTxt));if(!this.selectable()){nmev.disableSelect(_node);}
frag.appendChild(_node);_node.appendChild(latest);_node.appendChild(latestDateTxt);map.getContainer().appendChild(frag);return _node;};}
LatestImageryControl.prototype.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_BOTTOM_LEFT,new nmm.Size(0,0));};function ReturnToRegularSiteControl(printable,selectable){var _node;this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){_node=document.createElement('a');_node.appendChild(document.createTextNode('Return to regular site'));_node.title='Return to the regular sized map';_node.href=nmm.HOST_URL+'?'+nmm.OUTPUT_KEY+'=normal';nms.css(_node,{'color':'#fff','border-bottom':'dotted 1px #fff','font-size':'12px','text-decoration':'none'},true);_node.onmouseover=function(){_node.style.borderBottom='solid 1px #fff';};_node.onmouseout=function(){_node.style.borderBottom='dotted 1px #fff';};map.getContainer().appendChild(_node);return _node;};this.getNode=function(){return _node;};}
ReturnToRegularSiteControl.prototype.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_BOTTOM_LEFT,new nmm.Size(15,20));};function GeoLocationControl(printable,selectable){var _node;function onbuttonclick(e){}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(){_node=document.createElement('div');nmev.addDomListener(_node,'click',onbuttonclick);return _node;};}
function IPhoneNavControl(printable,selectable){var _node;var _sprite=nmm.sprites.zoom;function createBackground(){var frag=document.createDocumentFragment();var borderTop=document.createElement('div');var middle=document.createElement('div');var borderBottom=document.createElement('div');nms.css(borderTop,{'clip':'rect(50px 27px 56px 0px)','height':'56px','width':'27px','position':'absolute','top':'-50px','left':'0px'},true);nms.applyPngAlphaBg(borderTop,_sprite.url);nms.css(middle,{'clip':'rect(0px 57px 67px 30px)','height':'67px','width':_sprite.size.getWidthString(),'position':'absolute','top':'6px','left':'-30px'},true);nms.applyPngAlphaBg(middle,_sprite.url,true);nms.css(borderBottom,{'clip':'rect(61px 27px 67px 0px)','height':'67px','width':'27px','position':'absolute','top':'12px','left':'0px'},true);nms.applyPngAlphaBg(borderBottom,_sprite.url);frag.appendChild(borderTop);frag.appendChild(middle);frag.appendChild(borderBottom);return frag;}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){var frag=document.createDocumentFragment();var reset=new ResetControl(printable,selectable);var geo=new GeoLocationControl(printable,selectable);var resetNode=reset.initialize(map);_node=document.createElement('div');nms.css(_node,{'height':'80px','width':'30px'},true);nms.css(resetNode,{'position':'absolute','top':'53px','left':'4px'});nmev.addDomListener(_node,'dblclick',nmev.stopBubbling);nmev.addDomListener(_node,'mousedown',nmev.stopBubbling);nmev.addDomListener(_node,'mouseup',nmev.stopBubbling);frag.appendChild(_node);_node.appendChild(createBackground());_node.appendChild(resetNode);map.getContainer().appendChild(frag);return _node;};this.getNode=function(){return _node;};}
IPhoneNavControl.prototype.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(15,50));};function DynamicLayersControl(printable,selectable){var _node;var _map;var _handlers=[];var _layerManagers={};var _icon;var _minZoom=0;var _maxZoom=24;var _mapDragging=false;function ondragstart(){_mapDragging=true;}
function ondragend(){_mapDragging=false;}
function onmenuover(e){if(!_mapDragging){this.lastChild.style.visibility='visible';}}
function onmenuout(e){this.lastChild.style.visibility='hidden';}
function oncheckboxclick(e){var manager;if(this.checked){manager=new nmov.MarkerManager(_map,{borderPadding:200});_layerManagers[this.value]=manager;addLayer(this.value,manager);}
else{_layerManagers[this.value].clearMarkers();delete _layerManagers[this.value];}}
function saveHistory(title,latlng,zoom,mapType,tileDate){var newState;var oldState;var oldTileDate=_map.getTileDate();var oldNmDate=(oldTileDate?nml.DateHelper.toNearmapDateUTC(oldTileDate):null);var newNmDate=(tileDate?nml.DateHelper.toNearmapDateUTC(tileDate):null);oldState=nmo.Synchronize.fill({title:document.title,latlng:_map.getCenter().toString(),zoom:_map.getZoom(),mapType:nmm.MapType.Keys[_map.getCurrentMapType().getName(false)],tileDate:oldNmDate},nmlh.MapHistoryState);newState=nmo.Synchronize.fill({title:title,latlng:latlng.toString(),zoom:zoom,mapType:nmm.MapType.Keys[mapType.getName(false)],tileDate:newNmDate},nmlh.MapHistoryState);nmlh.save(newState,title,oldState);}
function ongotolinkclick(e){var ll;var zoom;var mapType;var tileDate;var mapHttp;e=e||window.event;mapHttp=new nmh.MapHttpRequest(this.href);ll=mapHttp.getLatLng();zoom=mapHttp.getZoom();mapType=mapHttp.getMapType();tileDate=mapHttp.getTileDate();if(!ll){ll=_map.getCenter();}
if(!zoom){zoom=_map.getZoom();}
if(!mapType){mapType=_map.getCurrentMapType();}
if(!tileDate){tileDate=_map.getTileDate();}
saveHistory(this.title,ll,zoom,mapType,tileDate);_map.setCenter(ll,zoom,mapType,tileDate,true,true);return nmev.preventDefault(e);}
function onmarkerclick(latlng,locationUrl,forumUrl,title,infoOpts){var node=document.createElement('div');var head=document.createElement('h3');var linkList=document.createElement('ul');var goToItem=document.createElement('li');var forumItem=document.createElement('li');var goToLink=document.createElement('a');var forumLink=document.createElement('a');var spacer=document.createElement('span');goToLink.href=locationUrl;forumLink.href=forumUrl;nms.css(head,{'font-size':'1.15em','padding':'5px 25px 5px 15px'},true);nms.css(linkList,{'background':'#f0f0f0','border-top':'solid 1px #e4e4e4','color':'#004687','font-size':'.9em','padding':'5px 10px','position':'relative','list-style':'none'},true);nms.css(goToItem,{'display':'inline'},true);nms.css(forumItem,{'display':'inline'},true);nms.css(spacer,{'margin':'0px 5px','position':'relative','top':'-1px','vertical-align':'top'},true);nms.css(goToLink,{'color':'#004687','font-weight':'bold','text-decoration':'none'},true);nms.css(forumLink,{'color':'#004687','font-weight':'bold','text-decoration':'none'},true);goToLink.onclick=nmev.callback(goToLink,ongotolinkclick);if(title){node.appendChild(head);head.innerHTML=title;goToLink.title=title;}
node.appendChild(linkList);linkList.appendChild(goToItem);linkList.appendChild(forumItem);goToItem.appendChild(goToLink);forumItem.appendChild(spacer);forumItem.appendChild(forumLink);spacer.appendChild(document.createTextNode('|'));goToLink.appendChild(document.createTextNode('Go here'));forumLink.appendChild(document.createTextNode('Forum post'));_map.openInfoWindow(latlng,node,infoOpts);}
function addLayer(layerId,markerManager){ajax.getJSON(nmm.DYNAMIC_LAYER_POINTS_URL_JSONP.replace(/\{L\}/,layerId),function(data){var markers=[];var bounds=_map.getBounds();var inBounds=false;var sw=bounds.getSouthWest();var ne=bounds.getNorthEast();var minLat=sw.lat();var maxLat=ne.lat();var minLng=sw.lng();var maxLng=ne.lng();var iconSize=_icon.iconSize;var marker;var layerPoint;var location;var latlng;var nsw,nne;var zoomOutBounds;var boundsZoomLevel;var infoOpts;var opts;if(data.length<=0){return;}
infoOpts={pixelOffset:new nmm.Size(0,-iconSize.height),maxWidth:500};for(var i=data.length;i--;){layerPoint=data[i];opts={icon:_icon,title:(layerPoint.title?layerPoint.title:undefined)};location=layerPoint.location;latlng=new nmm.LatLng(location.lat,location.lng);marker=new nmov.Marker(latlng,opts);nmev.addListener(marker,'click',nmev.callbackArgs(marker,onmarkerclick,layerPoint.link,layerPoint.forumlink,layerPoint.title,infoOpts));markers.push(marker);if(!inBounds){inBounds=bounds.containsLatLng(latlng);}
if(!inBounds){if(minLat>latlng.lat()){minLat=latlng.lat();}
if(maxLat<latlng.lat()){maxLat=latlng.lat();}
if(minLng>latlng.lng()){minLng=latlng.lng();}
if(maxLng<latlng.lng()){maxLng=latlng.lng();}}}
markerManager.addMarkers(markers,_minZoom,_maxZoom);if(!inBounds){nsw=new nmm.LatLng(minLat,minLng);nne=new nmm.LatLng(maxLat,maxLng);zoomOutBounds=new nmm.LatLngBounds(nsw,nne);boundsZoomLevel=_map.getBoundsZoomLevel(zoomOutBounds,_map.getSize(),1);if(boundsZoomLevel>=1){boundsZoomLevel--;}
_map.setCenter(zoomOutBounds.getCenter(),boundsZoomLevel,_map.getCurrentMapType(),_map.getTileDate(),true,true);}
markerManager.refresh();});}
function createIcons(layers){var icon=nmov.Icon.DEFAULT_ICON;return icon;}
function createSubMenuBackground(){var frag=document.createDocumentFragment();return frag;}
function createCheckbox(layer,isLast){var frag=document.createDocumentFragment();var wrap=document.createElement('div');var checkCol=document.createElement('td');var nameCol=document.createElement('td');var checkbox=document.createElement('input');var layerName=document.createElement('label');var prefix='nmdl';checkbox.type='checkbox';checkbox.id=prefix+layer.name;checkbox.value=layer.id;layerName.htmlFor=checkbox.id;nms.css(wrap,{'clear':'both','float':'left','margin-bottom':(isLast?'0px':'10px'),'width':'100%'},true);nms.css(checkbox,{'display':'inline','float':'left','margin':'2px 5px 0px 10px','vertical-align':'top'},true);nms.css(layerName,{'display':'inline','float':'left','font-size':'12px','font-weight':'bold','width':'100px'},true);nmev.addDomListener(checkbox,'click',nmev.callback(checkbox,oncheckboxclick));frag.appendChild(wrap);wrap.appendChild(checkbox);wrap.appendChild(layerName);layerName.appendChild(document.createTextNode(layer.name));return frag;}
function processLayers(menuContainer,bgContainer){return function(data){var horizSprite=nmls.BUTTONS;var vertSprite=nmls.BUTTONS_VERTICAL;var menuFrag=document.createDocumentFragment();var bgFrag=document.createDocumentFragment();var contentWrap=document.createElement('div');var footerWrap=document.createElement('div');var cornerSize=new nmm.Size(10,10);var leftCorner=nmls.createClippedSprite(horizSprite,cornerSize,new nmm.Point(105,150));var rightCorner=nmls.createClippedSprite(horizSprite,cornerSize,new nmm.Point(90,150));var bottomBorder;var leftBorder;var rightBorder;var contentBg;var len=data.length;var width;var height;var ieFocusFix;_icon=createIcons(data);for(var i=0;i<len;i++){menuFrag.appendChild(createCheckbox(data[i],i===len-1));}
menuContainer.appendChild(menuFrag);width=menuContainer.offsetWidth;height=menuContainer.offsetHeight;leftBorder=nmls.createClippedSprite(vertSprite,new nmm.Size(cornerSize.width,height),new nmm.Point(0,0),{x:false,y:true});contentBg=nmls.createClippedSprite(nmls.BUTTONS_BG,new nmm.Size(width-(cornerSize.width*2),height),new nmm.Point(0,0),{x:true,y:true});rightBorder=nmls.createClippedSprite(vertSprite,new nmm.Size(cornerSize.width,height),new nmm.Point(15,0),{x:false,y:true});bottomBorder=nmls.createClippedSprite(horizSprite,new nmm.Size(width-(cornerSize.width*2),cornerSize.height),new nmm.Point(0,174));nms.css(contentWrap,{'overflow':'hidden','width':width+'px'},true);nms.css(footerWrap,{'height':cornerSize.getHeightString(),'overflow':'hidden','position':'relative'},true);nms.css(bottomBorder.firstChild,{'position':'absolute','left':cornerSize.getWidthString()},true);nms.css(rightCorner.firstChild,{'position':'absolute','left':(width-cornerSize.width)+'px'},true);bgFrag.appendChild(contentWrap);bgFrag.appendChild(footerWrap);contentWrap.appendChild(leftBorder);contentWrap.appendChild(contentBg);contentWrap.appendChild(rightBorder);footerWrap.appendChild(leftCorner);footerWrap.appendChild(bottomBorder);footerWrap.appendChild(rightCorner);bgContainer.appendChild(bgFrag);if(nmc.browser.msie&&nmc.browser.majorVersion<=6){ieFocusFix=document.createElement('iframe');ieFocusFix.setAttribute('allowtransparency','true');ieFocusFix.frameBorder=0;nms.css(ieFocusFix,{'filter':'chroma(color="#FFFFFF")','position':'absolute','width':width+'px','height':height+'px'},true);bgContainer.parentNode.insertBefore(ieFocusFix,bgContainer);}
_node.style.visibility='visible';};}
this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.getNode=function(){return _node;};this.initialize=function(map){var btnSprite=nmls.BUTTONS;var frag=document.createDocumentFragment();var moreBtn=document.createElement('a');var btnEdgeSize=new nmm.Size(3,26);var btnLeftEdge=nmls.createClippedSprite(btnSprite,btnEdgeSize,new nmm.Point(5,28));var btnRightEdge=nmls.createClippedSprite(btnSprite,btnEdgeSize,new nmm.Point(0,28));var btnContent=document.createElement('span');var subMenuWrap=document.createElement('div');var subMenuBg=document.createElement('div');var subMenu=document.createElement('div');var width=150;var ieFocusFix;_map=map;_node=document.createElement('div');nms.css(moreBtn,{'cursor':'pointer','float':'left','padding':'0px 0px 10px 0px'},true);nms.css(btnLeftEdge.firstChild,{'overflow':'hidden'});nms.css(btnRightEdge.firstChild,{'overflow':'hidden'});nms.css(btnContent,{'background':'url('+btnSprite.url+') repeat-x','float':'left','font-size':'13px','font-weight':'bold','height':btnEdgeSize.getHeightString(),'line-height':'25px','padding':'0px 5px'},true);nms.css(subMenuWrap,{'position':'absolute','top':'35px','left':'0px','visibility':'hidden','width':width+'px'},true);nms.css(subMenu,{'cursor':'default','display':'block','list-style':'none','padding':'10px 0px 0px 0px','position':'absolute','top':'0px','left':'0px','width':width+'px'},true);nms.css(subMenuBg,{'overflow':'hidden'},true);nmev.addDomListener(_node,'mouseover',nmev.callback(_node,onmenuover));nmev.addDomListener(_node,'mouseout',nmev.callback(_node,onmenuout));nmev.addListener(_map,'dragstart',ondragstart);nmev.addListener(_map,'dragend',ondragend);if(!this.selectable()){nmev.disableSelect(_node);}
frag.appendChild(_node);_node.appendChild(moreBtn);_node.appendChild(subMenuWrap);moreBtn.appendChild(btnLeftEdge);moreBtn.appendChild(btnContent);moreBtn.appendChild(btnRightEdge);subMenuWrap.appendChild(subMenuBg);subMenuWrap.appendChild(subMenu);btnContent.appendChild(document.createTextNode('More...'));map.getContainer().appendChild(frag);if(nmc.browser.msie){ieFocusFix=document.createElement('iframe');ieFocusFix.setAttribute('allowtransparency','true');ieFocusFix.setAttribute('scrolling','no');ieFocusFix.frameBorder=0;nms.css(ieFocusFix,{'filter':'chroma(color="#FFFFFF")','height':'36px','width':width+'px','position':'absolute','top':'0px','left':'0px'},true);_node.insertBefore(ieFocusFix,moreBtn);}
ajax.getJSON(nmm.DYNAMIC_LAYERS_URL_JSONP,processLayers(subMenu,subMenuBg));return _node;};}
function SmallMapControl(){}
SmallMapControl.prototype=new Control(false,false);SmallMapControl.prototype.initialize=function(map){};SmallMapControl.prototype.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_LEFT,new nmm.Size(0,0));};function HierarchicalMapTypeControl(){var relationships;}
HierarchicalMapTypeControl.prototype=new Control(false,false);HierarchicalMapTypeControl.prototype.initialize=function(map){};HierarchicalMapTypeControl.prototype.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_RIGHT,new nmm.Size(0,0));};function OverviewMapControl(){}
OverviewMapControl.prototype=new Control(false,false);OverviewMapControl.prototype.initialize=function(map){};OverviewMapControl.prototype.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_RIGHT,new nmm.Size(0,0));};function NavLabelControl(){}
NavLabelControl.prototype=new Control(false,false);NavLabelControl.prototype.initialize=function(map){};NavLabelControl.prototype.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_TOP_RIGHT,new nmm.Size(0,0));};function NearmapBar(printable,selectable){this.printable=function(){return Boolean(printable);};this.selectable=function(){return Boolean(selectable);};this.initialize=function(map){};this.getDefaultPosition=function(){return new ControlPosition(ControlAnchor.ANCHOR_BOTTOM_LEFT,new nmm.Size(10,10));};}
nmm.ControlAnchor=ControlAnchor;nmm.ControlPosition=ControlPosition;nmm.Control=Control;nmm.SmallMapControl=SmallMapControl;nmm.LargeMapControl=LargeMapControl;nmm.LargeMapControl3D=LargeMapControl3D;nmm.SmallZoomControl=SmallZoomControl;nmm.SmallZoomControl3D=SmallZoomControl3D;nmm.LargeZoomControl=LargeZoomControl;nmm.ScaleControl=ScaleControl;nmm.ShadowControl=ShadowControl;nmm.MapTypeControl=MapTypeControl;nmm.ToggleAndRotateMapTypeViewControl=ToggleAndRotateMapTypeViewControl;nmm.MenuMapTypeControl=MenuMapTypeControl;nmm.HierarchicalMapTypeControl=HierarchicalMapTypeControl;nmm.OverviewMapControl=OverviewMapControl;nmm.NavLabelControl=NavLabelControl;nmm.TimelineControl=TimelineControl;nmm.TimelineControlOptions=TimelineControlOptions;nmm.LatestImageryControl=LatestImageryControl;nmm.ReturnToRegularSiteControl=ReturnToRegularSiteControl;nmm.IPhoneNavControl=IPhoneNavControl;nmm.GeoLocationControl=GeoLocationControl;nmm.DynamicLayersControl=DynamicLayersControl;})();