1addInitEvent(function () {
2  this.init_osm = function (div) {
3    var params = this.getParams(div);
4    var points = this.readPoints(div);
5    while (div.firstChild) {
6      div.removeChild(div.firstChild);
7    }
8    var map = new OpenLayers.Map (div.id, {
9        controls:[
10          new OpenLayers.Control.Navigation(),
11          new OpenLayers.Control.PanZoomBar(),
12          new OpenLayers.Control.LayerSwitcher(),
13          new OpenLayers.Control.Attribution()],
14        maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
15        maxResolution: 156543.0399,
16        numZoomLevels: 19,
17        units: 'm',
18        projection: new OpenLayers.Projection("EPSG:900913"),
19        displayProjection: new OpenLayers.Projection("EPSG:4326")
20    } );
21
22    var layers = new Object();
23    layers['osmarender'] = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
24    layers['mapnik'] = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
25
26    if (!layers[params['layer']]) {
27      params['layer'] = 'mapnik';
28    }
29    map.addLayer(layers[params['layer']]);
30
31    for (var layer in layers) {
32      if (layer != params['layer']) {
33        map.addLayer(layers[layer]);
34      }
35    }
36
37    var layerMarkers = new OpenLayers.Layer.Markers("Markers");
38    map.addLayer(layerMarkers);
39
40    var lonLat = new OpenLayers.LonLat(params['lon'], params['lat']).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
41
42    map.setCenter(lonLat, params['zoom']);
43
44    if (isArray(points)) {
45      var pLonLat;
46      var size = new OpenLayers.Size(21,25);
47      var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
48      var icon;
49      for(var p = 0; p < points.length; p++) {
50        var point = points[p];
51        var pLonLat = new OpenLayers.LonLat(point.lon, point.lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
52        icon = new OpenLayers.Icon('http://www.openstreetmap.org/openlayers/img/marker.png',size,offset);
53        layerMarkers.addMarker(new OpenLayers.Marker(pLonLat,icon));
54      }
55    }
56  };
57  this.getParams = function (div) {
58    var url = div.getElementsByTagName('a')[0].href;
59    url = url.split('?')[1];
60    var params = url.split('&');
61    var param;
62    for (var j = 0; j < params.length; j++) {
63      param = params[j].split('=');
64      delete params[j];
65      if (param[0] != 'layer') {
66        param[1] = parseFloat(param[1]);
67      }
68      params[param[0]] = param[1];
69    }
70    return params;
71  };
72  this.readPoints = function (div) {
73    var comment = div.firstChild;
74    while (comment.nodeType != 8) {
75      comment = comment.nextSibling;
76    }
77    return eval(comment.data);
78  };
79  var osm_divs = getElementsByClass('openstreetmap', document, 'div');
80  for (var i=0; i < osm_divs.length; i++) {
81    var osm_div = osm_divs[i];
82    osm_div.id = 'osm_'+i;
83    this.init_osm(osm_div);
84  }
85});
86