var proj4326=new OpenLayers.Projection("EPSG:4326"),projmerc=new OpenLayers.Projection("EPSG:900913");var map,nav,permalink,selectControl;var baselayers={};var mlon=null,mlat=null;var overlays=[];var osm_overlays={};var all_features={};function parseParams(c){var a=location.search.substr(1);if(a!=""){paras=a.split("&");for(var b=0;b<paras.length;b++){var d=paras[b].split("=");c(d[0],d[1])}}}function MapPosition(c,b,a){this.lon=c;this.lat=b;this.zoom=a}MapPosition.prototype.getLonLat=function(){return new OpenLayers.LonLat(this.lon,this.lat)};MapPosition.prototype.tileX=function(){if((this.zoom<3)||(this.zoom>18)){return 0}return Math.round((1<<(this.zoom-3))*(this.lon+180)/45)};MapPosition.prototype.tileY=function(){if((this.zoom<3)||(this.zoom>18)){return 0}var b=this.lat/180*Math.PI;var a=Math.log(Math.tan(b)+(1/Math.cos(b)));return Math.round((1<<(this.zoom-1))*(Math.PI-a)/Math.PI)};function createMapPositionFromTiles(a,e,b){var d;var c;if((b<3)||(b>18)){d=0}else{d=(a+0.5)*45/(1<<(b-3))-180}if((b<3)||(b>18)){c=0}else{c=Math.atan(sinh(Math.PI-(Math.PI*(e+0.5)/(1<<(b-1)))))*180/Math.PI}return new MapPosition(d,c,b)}function sinh(a){return(Math.exp(a)-Math.exp(-a))/2}function createMapPosition(d,c,a,e,b){if(a!=null&&e!=null){return createMapPositionFromTiles(a,e,b)}else{if(d!=null&&c!=null){return new MapPosition(d,c,b)}else{return new MapPosition(0,0,b)}}}function initLocationFromURL(){var d=location.hash.substring(1);if(d==""){return}var a=jQuery("#boo-features-"+d);if(a[0]){a.show();return}for(var e in overlays){var b=overlays[e].features;for(var c in b){if(d==b[c].fid){map.setCenter(b[c].geometry.getBounds().getCenterLonLat(),parseInt(b[c].data.zoom,10));if(b[c].data.basemap){map.setBaseLayer(baselayers[b[c].data.basemap])}return}}}}function onFeatureSelect(a){selectedFeature=a;text='<div class="popupcontent"><a class="zoom-to-location" href="#'+a.fid+'">Zoom to location</a><a class="zoom-to-location" href="#'+a.fid+'"><img src="/data/img/'+a.fid+'.png" alt="" width="100" height="100" style="float: left; padding: 1px; border: 1px solid #cccccc; margin: 1px 4px 2px 1px;"/></a><div style="font-size: x-large">'+a.data.name+"</div>"+a.data.description+"</div>";if(a.data.link){text+='<div style="clear: both;"><a target="_blank" href="'+a.data.link+'">'+a.data.link+"</a></div>"}popup=new OpenLayers.Popup.FramedCloud("feature",a.geometry.getBounds().getCenterLonLat(),null,text,a.marker,true,function(b){selectControl.unselect(selectedFeature)});a.popup=popup;map.addPopup(popup);popup.updateSize();jQuery("div.popupcontent a.zoom-to-location").bind("mouseup",function(){selectControl.unselect(selectedFeature);zoomToFeature(selectedFeature);return false})}function onFeatureUnselect(a){map.removePopup(a.popup);a.popup.destroy();a.popup=null}function zoomToFeature(a){map.setCenter(a.geometry.getBounds().getCenterLonLat(),parseInt(a.data.zoom,10));if(a.data.basemap){map.setBaseLayer(baselayers[a.data.basemap])}}function updateChanged(){var a=map.getCenter().clone().transform(projmerc,proj4326);var c=map.getZoom();var b=location.pathname+"?type="+map.baseLayer.lid+"&lon="+a.lon.toFixed(5)+"&lat="+a.lat.toFixed(5)+"&zoom="+c;if(mlon&&mlat){b+="&mlon="+mlon+"&mlat="+mlat}permalink.attr("href",b);jQuery("#customZoomLevel").html("zoom="+map.getZoom())}function initOverlaysDiv(d){var b=osm_overlays[d].features;var a="";for(var c in b.sort(function(f,e){return f.data.name==e.data.name?0:(f.data.name<e.data.name?-1:1)})){all_features[b[c].fid]=b[c];a+='<li><a href="#'+b[c].fid+'">'+b[c].data.name+"</a></li>"}jQuery("#boo-features-"+d).hide();jQuery("#boo-features-"+d).html("<ul>"+a+"</ul>");jQuery("#boo-features li a").bind("mouseup",function(f){var e=f.target.attributes.href.nodeValue;var g=e.substr(e.indexOf("#")+1);zoomToFeature(all_features[g])})}function init(){var j="mapnik";var b=0;var f=43;var k=2;var i=null;var g=null;OpenLayers.ImgPath=OpenLayers._getScriptLocation()+"theme/geofabrik/img/";parseParams(function(m,l){switch(m){case"type":j=l;break;case"lon":b=Number(l);break;case"lat":f=Number(l);break;case"zoom":k=parseInt(l,10);break;case"z":k=parseInt(l,10);break;case"x":i=parseInt(l,10);break;case"y":g=parseInt(l,10);break}});var h=createMapPosition(b,f,i,g,k);OpenLayers.IMAGE_RELOAD_ATTEMPTS=3;OpenLayers.Util.onImageLoadErrorColor="transparent";nav=new OpenLayers.Control.NavigationHistory({changebaselayer:true});map=new OpenLayers.Map("map",{theme:null,projection:projmerc,displayProjection:proj4326,controls:[new OpenLayers.Control.Navigation(),nav,new OpenLayers.Control.LayerSwitcher({activeColor:"#699dad"}),new OpenLayers.Control.MousePosition({div:jQuery("#customMousePosition").get(0)}),new OpenLayers.Control.PanZoomBar()],maxExtent:new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),numZoomLevels:18,maxResolution:156543.0339,units:"m"});nav.activate();var a=new OpenLayers.Control.Panel({div:OpenLayers.Util.getElement("panel")});a.addControls([nav.next,nav.previous]);map.addControl(a);jQuery("#panel div:first").attr("title","Show next map view");jQuery("#panel div:last").attr("title","Show previous map view");jQuery("#customMousePosition").hide();permalink=jQuery("#permalink");permalink.html("Permalink");OpenLayers.Util.OSM.MISSING_TILE_URL="/img/404.png";baselayers.mapnik=new OpenLayers.Layer.OSM.Mapnik("Mapnik",{lid:"mapnik"});baselayers.tilesathome=new OpenLayers.Layer.OSM.Osmarender("Tiles@Home",{lid:"tilesathome"});baselayers.cyclemap=new OpenLayers.Layer.OSM.CycleMap("CycleMap",{lid:"cyclemap"});baselayers.pubtrans=new OpenLayers.Layer.XYZ("Public Transport (EU only)","http://tile.xn--pnvkarte-m4a.de/tilegen/${z}/${x}/${y}.png",{lid:"pubtrans"});map.addLayers([baselayers.mapnik,baselayers.tilesathome,baselayers.cyclemap,baselayers.pubtrans]);map.setBaseLayer(baselayers[j]);var e={projection:proj4326,displayInLayerSwitcher:false,format:OpenLayers.Format.KML,formatOptions:{extractStyles:true,extractAttributes:true}};osm_overlays.bestof=new OpenLayers.Layer.GML("Best of OSM","/data/bestof.kml",e);osm_overlays.historic=new OpenLayers.Layer.GML("OSM History","/data/historic.kml",e);osm_overlays["import"]=new OpenLayers.Layer.GML("Data Imports","/data/import.kml",e);osm_overlays.interesting=new OpenLayers.Layer.GML("Interesting Places","/data/interesting.kml",e);overlays=[osm_overlays.bestof,osm_overlays.historic,osm_overlays["import"],osm_overlays.interesting];map.addLayers(overlays);for(var c in overlays){var d=0;overlays[c].events.register("loadend",null,function(){d++;if(d>=overlays.length){for(var l in osm_overlays){initOverlaysDiv(l)}initLocationFromURL()}})}selectControl=new OpenLayers.Control.SelectFeature(overlays,{onSelect:onFeatureSelect,onUnselect:onFeatureUnselect});map.addControl(selectControl);selectControl.activate();map.setCenter(h.getLonLat().transform(proj4326,projmerc),h.zoom);map.events.register("mouseover",null,function(){jQuery("#customMousePosition").show()});map.events.register("mouseout",null,function(){jQuery("#customMousePosition").hide()});map.events.register("move",null,updateChanged);map.events.register("changelayer",null,updateChanged);jQuery("form#boo-layers-form input").attr("checked",true);jQuery("form#boo-layers-form input").bind("click",function(l){var m=l.target.id.split("-")[2];osm_overlays[m].setVisibility(l.target.checked)});jQuery("table#boo-layers a.sil").bind("mouseup",function(l){var m="boo-features-"+l.target.hash.substr(1);jQuery("div#boo-features div").each(function(n,o){if(o.id==m){jQuery(o).show()}else{jQuery(o).hide()}})});updateChanged()};