-</script>
-<script type="text/javascript" src="/javascripts/OpenLayers.js"></script>
-
- <script type="text/javascript">
- <!--
- var map, layer;
-
-
- function init(){
-
- OpenLayers.Util.onImageLoadError = function() {
- this.src = "http://<%= SERVER_URL %>/javascript/img/404.png";
- }
- map = new OpenLayers.Map( "map",
- {maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), maxZoomLevel:18, maxResolution:156543, units:'meters', projection: "EPSG:41001"} );
- layer = new OpenLayers.Layer.LikeGoogle( "Mapnik", "http://tile.openstreetmap.org/", {type:'png'} );
- map.addLayer(layer);
- layer = new OpenLayers.Layer.LikeGoogle( "Osmarender", "http://dev.openstreetmap.org/~ojw/Tiles/tile.php/", {type:'png'} );
- map.addLayer(layer);
-
- map.addControl(new OpenLayers.Control.LayerSwitcher());
- map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
-
- map.events.register("moveend", map, function() {
- var lonlat = map.getCenter();
-
- var lon_deg = (lonlat.lon / 20037508.34) * 180;
- var lat_deg = (lonlat.lat / 20037508.34) * 180;
- var PI = 3.14159265358979323846;
- lat_deg = 180/PI * (2 * Math.atan(Math.exp(lat_deg * PI / 180)) - PI / 2);
- var zoom = map.getZoom();
- updatelinks(lon_deg,lat_deg,zoom);
- });
- }
-
-
- init();
- // -->
- </script>
+<%= javascript_include_tag '/openlayers/OpenLayers.js' %>
+<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %>
+<%= javascript_include_tag 'map.js' %>
+
+
+<script type="text/javascript" defer="defer">
+ <!--
+ var brokenContentSize = $("content").offsetWidth == 0;
+ var marker;
+ var map;
+
+ function mapInit(){
+ map = createMap("map");
+
+ <% unless OSM_STATUS == :api_offline or OSM_STATUS == :database_offline %>
+ map.dataLayer = new OpenLayers.Layer("Data", { "visibility": false });
+ map.dataLayer.events.register("visibilitychanged", map.dataLayer, toggleData);
+ map.addLayer(map.dataLayer);
+ <% end %>
+
+ <% if bbox %>
+ var bbox = new OpenLayers.Bounds(<%= minlon %>, <%= minlat %>, <%= maxlon %>, <%= maxlat %>);
+
+ setMapExtent(bbox);
+ <% if box %>
+ // IE requires Vector layers be initialised on page load, and not under deferred script conditions
+ Event.observe(window, 'load', function() {addBoxToMap(bbox)});
+ <% end %>
+ <% else %>
+ var centre = new OpenLayers.LonLat(<%= lon %>, <%= lat %>);
+ var zoom = <%= zoom %>;
+
+ <% if params['scale'] and params['scale'].length > 0 then %>
+ zoom = scaleToZoom(<%= params['scale'].to_f() %>);
+ <% end %>
+
+ setMapCenter(centre, zoom);
+ <% end %>
+
+ <% if !layers.nil? and !layers.empty? %>
+ setMapLayers("<%= layers %>");
+ <% end %>
+
+ <% if marker %>
+ marker = addMarkerToMap(new OpenLayers.LonLat(<%= mlon %>, <%= mlat %>));
+ <% end %>
+
+ map.events.register("zoomend", map, updateKey);
+
+ map.events.register("moveend", map, updateLocation);
+ map.events.register("changelayer", map, updateLocation);
+ updateLocation();
+
+ handleResize();
+ }
+
+ function toggleData() {
+ if (map.dataLayer.visibility) {
+ <%= remote_function :url => { :controller => 'browse', :action => 'start' } %>
+ } else {
+ closeSidebar();
+ }
+ }
+
+ function getPosition() {
+ return getMapCenter();
+ }
+
+ function setPosition(lat, lon, zoom) {
+ var centre = new OpenLayers.LonLat(lon, lat);
+
+ setMapCenter(centre, zoom);
+
+ if (marker)
+ removeMarkerFromMap(marker);
+
+ marker = addMarkerToMap(centre, getArrowIcon());
+ }
+
+ function updateLocation() {
+ var lonlat = getMapCenter();
+ var zoom = map.getZoom();
+ var layers = getMapLayers();
+ var extents = getMapExtent();
+
+ updatelinks(lonlat.lon, lonlat.lat, zoom, layers, extents.left, extents.bottom, extents.right, extents.top);