+ layer.addFeatures(feature);
+ map.noteSelector.unselectAll();
+ map.noteSelector.select(feature);
+ map.noteMover.activate();
+ map.noteLayer.setVisibility(true);
+ };
+
+ map.noteLayer = new OpenLayers.Layer.Vector("Notes", {
+ visibility: false,
+ displayInLayerSwitcher: false,
+ projection: new OpenLayers.Projection("EPSG:4326"),
+ styleMap: new OpenLayers.StyleMap(new OpenLayers.Style({
+ graphicWidth: 22,
+ graphicHeight: 22,
+ graphicOpacity: 0.7,
+ graphicXOffset: -11,
+ graphicYOffset: -11
+ }, {
+ rules: [
+ new OpenLayers.Rule({
+ filter: new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.EQUAL_TO,
+ property: "status",
+ value: "new"
+ }),
+ symbolizer: {
+ externalGraphic: "<%= image_path 'new_note_marker.png' %>"
+ }
+ }),
+ new OpenLayers.Rule({
+ filter: new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.EQUAL_TO,
+ property: "status",
+ value: "open"
+ }),
+ symbolizer: {
+ externalGraphic: "<%= image_path 'open_note_marker.png' %>"
+ }
+ }),
+ new OpenLayers.Rule({
+ filter: new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.EQUAL_TO,
+ property: "status",
+ value: "closed"
+ }),
+ symbolizer: {
+ externalGraphic: "<%= image_path 'closed_note_marker.png' %>"
+ }
+ })
+ ]
+ })),
+ strategies: [
+ new OpenLayers.Strategy.BBOX()
+ ],
+ protocol: new OpenLayers.Protocol.HTTP({
+ url: notesUrl,
+ format: new OpenLayers.Format.GeoJSON()
+ })
+ });
+
+ map.noteLayer.events.register("beforefeaturesremoved", map, saveNewNotes);
+ map.noteLayer.events.register("featuresremoved", map, restoreNewNotes);
+ map.noteLayer.events.register("featureselected", map, noteSelected);
+ map.noteLayer.events.register("featureunselected", map, noteUnselected);
+
+ map.addLayer(map.noteLayer);
+
+ map.noteSelector = new OpenLayers.Control.SelectFeature(map.noteLayer, {
+ autoActivate: true
+ });
+
+ map.addControl(map.noteSelector);
+
+ map.noteMover = new OpenLayers.Control.DragFeature(map.noteLayer, {
+ onDrag: function (feature, pixel) {
+ feature.popup.lonlat = feature.geometry.getBounds().getCenterLonLat();
+ feature.popup.updatePosition();
+ },
+ featureCallbacks: {
+ over: function (feature) {
+ if (feature.attributes.status === "new") {
+ map.noteMover.overFeature.apply(map.noteMover, [feature]);
+ }
+ }
+ }
+ });
+
+ map.addControl(map.noteMover);