[OpenLayers-Commits] r10994 - in sandbox/ahocevar/renderer-ng: . build examples lib lib/OpenLayers lib/OpenLayers/BaseTypes lib/OpenLayers/Control lib/OpenLayers/Feature lib/OpenLayers/Filter lib/OpenLayers/Format lib/OpenLayers/Format/ArcXML lib/OpenLayers/Format/CSWGetDomain lib/OpenLayers/Format/CSWGetRecords lib/OpenLayers/Format/Filter lib/OpenLayers/Format/GML lib/OpenLayers/Format/OWSCommon lib/OpenLayers/Format/OWSContext lib/OpenLayers/Format/SLD lib/OpenLayers/Format/SOSCapabilities lib/OpenLayers/Format/WFSCapabilities lib/OpenLayers/Format/WFST lib/OpenLayers/Format/WMC lib/OpenLayers/Format/WMSCapabilities lib/OpenLayers/Format/WMSDescribeLayer lib/OpenLayers/Format/WMTSCapabilities lib/OpenLayers/Geometry lib/OpenLayers/Handler lib/OpenLayers/Lang lib/OpenLayers/Layer lib/OpenLayers/Layer/Google lib/OpenLayers/Layer/MapServer lib/OpenLayers/Layer/Vector lib/OpenLayers/Layer/WMS lib/OpenLayers/Marker lib/OpenLayers/Popup lib/OpenLayers/Protocol lib/OpenLayers/Protocol/SOS li b/OpenLayers/Protocol/SQL lib/OpenLayers/Protocol/WFS lib/OpenLayers/Renderer lib/OpenLayers/Request lib/OpenLayers/Strategy lib/OpenLayers/Symbolizer lib/OpenLayers/Tile lib/OpenLayers/Tile/Image tests tests/BaseTypes tests/Control tests/Format tests/Format/WFST tests/Format/WMC tests/Geometry tests/Handler tests/Layer tests/Layer/WMS tests/Marker tests/Popup tests/Protocol tests/Renderer tests/Request tests/Strategy tests/Symbolizer tests/Tile tests/Tile/Image tests/manual theme/default tools

commits-20090109 at openlayers.org commits-20090109 at openlayers.org
Mon Jan 3 10:30:11 EST 2011


Author: ahocevar
Date: 2011-01-03 07:30:11 -0800 (Mon, 03 Jan 2011)
New Revision: 10994

Added:
   sandbox/ahocevar/renderer-ng/examples/bing-tiles.html
   sandbox/ahocevar/renderer-ng/examples/bing-tiles.js
   sandbox/ahocevar/renderer-ng/examples/donut.html
   sandbox/ahocevar/renderer-ng/examples/donut.js
   sandbox/ahocevar/renderer-ng/examples/example.js
   sandbox/ahocevar/renderer-ng/examples/graphic-name.js
   sandbox/ahocevar/renderer-ng/examples/kml-layer.js
   sandbox/ahocevar/renderer-ng/examples/simplify-linestring.html
   sandbox/ahocevar/renderer-ng/examples/simplify-linestring.js
   sandbox/ahocevar/renderer-ng/examples/single-tile.html
   sandbox/ahocevar/renderer-ng/examples/single-tile.js
   sandbox/ahocevar/renderer-ng/examples/strategy-cluster-extended.html
   sandbox/ahocevar/renderer-ng/examples/strategy-cluster-extended.js
   sandbox/ahocevar/renderer-ng/examples/wms-long-url.html
   sandbox/ahocevar/renderer-ng/examples/wms-long-url.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Bing.js
   sandbox/ahocevar/renderer-ng/tests/Layer/Bing.html
   sandbox/ahocevar/renderer-ng/tests/OpenLayers1.html
   sandbox/ahocevar/renderer-ng/tests/OpenLayers2.html
   sandbox/ahocevar/renderer-ng/tests/OpenLayers3.html
   sandbox/ahocevar/renderer-ng/tests/OpenLayers4.html
   sandbox/ahocevar/renderer-ng/tests/manual/google-v3-resize.html
   sandbox/ahocevar/renderer-ng/tests/manual/page-position.html
   sandbox/ahocevar/renderer-ng/tools/mkrelease.sh
Removed:
   sandbox/ahocevar/renderer-ng/examples/notile.html
   sandbox/ahocevar/renderer-ng/tests/OpenLayers.html
Modified:
   sandbox/ahocevar/renderer-ng/
   sandbox/ahocevar/renderer-ng/build/full.cfg
   sandbox/ahocevar/renderer-ng/build/library.cfg
   sandbox/ahocevar/renderer-ng/build/license.txt
   sandbox/ahocevar/renderer-ng/build/lite.cfg
   sandbox/ahocevar/renderer-ng/examples/GMLParser.html
   sandbox/ahocevar/renderer-ng/examples/Jugl.js
   sandbox/ahocevar/renderer-ng/examples/KMLParser.html
   sandbox/ahocevar/renderer-ng/examples/SLDSelect.html
   sandbox/ahocevar/renderer-ng/examples/WMSDescribeLayerParser.html
   sandbox/ahocevar/renderer-ng/examples/WMSPost.html
   sandbox/ahocevar/renderer-ng/examples/accessible.html
   sandbox/ahocevar/renderer-ng/examples/all-overlays-google.html
   sandbox/ahocevar/renderer-ng/examples/all-overlays.html
   sandbox/ahocevar/renderer-ng/examples/animated_panning.html
   sandbox/ahocevar/renderer-ng/examples/arcgis93rest.html
   sandbox/ahocevar/renderer-ng/examples/arcims-thematic.html
   sandbox/ahocevar/renderer-ng/examples/arcims.html
   sandbox/ahocevar/renderer-ng/examples/attribution.html
   sandbox/ahocevar/renderer-ng/examples/baseLayers.html
   sandbox/ahocevar/renderer-ng/examples/behavior-fixed-http-gml.html
   sandbox/ahocevar/renderer-ng/examples/bing.html
   sandbox/ahocevar/renderer-ng/examples/boxes-vector.html
   sandbox/ahocevar/renderer-ng/examples/boxes.html
   sandbox/ahocevar/renderer-ng/examples/browser-name.html
   sandbox/ahocevar/renderer-ng/examples/buffer.html
   sandbox/ahocevar/renderer-ng/examples/canvas.html
   sandbox/ahocevar/renderer-ng/examples/click-handler.html
   sandbox/ahocevar/renderer-ng/examples/click.html
   sandbox/ahocevar/renderer-ng/examples/controls.html
   sandbox/ahocevar/renderer-ng/examples/custom-control-point.html
   sandbox/ahocevar/renderer-ng/examples/custom-control.html
   sandbox/ahocevar/renderer-ng/examples/custom-style.html
   sandbox/ahocevar/renderer-ng/examples/debug.html
   sandbox/ahocevar/renderer-ng/examples/document-drag.html
   sandbox/ahocevar/renderer-ng/examples/doubleSetCenter.html
   sandbox/ahocevar/renderer-ng/examples/drag-feature.html
   sandbox/ahocevar/renderer-ng/examples/draw-feature.html
   sandbox/ahocevar/renderer-ng/examples/dynamic-text-layer.html
   sandbox/ahocevar/renderer-ng/examples/editingtoolbar-outside.html
   sandbox/ahocevar/renderer-ng/examples/editingtoolbar.html
   sandbox/ahocevar/renderer-ng/examples/events.html
   sandbox/ahocevar/renderer-ng/examples/example-list.html
   sandbox/ahocevar/renderer-ng/examples/example.html
   sandbox/ahocevar/renderer-ng/examples/filter-strategy.html
   sandbox/ahocevar/renderer-ng/examples/filter-strategy.js
   sandbox/ahocevar/renderer-ng/examples/filter.html
   sandbox/ahocevar/renderer-ng/examples/fractional-zoom.html
   sandbox/ahocevar/renderer-ng/examples/fullScreen.html
   sandbox/ahocevar/renderer-ng/examples/geojson.html
   sandbox/ahocevar/renderer-ng/examples/georss-flickr.html
   sandbox/ahocevar/renderer-ng/examples/georss-markers.html
   sandbox/ahocevar/renderer-ng/examples/georss.html
   sandbox/ahocevar/renderer-ng/examples/getfeature-wfs.html
   sandbox/ahocevar/renderer-ng/examples/getfeatureinfo-control.html
   sandbox/ahocevar/renderer-ng/examples/getfeatureinfo-popup.html
   sandbox/ahocevar/renderer-ng/examples/getfeatureinfo.html
   sandbox/ahocevar/renderer-ng/examples/gml-layer.html
   sandbox/ahocevar/renderer-ng/examples/google-reproject.html
   sandbox/ahocevar/renderer-ng/examples/google-v3-alloverlays.html
   sandbox/ahocevar/renderer-ng/examples/google-v3.html
   sandbox/ahocevar/renderer-ng/examples/google.html
   sandbox/ahocevar/renderer-ng/examples/graphic-name.html
   sandbox/ahocevar/renderer-ng/examples/graticule.html
   sandbox/ahocevar/renderer-ng/examples/gutter.html
   sandbox/ahocevar/renderer-ng/examples/highlight-feature.html
   sandbox/ahocevar/renderer-ng/examples/hover-handler.html
   sandbox/ahocevar/renderer-ng/examples/image-layer.html
   sandbox/ahocevar/renderer-ng/examples/intersects.html
   sandbox/ahocevar/renderer-ng/examples/kamap.html
   sandbox/ahocevar/renderer-ng/examples/kml-layer.html
   sandbox/ahocevar/renderer-ng/examples/kml-track.html
   sandbox/ahocevar/renderer-ng/examples/late-render.html
   sandbox/ahocevar/renderer-ng/examples/layer-opacity.html
   sandbox/ahocevar/renderer-ng/examples/layerLoadMonitoring.html
   sandbox/ahocevar/renderer-ng/examples/layerswitcher.html
   sandbox/ahocevar/renderer-ng/examples/lite.html
   sandbox/ahocevar/renderer-ng/examples/mapguide.html
   sandbox/ahocevar/renderer-ng/examples/mapserver.html
   sandbox/ahocevar/renderer-ng/examples/mapserver_untiled.html
   sandbox/ahocevar/renderer-ng/examples/marker-shadow.html
   sandbox/ahocevar/renderer-ng/examples/markerResize.html
   sandbox/ahocevar/renderer-ng/examples/markers.html
   sandbox/ahocevar/renderer-ng/examples/markersTextLayer.html
   sandbox/ahocevar/renderer-ng/examples/measure.html
   sandbox/ahocevar/renderer-ng/examples/mm.html
   sandbox/ahocevar/renderer-ng/examples/modify-feature.html
   sandbox/ahocevar/renderer-ng/examples/mouse-position.html
   sandbox/ahocevar/renderer-ng/examples/mousewheel-interval.html
   sandbox/ahocevar/renderer-ng/examples/multimap-mercator.html
   sandbox/ahocevar/renderer-ng/examples/multiserver.html
   sandbox/ahocevar/renderer-ng/examples/mvs.html
   sandbox/ahocevar/renderer-ng/examples/navigation-control.html
   sandbox/ahocevar/renderer-ng/examples/navigation-history.html
   sandbox/ahocevar/renderer-ng/examples/navtoolbar-alwaysZoom.html
   sandbox/ahocevar/renderer-ng/examples/navtoolbar-outsidemap.html
   sandbox/ahocevar/renderer-ng/examples/navtoolbar.html
   sandbox/ahocevar/renderer-ng/examples/ordering.html
   sandbox/ahocevar/renderer-ng/examples/osm-google.html
   sandbox/ahocevar/renderer-ng/examples/osm-layer.html
   sandbox/ahocevar/renderer-ng/examples/osm.html
   sandbox/ahocevar/renderer-ng/examples/outOfRangeMarkers.html
   sandbox/ahocevar/renderer-ng/examples/overviewmap.html
   sandbox/ahocevar/renderer-ng/examples/pan-zoom-panels.html
   sandbox/ahocevar/renderer-ng/examples/panel.html
   sandbox/ahocevar/renderer-ng/examples/point-track-markers.html
   sandbox/ahocevar/renderer-ng/examples/popupMatrix.html
   sandbox/ahocevar/renderer-ng/examples/popups.html
   sandbox/ahocevar/renderer-ng/examples/projected-map.html
   sandbox/ahocevar/renderer-ng/examples/protocol-gears.html
   sandbox/ahocevar/renderer-ng/examples/proxy.cgi
   sandbox/ahocevar/renderer-ng/examples/regular-polygons.html
   sandbox/ahocevar/renderer-ng/examples/resize-features.html
   sandbox/ahocevar/renderer-ng/examples/restricted-extent.html
   sandbox/ahocevar/renderer-ng/examples/rotate-features.html
   sandbox/ahocevar/renderer-ng/examples/select-feature-multilayer.html
   sandbox/ahocevar/renderer-ng/examples/select-feature-openpopup.html
   sandbox/ahocevar/renderer-ng/examples/select-feature.html
   sandbox/ahocevar/renderer-ng/examples/setextent.html
   sandbox/ahocevar/renderer-ng/examples/sld-parser.html
   sandbox/ahocevar/renderer-ng/examples/sld.html
   sandbox/ahocevar/renderer-ng/examples/snap-split.html
   sandbox/ahocevar/renderer-ng/examples/snapping.html
   sandbox/ahocevar/renderer-ng/examples/sos.html
   sandbox/ahocevar/renderer-ng/examples/spherical-mercator.html
   sandbox/ahocevar/renderer-ng/examples/split-feature.html
   sandbox/ahocevar/renderer-ng/examples/strategy-bbox.html
   sandbox/ahocevar/renderer-ng/examples/strategy-cluster-threshold.html
   sandbox/ahocevar/renderer-ng/examples/strategy-cluster.html
   sandbox/ahocevar/renderer-ng/examples/strategy-paging.html
   sandbox/ahocevar/renderer-ng/examples/style-rules.html
   sandbox/ahocevar/renderer-ng/examples/style-rules.js
   sandbox/ahocevar/renderer-ng/examples/stylemap.html
   sandbox/ahocevar/renderer-ng/examples/styles-context.html
   sandbox/ahocevar/renderer-ng/examples/styles-rotation.html
   sandbox/ahocevar/renderer-ng/examples/styles-unique.html
   sandbox/ahocevar/renderer-ng/examples/sundials-spherical-mercator.html
   sandbox/ahocevar/renderer-ng/examples/sundials.html
   sandbox/ahocevar/renderer-ng/examples/symbolizers-fill-stroke-graphic.html
   sandbox/ahocevar/renderer-ng/examples/teleportation.html
   sandbox/ahocevar/renderer-ng/examples/tilecache.html
   sandbox/ahocevar/renderer-ng/examples/tms.html
   sandbox/ahocevar/renderer-ng/examples/transform-feature.html
   sandbox/ahocevar/renderer-ng/examples/transition.html
   sandbox/ahocevar/renderer-ng/examples/urban.html
   sandbox/ahocevar/renderer-ng/examples/ve-novibrate.html
   sandbox/ahocevar/renderer-ng/examples/ve.html
   sandbox/ahocevar/renderer-ng/examples/vector-features-with-text.html
   sandbox/ahocevar/renderer-ng/examples/vector-features.html
   sandbox/ahocevar/renderer-ng/examples/vector-formats.html
   sandbox/ahocevar/renderer-ng/examples/web-mercator.html
   sandbox/ahocevar/renderer-ng/examples/web-mercator.js
   sandbox/ahocevar/renderer-ng/examples/wfs-filter.html
   sandbox/ahocevar/renderer-ng/examples/wfs-protocol-transactions.html
   sandbox/ahocevar/renderer-ng/examples/wfs-protocol.html
   sandbox/ahocevar/renderer-ng/examples/wfs-reprojection.html
   sandbox/ahocevar/renderer-ng/examples/wfs-snap-split.html
   sandbox/ahocevar/renderer-ng/examples/wfs-states.html
   sandbox/ahocevar/renderer-ng/examples/wfs-states.js
   sandbox/ahocevar/renderer-ng/examples/wmc.html
   sandbox/ahocevar/renderer-ng/examples/wms-untiled.html
   sandbox/ahocevar/renderer-ng/examples/wms-v13.html
   sandbox/ahocevar/renderer-ng/examples/wms.html
   sandbox/ahocevar/renderer-ng/examples/wmst.html
   sandbox/ahocevar/renderer-ng/examples/wmts-capabilities.html
   sandbox/ahocevar/renderer-ng/examples/wmts-getfeatureinfo.html
   sandbox/ahocevar/renderer-ng/examples/wmts.html
   sandbox/ahocevar/renderer-ng/examples/worldwind.html
   sandbox/ahocevar/renderer-ng/examples/wrapDateLine.html
   sandbox/ahocevar/renderer-ng/examples/xhtml.html
   sandbox/ahocevar/renderer-ng/examples/xml.html
   sandbox/ahocevar/renderer-ng/examples/xyz-esri.html
   sandbox/ahocevar/renderer-ng/examples/xyz-offset.html
   sandbox/ahocevar/renderer-ng/examples/yahoo.html
   sandbox/ahocevar/renderer-ng/examples/zoomLevels.html
   sandbox/ahocevar/renderer-ng/examples/zoomify.html
   sandbox/ahocevar/renderer-ng/lib/OpenLayers.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Ajax.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Bounds.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Class.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Element.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/LonLat.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Pixel.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Size.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Console.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ArgParser.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Attribution.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Button.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DragFeature.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DragPan.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DrawFeature.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/EditingToolbar.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/GetFeature.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Graticule.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/KeyboardDefaults.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/LayerSwitcher.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Measure.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ModifyFeature.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MouseDefaults.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MousePosition.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MouseToolbar.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/NavToolbar.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Navigation.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/NavigationHistory.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/OverviewMap.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Pan.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanPanel.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanZoom.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanZoomBar.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Panel.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Permalink.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/SLDSelect.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Scale.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ScaleLine.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/SelectFeature.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Snapping.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Split.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/TransformFeature.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/WMSGetFeatureInfo.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/WMTSGetFeatureInfo.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomBox.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomIn.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomOut.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomPanel.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomToMaxExtent.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Events.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature/Vector.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature/WFS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Comparison.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/FeatureId.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Logical.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Spatial.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/ArcXML.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/ArcXML/Features.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Atom.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetDomain.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetRecords.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Context.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1_1_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/Base.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/v2.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/v3.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GPX.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GeoJSON.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GeoRSS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/JSON.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/KML.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OSM.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1_1_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSContext.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSContext/v0_3_1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD/v1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSCapabilities.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSGetObservation.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Text.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSDescribeFeatureType.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1_1_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WKT.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1_1_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_3.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSDescribeLayer.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSGetFeatureInfo.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMTSCapabilities.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/XML.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Collection.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Curve.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/LineString.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/LinearRing.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiLineString.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiPoint.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiPolygon.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Point.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Polygon.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Rectangle.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Surface.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Box.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Click.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Drag.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Feature.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Hover.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Keyboard.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/MouseWheel.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Path.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Point.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Polygon.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/RegularPolygon.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Icon.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ar.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/be-tarask.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/bg.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/br.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ca.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/cs-CZ.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/da-DK.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/de.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/el.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/en-CA.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/en.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/es.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fi.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fr.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fur.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/gl.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/gsw.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hr.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hsb.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hu.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ia.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/id.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/io.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/is.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/it.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ja.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/km.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ksh.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nb.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nds.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nl.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nn.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/oc.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/pt-BR.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/pt.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ru.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/sk.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/sv-SE.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/te.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/vi.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/zh-CN.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/zh-TW.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/ArcGIS93Rest.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/ArcIMS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Boxes.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/EventPane.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/FixedZoomLevels.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/GML.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/GeoRSS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Google.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Google/v3.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Grid.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/HTTPRequest.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Image.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/KaMap.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/KaMapCache.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapGuide.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapServer.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapServer/Untiled.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Markers.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MultiMap.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/PointTrack.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/SphericalMercator.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/TMS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Text.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/TileCache.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Vector.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Vector/RootContainer.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/VirtualEarth.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WFS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS/Post.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS/Untiled.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMTS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WorldWind.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/XYZ.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Yahoo.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Zoomify.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Map.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Marker.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Marker/Box.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/Anchored.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/AnchoredBubble.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/Framed.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/FramedCloud.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Projection.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/HTTP.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SOS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SOS/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SQL.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SQL/Gears.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1_0_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1_1_0.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/Canvas.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/Elements.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/NG.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/SVG.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/SVG2.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/VML.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Request.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Request/XMLHttpRequest.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Rule.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/SingleFile.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/BBOX.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Cluster.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Filter.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Fixed.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Paging.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Refresh.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Save.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Style.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Style2.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/StyleMap.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Line.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Point.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Polygon.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Raster.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Text.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/Image.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/Image/IFrame.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/WFS.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tween.js
   sandbox/ahocevar/renderer-ng/lib/OpenLayers/Util.js
   sandbox/ahocevar/renderer-ng/license.txt
   sandbox/ahocevar/renderer-ng/readme.txt
   sandbox/ahocevar/renderer-ng/release-license.txt
   sandbox/ahocevar/renderer-ng/tests/BaseTypes/Element.html
   sandbox/ahocevar/renderer-ng/tests/Control/LayerSwitcher.html
   sandbox/ahocevar/renderer-ng/tests/Control/Measure.html
   sandbox/ahocevar/renderer-ng/tests/Control/ModifyFeature.html
   sandbox/ahocevar/renderer-ng/tests/Control/PanZoom.html
   sandbox/ahocevar/renderer-ng/tests/Control/Panel.html
   sandbox/ahocevar/renderer-ng/tests/Control/SLDSelect.html
   sandbox/ahocevar/renderer-ng/tests/Control/WMSGetFeatureInfo.html
   sandbox/ahocevar/renderer-ng/tests/Feature.html
   sandbox/ahocevar/renderer-ng/tests/Format/GML.html
   sandbox/ahocevar/renderer-ng/tests/Format/SOSGetObservation.html
   sandbox/ahocevar/renderer-ng/tests/Format/WFST/v1_1_0.html
   sandbox/ahocevar/renderer-ng/tests/Format/WKT.html
   sandbox/ahocevar/renderer-ng/tests/Format/WMC.html
   sandbox/ahocevar/renderer-ng/tests/Format/WMC/v1_1_0.html
   sandbox/ahocevar/renderer-ng/tests/Geometry/Collection.html
   sandbox/ahocevar/renderer-ng/tests/Geometry/LineString.html
   sandbox/ahocevar/renderer-ng/tests/Handler/Drag.html
   sandbox/ahocevar/renderer-ng/tests/Handler/Polygon.html
   sandbox/ahocevar/renderer-ng/tests/Layer/EventPane.html
   sandbox/ahocevar/renderer-ng/tests/Layer/GeoRSS.html
   sandbox/ahocevar/renderer-ng/tests/Layer/Image.html
   sandbox/ahocevar/renderer-ng/tests/Layer/MapServer.html
   sandbox/ahocevar/renderer-ng/tests/Layer/MultiMap.html
   sandbox/ahocevar/renderer-ng/tests/Layer/SphericalMercator.html
   sandbox/ahocevar/renderer-ng/tests/Layer/Text.html
   sandbox/ahocevar/renderer-ng/tests/Layer/Vector.html
   sandbox/ahocevar/renderer-ng/tests/Layer/WMS.html
   sandbox/ahocevar/renderer-ng/tests/Layer/WMS/Post.html
   sandbox/ahocevar/renderer-ng/tests/Layer/XYZ.html
   sandbox/ahocevar/renderer-ng/tests/Marker/Box.html
   sandbox/ahocevar/renderer-ng/tests/Popup.html
   sandbox/ahocevar/renderer-ng/tests/Popup/Anchored.html
   sandbox/ahocevar/renderer-ng/tests/Projection.html
   sandbox/ahocevar/renderer-ng/tests/Protocol/WFS.html
   sandbox/ahocevar/renderer-ng/tests/Renderer/Canvas.html
   sandbox/ahocevar/renderer-ng/tests/Renderer/Elements.html
   sandbox/ahocevar/renderer-ng/tests/Renderer/SVG.html
   sandbox/ahocevar/renderer-ng/tests/Renderer/VML.html
   sandbox/ahocevar/renderer-ng/tests/Request.html
   sandbox/ahocevar/renderer-ng/tests/Request/XMLHttpRequest.html
   sandbox/ahocevar/renderer-ng/tests/Strategy/Filter.html
   sandbox/ahocevar/renderer-ng/tests/Strategy/Fixed.html
   sandbox/ahocevar/renderer-ng/tests/Symbolizer/Line.html
   sandbox/ahocevar/renderer-ng/tests/Symbolizer/Point.html
   sandbox/ahocevar/renderer-ng/tests/Symbolizer/Polygon.html
   sandbox/ahocevar/renderer-ng/tests/Symbolizer/Text.html
   sandbox/ahocevar/renderer-ng/tests/Tile/Image.html
   sandbox/ahocevar/renderer-ng/tests/Tile/Image/IFrame.html
   sandbox/ahocevar/renderer-ng/tests/Util.html
   sandbox/ahocevar/renderer-ng/tests/list-tests.html
   sandbox/ahocevar/renderer-ng/tests/throws.js
   sandbox/ahocevar/renderer-ng/theme/default/style.css
   sandbox/ahocevar/renderer-ng/tools/exampleparser.py
   sandbox/ahocevar/renderer-ng/tools/mergejs.py
Log:
merging r10693 from trunk



Property changes on: sandbox/ahocevar/renderer-ng
___________________________________________________________________
Modified: svn:mergeinfo
   - /sandbox/roberthl/openlayers:9745-9748
/trunk/openlayers:10635-10646,10648-10676,10678-10685,10687-10692
   + /sandbox/roberthl/openlayers:9745-9748
/trunk/openlayers:10635-10646,10648-10676,10678-10685,10687-10692,10694-10991

Modified: sandbox/ahocevar/renderer-ng/build/full.cfg
===================================================================
--- sandbox/ahocevar/renderer-ng/build/full.cfg	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/build/full.cfg	2011-01-03 15:30:11 UTC (rev 10994)
@@ -3,7 +3,6 @@
 
 [first]
 OpenLayers/SingleFile.js
-OpenLayers.js
 OpenLayers/BaseTypes.js
 OpenLayers/BaseTypes/Class.js
 OpenLayers/Util.js
@@ -14,19 +13,6 @@
 [include]
 
 [exclude]
-Firebug/firebug.js
-Firebug/firebugx.js
-OpenLayers/Lang/ca.js
-OpenLayers/Lang/cs-CZ.js
-OpenLayers/Lang/da-DK.js
-OpenLayers/Lang/de.js
-OpenLayers/Lang/en-CA.js
-OpenLayers/Lang/es.js
-OpenLayers/Lang/fr.js
-OpenLayers/Lang/it.js
-OpenLayers/Lang/nb.js
-OpenLayers/Lang/nl.js
-OpenLayers/Lang/pt-BR.js
-OpenLayers/Lang/sv-SE.js
-OpenLayers/Lang/zh-TW.js
-OpenLayers/Lang/zh-CN.js
+Firebug
+OpenLayers.js
+OpenLayers/Lang

Modified: sandbox/ahocevar/renderer-ng/build/library.cfg
===================================================================
--- sandbox/ahocevar/renderer-ng/build/library.cfg	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/build/library.cfg	2011-01-03 15:30:11 UTC (rev 10994)
@@ -4,7 +4,6 @@
 
 [first]
 OpenLayers/SingleFile.js
-OpenLayers.js
 OpenLayers/BaseTypes.js
 OpenLayers/BaseTypes/Class.js
 OpenLayers/Util.js
@@ -15,8 +14,8 @@
 [include]
 
 [exclude]
-Firebug/firebug.js
-Firebug/firebugx.js
+Firebug
+OpenLayers.js
 OpenLayers/Format/GeoRSS.js
 OpenLayers/Format/GML.js
 OpenLayers/Format/WKT.js
@@ -50,19 +49,6 @@
 OpenLayers/Renderer/SVG.js
 OpenLayers/Renderer/VML.js
 OpenLayers/Renderer.js
-OpenLayers/Lang/ca.js
-OpenLayers/Lang/cs-CZ.js
-OpenLayers/Lang/da-DK.js
-OpenLayers/Lang/de.js
-OpenLayers/Lang/en-CA.js
-OpenLayers/Lang/es.js
-OpenLayers/Lang/fr.js
-OpenLayers/Lang/it.js
-OpenLayers/Lang/nb.js
-OpenLayers/Lang/nl.js
-OpenLayers/Lang/pt-BR.js
-OpenLayers/Lang/sv-SE.js
-OpenLayers/Lang/zh-TW.js
-OpenLayers/Lang/zh-CN.js
+OpenLayers/Lang
 
 

Modified: sandbox/ahocevar/renderer-ng/build/license.txt
===================================================================
--- sandbox/ahocevar/renderer-ng/build/license.txt	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/build/license.txt	2011-01-03 15:30:11 UTC (rev 10994)
@@ -2,8 +2,8 @@
 
   OpenLayers.js -- OpenLayers Map Viewer Library
 
-  Copyright 2005-2010 MetaCarta, Inc., released under the Clear BSD license.
-  Please see http://svn.openlayers.org/trunk/openlayers/license.txt
+  Copyright 2005-2010 OpenLayers Contributors, released under the Clear BSD
+  license. Please see http://svn.openlayers.org/trunk/openlayers/license.txt
   for the full text of the license.
 
   Includes compressed code under the following licenses:
@@ -90,3 +90,36 @@
  * issues. Applications that use the code below will continue to work seamlessly
  * when that happens.
  */
+
+/**
+ * OpenLayers.Util.pagePosition is based on Yahoo's getXY method, which is
+ * Copyright (c) 2006, Yahoo! Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use of this software in source and binary forms, with or
+ * without modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of Yahoo! Inc. nor the names of its contributors may be
+ *   used to endorse or promote products derived from this software without
+ *   specific prior written permission of Yahoo! Inc.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
\ No newline at end of file

Modified: sandbox/ahocevar/renderer-ng/build/lite.cfg
===================================================================
--- sandbox/ahocevar/renderer-ng/build/lite.cfg	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/build/lite.cfg	2011-01-03 15:30:11 UTC (rev 10994)
@@ -6,7 +6,6 @@
 
 [first]
 OpenLayers/SingleFile.js
-OpenLayers.js
 OpenLayers/BaseTypes.js
 OpenLayers/BaseTypes/Class.js
 OpenLayers/Util.js

Modified: sandbox/ahocevar/renderer-ng/examples/GMLParser.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/GMLParser.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/GMLParser.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -27,7 +27,9 @@
   <body onload="load()">
       <h1 id="title">GML Parser Example</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+        GML, parse, parsing
+      </div>
 
       <p id="shortdesc">
           Demonstrate the operation of the GML parser.

Modified: sandbox/ahocevar/renderer-ng/examples/Jugl.js
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/Jugl.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/Jugl.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,84 +1,8 @@
-/**
+/*
  * Jugl.js -- JavaScript Template Library
  *
- * Copyright 2007 Tim Schaub
- * Released under the MIT license.  Please see
- * http://svn.tschaub.net/jugl/trunk/license.txt for the full license.
+ * Copyright 2007-2010 Tim Schaub
+ * Released under the MIT license.  Please see 
+ * http://github.com/tschaub/jugl/blob/master/license.txt for the full license.
  */
-
-(function(){var Jugl={prefix:"jugl",namespaceURI:"http://namespace.jugl.org/"};Jugl.Array={indexOf:function(array,obj){for(var i=0;i<array.length;i++){if(array[i]==obj)return i;}
-return-1;}};Jugl.Function={bind:function(method,object){var args=[];for(var i=2;i<arguments.length;++i){args.push(arguments[i]);}
-return function(){for(var i=0;i<arguments.length;++i){args.push(arguments[i]);}
-return method.apply(object,args);}}};Jugl.Node={appendChild:function(parent,child){if(typeof(parent)=="string"){var obj=document.getElementById(parent);if(!obj){throw Error("Element id not found: "+parent);}
-parent=obj;}
-if(typeof(child)=="string"){var obj=document.getElementById(child);if(!obj){throw Error("Element id not found: "+child);}
-child=obj;}
-if(child.namespaceURI&&child.xml){var wrapper=document.createElement('div');wrapper.innerHTML=child.xml;var children=wrapper.childNodes;for(var i=0;i<children.length;++i){parent.appendChild(children[i]);}}else{if(parent.ownerDocument&&parent.ownerDocument.importNode){child=parent.ownerDocument.importNode(child,true);}
-parent.appendChild(child);}
-return child;}};Jugl.Object={extend:function(destination,source){destination=destination||{};source=source||{};for(property in source){destination[property]=source[property];}
-return destination;},applyDefaults:function(destination,source){destination=destination||{};source=source||{};for(property in source){if(destination[property]===undefined){destination[property]=source[property];}}
-return destination;}};Jugl.Request={loadTemplate:function(url,onComplete,caller){var createTemplate=function(request){var doc,template;try{doc=request.responseXML;template=new Jugl.Template(doc.documentElement);}catch(invalidXML){try{doc=document.createElement("div");doc.innerHTML=request.responseText;template=new Jugl.Template(doc.firstChild);}catch(invalidHTML){var msg="Can't make HTML out of response: "+
-request.responseText;Jugl.Console.error(msg);throw invalidHTML;}}
-var complete=Jugl.Function.bind(onComplete,caller);complete(template);}
-Jugl.Request.loadUrl(url,createTemplate);},loadUrl:function(url,onComplete,caller){var complete=(caller)?Jugl.Function.bind(onComplete,caller):onComplete;var request=Jugl.Request.createXMLHttpRequest();request.open("GET",url);request.onreadystatechange=function(){if(request.readyState==4){complete(request);}}
-request.send(null);},createXMLHttpRequest:function(){if(typeof XMLHttpRequest!="undefined"){return new XMLHttpRequest();}else if(typeof ActiveXObject!="undefined"){return new ActiveXObject("Microsoft.XMLHTTP");}else{throw new Error("XMLHttpRequest not supported");}}};Jugl.Class=function(){var Class=function(){if(this===Jugl){var msg="Create an instance of a Jugl "+"class with the new keyword";throw Error(msg);}
-this.initialize.apply(this,arguments);}
-var extended={toString:function(){return"["+this.CLASS_NAME+"]";}};var parent;for(var i=0;i<arguments.length;++i){if(typeof arguments[i]=="function"){parent=arguments[i].prototype;}else{parent=arguments[i];}
-Jugl.Object.extend(extended,parent);}
-Class.prototype=extended;return Class;};Jugl.Console={log:function(){},debug:function(){},info:function(){},warn:function(){},error:function(){},assert:function(){},dir:function(){},dirxml:function(){},trace:function(){},group:function(){},groupEnd:function(){},time:function(){},timeEnd:function(){},profile:function(){},profileEnd:function(){},count:function(){}};(function(){if(window.console){var scripts=document.getElementsByTagName("script");for(var i=0;i<scripts.length;++i){if(scripts[i].src.indexOf("firebug.js")!=-1){Jugl.Object.extend(Jugl.Console,console);break;}}}})();Jugl.Attribute=Jugl.Class({element:null,node:null,type:null,nodeValue:null,template:null,initialize:function(element,node,type){this.element=element;this.node=node;this.type=type;this.nodeValue=node.nodeValue;this.nodeName=node.nodeName;this.template=element.template;},splitAttributeValue:function(value){value=(value!=null)?value:this.nodeValue;var matches=this.template.regExes.trimSpace.exec(value);var
  items;if(matches&&matches.length==3){items=[matches[1],matches[2]];}
-return items;},splitExpressionPrefix:function(){var items=this.splitAttributeValue();if(!items||(items[0]!='structure'&&items[0]!='text')){items=[null,this.nodeValue];}
-return items;},getAttributeValues:function(){var trimmed=this.nodeValue.replace(/[\t\n]/g,"").replace(/;\s*$/,"");var tabbed=trimmed.replace(/;;/g,"\t");var newlined=tabbed.split(";").join("\n");return newlined.replace(/\t/g,";").split(/\n/g);},removeSelf:function(){this.element.removeAttributeNode(this);},process:function(){return this.processAttribute[this.type].apply(this,[]);},evalInScope:function(str){var expression="with(this.element.scope){"+str+"}";return eval(expression);},processAttribute:{"define":function(){var values=this.getAttributeValues();var pair;for(var i=0;i<values.length;++i){pair=this.splitAttributeValue(values[i]);this.element.scope[pair[0]]=this.evalInScope(pair[1]);}
-this.removeSelf();return true;},"condition":function(){var proceed;try{proceed=!!(this.evalInScope(this.nodeValue));}catch(err){var message=err.name+": "+err.message+"\n"+"attribute: "+this.nodeName;Jugl.Console.error(message);throw err;}
-this.removeSelf();if(!proceed){this.element.removeSelf();}
-return proceed;},"repeat":function(){var pair=this.splitAttributeValue();var key=pair[0];var list=this.evalInScope(pair[1]);this.removeSelf();if(!(list instanceof Array)){var items=new Array();for(var p in list){items.push(p);}
-list=items;}
-var element;var previousSibling=this.element;var length=list.length;for(var i=0;i<length;++i){element=this.element.clone();element.scope[key]=list[i];element.scope.repeat[key]={index:i,number:i+1,even:!(i%2),odd:!!(i%2),start:(i==0),end:(i==length-1),length:length};previousSibling.insertAfter(element);element.process();previousSibling=element;}
-this.element.removeSelf();return false;},"content":function(){var pair=this.splitExpressionPrefix();var str;try{str=this.evalInScope(pair[1]);}catch(err){Jugl.Console.error("Failed to eval in element scope: "+
-pair[1]);throw err;}
-this.removeSelf();if(pair[0]=='structure'){try{this.element.node.innerHTML=str;}catch(err){var wrapper=document.createElement('div');var msg;try{wrapper.innerHTML=str;}catch(invalidHTML){msg="Can't transform string into valid HTML : "+
-str;Jugl.Console.error(msg);throw invalidHTML;}
-if(this.element.node.xml&&this.template.xmldom){while(this.element.node.firstChild){this.element.node.removeChild(this.element.node.firstChild);}
-this.template.xmldom.loadXML(wrapper.outerHTML);var children=this.template.xmldom.firstChild.childNodes;try{for(var i=0;i<children.length;++i){this.element.node.appendChild(children[i]);}}catch(invalidXML){msg="Can't transform string into valid XHTML : "+
-str;Jugl.Console.error(msg);throw invalidXML;}}else{try{this.element.node.innerHTML=wrapper.innerHTML;}catch(invalidXML){msg="Can't transform string into valid XHTML : "+
-str;Jugl.Console.error(msg);throw invalidXML;}}}}else{var text;if(this.element.node.xml&&this.template.xmldom){text=this.template.xmldom.createTextNode(str);}else{text=document.createTextNode(str);}
-var child=new Jugl.Element(this.template,text);this.element.removeChildNodes();this.element.appendChild(child);}
-return true;},"replace":function(){var pair=this.splitExpressionPrefix();var str;try{str=this.evalInScope(pair[1]);}catch(err){Jugl.Console.error("Failed to eval in element scope: "+
-pair[1]);throw err;}
-this.removeSelf();if(pair[0]=='structure'){var wrapper=document.createElement('div');try{wrapper.innerHTML=str;}catch(err){msg="Can't transform string into valid HTML : "+
-str;Jugl.Console.error(msg);throw err;}
-if(this.element.node.xml&&this.template.xmldom){try{this.template.xmldom.loadXML(wrapper.outerHTML);}catch(err){msg="Can't transform string into valid XML : "+
-str;Jugl.Console.error(msg);throw err;}
-wrapper=this.template.xmldom.firstChild;}
-while(wrapper.firstChild){var child=wrapper.removeChild(wrapper.firstChild);if(this.element.node.ownerDocument&&this.element.node.ownerDocument.importNode){if(child.ownerDocument!=this.element.node.ownerDocument){child=this.element.node.ownerDocument.importNode(child,true);}}
-this.element.node.parentNode.insertBefore(child,this.element.node);}}else{var text;if(this.element.node.xml&&this.template.xmldom){text=this.template.xmldom.createTextNode(str);}else{text=document.createTextNode(str);}
-var replacement=new Jugl.Element(this.template,text);this.element.insertBefore(replacement);}
-this.element.removeSelf();return true;},"attributes":function(){var values=this.getAttributeValues();var pair,name,value;for(var i=0;i<values.length;++i){pair=this.splitAttributeValue(values[i]);name=pair[0];value=this.evalInScope(pair[1]);if(value!==false){this.element.setAttribute(name,value);}}
-this.removeSelf();return true;},"omit-tag":function(){var omit;try{omit=((this.nodeValue=="")||!!(this.evalInScope(this.nodeValue)));}catch(err){Jugl.Console.error("Failed to eval in element scope: "+
-this.nodeValue);throw err;}
-this.removeSelf();if(omit){var children=this.element.getChildNodes();var child;for(var i=0;i<children.length;++i){this.element.insertBefore(children[i]);}
-this.element.removeSelf();}},"reflow":function(){var reflow;try{reflow=((this.nodeValue=="")||!!(this.evalInScope(this.nodeValue)));}catch(err){Jugl.Console.error("Failed to eval in element scope: "+
-this.nodeValue);throw err;}
-this.removeSelf();if(reflow){if(this.element.node.outerHTML){this.element.node.outerHTML=this.element.node.outerHTML;}else{this.element.node.innerHTML=this.element.node.innerHTML;}}}},CLASS_NAME:"Jugl.Attribute"});Jugl.Element=Jugl.Class({template:null,node:null,scope:null,initialize:function(template,node){this.template=template;this.node=node;this.scope=new Object();this.scope.repeat=new Object();},clone:function(){var node=this.node.cloneNode(true);node.removeAttribute("id");var element=new Jugl.Element(this.template,node);Jugl.Object.extend(element.scope,this.scope);return element;},getAttribute:function(localName){var node;if(this.node.nodeType==1){if(this.template.usingNS){node=this.node.getAttributeNodeNS(Jugl.namespaceURI,localName);}else{node=this.node.getAttributeNode(Jugl.prefix+":"+
-localName);}
-if(node&&!node.specified){node=false;}}
-var attribute;if(node){attribute=new Jugl.Attribute(this,node,localName);}else{attribute=node;}
-return attribute;},setAttribute:function(name,value){this.node.setAttribute(name,value);},removeAttributeNode:function(attribute){this.node.removeAttributeNode(attribute.node);},getChildNodes:function(){var numNodes=this.node.childNodes.length;var children=new Array(numNodes);var node,scope;for(var i=0;i<numNodes;++i){node=new Jugl.Element(this.template,this.node.childNodes[i]);node.scope=Jugl.Object.extend({},this.scope);children[i]=node;}
-return children;},removeChildNodes:function(){while(this.node.hasChildNodes()){this.node.removeChild(this.node.firstChild);}},removeChild:function(element){this.node.removeChild(element.node);return node;},removeSelf:function(){this.node.parentNode.removeChild(this.node);},importNode:function(element){if(this.node.ownerDocument&&this.node.ownerDocument.importNode){if(element.node.ownerDocument!=this.node.ownerDocument){element.node=this.node.ownerDocument.importNode(element.node,true);}}},appendChild:function(element){this.importNode(element);this.node.appendChild(element.node);},insertAfter:function(element){this.importNode(element);var parent=this.node.parentNode;var sibling=this.node.nextSibling;if(sibling){parent.insertBefore(element.node,sibling);}else{parent.appendChild(element.node);}},insertBefore:function(element){this.importNode(element);var parent=this.node.parentNode;parent.insertBefore(element.node,this.node);},process:function(){var attribute;var keepProcessing
 =true;var series=["define","condition","repeat"];for(var i=0;i<series.length;++i){attribute=this.getAttribute(series[i]);if(attribute){try{keepProcessing=attribute.process();}catch(err){Jugl.Console.error("Failed to process "+
-series[i]+" attribute");throw err;}
-if(!keepProcessing){return;}}}
-var content=this.getAttribute("content");if(content){try{content.process();}catch(err){Jugl.Console.error("Failed to process content attribute");throw err;}}else{var replace=this.getAttribute("replace");if(replace){try{replace.process();}catch(err){Jugl.Console.error("Failed to process replace attribute");throw err;}}}
-var attributes=this.getAttribute("attributes");if(attributes){try{attributes.process();}catch(err){Jugl.Console.error("Failed to process attributes attribute");throw err;}}
-if(!content&&!replace){this.processChildNodes();}
-var omit=this.getAttribute("omit-tag");if(omit){try{omit.process();}catch(err){Jugl.Console.error("Failed to process omit-tag attribute");throw err;}}
-var reflow=this.getAttribute("reflow");if(reflow){try{reflow.process();}catch(err){Jugl.Console.error("Failed to process reflow attribute");throw err;}}},processChildNodes:function(){var children=this.getChildNodes();for(var i=0;i<children.length;++i){try{children[i].process();}catch(err){Jugl.Console.error("Failed to process child node: "+i);throw err;}}},CLASS_NAME:"Jugl.Element"});Jugl.Template=Jugl.Class({node:null,usingNS:false,xhtmlns:"http://www.w3.org/1999/xhtml",xmldom:window.ActiveXObject?new ActiveXObject("Microsoft.XMLDOM"):null,regExes:{trimSpace:(/^\s*(\w+)\s+(.*?)\s*$/)},loaded:false,loading:false,initialize:function(config){if(typeof config=="string"||(config&&config.nodeType==1)){config={node:config};}
-config=config||{};if(typeof(config.node)=="string"){config.node=document.getElementById(config.node);if(!config.node){throw Error("Element id not found: "+config.node);}}
-if(config.node){this.node=config.node;this.loaded=true;}else if(config.url){this.load({url:config.url,callback:config.callback,scope:config.scope});}},process:function(config){if(config&&!config.context&&!config.clone&&!config.string&&!config.parent){config={context:config}}
-config=Jugl.Object.applyDefaults(config,{context:null,clone:false,string:false});if(this.node.getAttributeNodeNS){if(this.node.getAttributeNodeNS(Jugl.xhtmlns,Jugl.prefix)){this.usingNS=true;}}
-var element=new Jugl.Element(this,this.node);if(config.clone){element=element.clone();}
-if(config.context){element.scope=config.context;}
-try{element.process();}catch(err){Jugl.Console.error("Failed to process "+
-this.node.nodeName+" node");throw err;}
-var data;if(config.string){if(element.node.innerHTML){data=element.node.innerHTML;}else{if(this.xmldom){data=element.node.xml;}else{var serializer=new XMLSerializer();data=serializer.serializeToString(element.node);}}}else{data=element.node;if(config.parent){if(config.clone){data=Jugl.Node.appendChild(config.parent,element.node);}else{this.appendTo(config.parent);}}}
-return data;},load:function(config){if(typeof config=="string"){config={url:config};}
-config=config||{};this.loading=true;var setNode=function(template){this.node=template.node;this.loading=false;this.loaded=true;if(config.callback){config.callback.apply(config.scope,[template]);}}
-Jugl.Request.loadTemplate(config.url,setNode,this);},appendTo:function(parent){this.node=Jugl.Node.appendChild(parent,this.node);return this;},CLASS_NAME:"Jugl.Template"});window["http://jugl.tschaub.net/trunk/lib/Jugl.js"]=Jugl;})();
\ No newline at end of file
+(function(){var f={prefix:"jugl",namespaceURI:null,loadTemplate:function(h){var i=function(l){var m,k,n=!l.status||(l.status>=200&&l.status<300);if(n){try{m=l.responseXML;k=new e(m.documentElement)}catch(j){m=document.createElement("div");m.innerHTML=l.responseText;k=new e(m.firstChild)}if(h.callback){h.callback.call(h.scope,k)}}else{if(h.failure){h.failure.call(h.scope,l)}}};d(h.url,i)}};var g=function(h,j){h=h||{};j=j||{};for(var i in j){h[i]=j[i]}return h};var a=function(l,o){var m,n,k,j,h;if(typeof(l)==="string"){m=document.getElementById(l);if(!m){throw Error("Element id not found: "+l)}l=m}if(typeof(o)==="string"){m=document.getElementById(o);if(!m){throw Error("Element id not found: "+o)}o=m}if(o.namespaceURI&&o.xml){n=document.createElement("div");n.innerHTML=o.xml;k=n.childNodes;for(j=0,h=k.length;j<h;++j){l.appendChild(k[j])}}else{if(l.ownerDocument&&l.ownerDocument.importNode&&l.ownerDocument!==o.ownerDocument){o=l.ownerDocument.importNode(o,true)}l.appendChild(o)
 }return o};var d=function(h,k,i){var j;if(typeof XMLHttpRequest!=="undefined"){j=new XMLHttpRequest()}else{if(typeof ActiveXObject!=="undefined"){j=new ActiveXObject("Microsoft.XMLHTTP")}else{throw new Error("XMLHttpRequest not supported")}}j.open("GET",h);j.onreadystatechange=function(){if(j.readyState===4){k.call(i,j)}};j.send(null)};var b=function(h,i){this.template=h;this.node=i;this.scope={};this.scope.repeat={}};g(b.prototype,{clone:function(){var i=this.node.cloneNode(true);i.removeAttribute("id");var h=new b(this.template,i);g(h.scope,this.scope);return h},getAttribute:function(h){var j;if(this.node.nodeType===1){if(this.template.usingNS){j=this.node.getAttributeNodeNS(f.namespaceURI,h)}else{j=this.node.getAttributeNode(f.prefix+":"+h)}if(j&&!j.specified){j=false}}var i;if(j){i=new c(this,j,h)}else{i=j}return i},setAttribute:function(h,i){this.node.setAttribute(h,i)},removeAttributeNode:function(h){this.node.removeAttributeNode(h.node)},getChildNodes:function(){var k
 =this.node.childNodes.length;var j=new Array(k);var l;for(var h=0;h<k;++h){l=new b(this.template,this.node.childNodes[h]);l.scope=g({},this.scope);j[h]=l}return j},removeChildNodes:function(){while(this.node.hasChildNodes()){this.node.removeChild(this.node.firstChild)}},removeChild:function(h){this.node.removeChild(h.node);return node},removeSelf:function(){this.node.parentNode.removeChild(this.node)},importNode:function(h){if(this.node.ownerDocument&&this.node.ownerDocument.importNode){if(h.node.ownerDocument!==this.node.ownerDocument){h.node=this.node.ownerDocument.importNode(h.node,true)}}},appendChild:function(h){this.importNode(h);this.node.appendChild(h.node)},insertAfter:function(h){this.importNode(h);var j=this.node.parentNode;var i=this.node.nextSibling;if(i){j.insertBefore(h.node,i)}else{j.appendChild(h.node)}},insertBefore:function(h){this.importNode(h);var i=this.node.parentNode;i.insertBefore(h.node,this.node)},process:function(){var j;var r=true;var n=["define"
 ,"condition","repeat"];for(var o=0,p=n.length;o<p;++o){j=this.getAttribute(n[o]);if(j){r=j.process();if(!r){return}}}var q=this.getAttribute("content");if(q){q.process()}else{var k=this.getAttribute("replace");if(k){k.process()}}var m=this.getAttribute("attributes");if(m){m.process()}if(!q&&!k){this.processChildNodes()}var h=this.getAttribute("omit-tag");if(h){h.process()}var l=this.getAttribute("reflow");if(l){l.process()}},processChildNodes:function(){var k=this.getChildNodes();for(var j=0,h=k.length;j<h;++j){k[j].process()}}});var e=function(h){h=h||{};if(typeof h==="string"||(h.nodeType===1)){h={node:h}}if(typeof(h.node)==="string"){h.node=document.getElementById(h.node);if(!h.node){throw Error("Element id not found: "+h.node)}}if(h.node){this.node=h.node;this.loaded=true}else{if(h.url){this.load({url:h.url,callback:h.callback,scope:h.scope})}}};g(e.prototype,{node:null,usingNS:false,xmldom:window.ActiveXObject?new ActiveXObject("Microsoft.XMLDOM"):null,trimSpace:(/^\s*(
 \w+)\s+(.*?)\s*$/),loaded:false,loading:false,process:function(h){var i,j;h=g({context:null,clone:false,string:false},h);this.usingNS=this.node.getAttributeNodeNS&&f.namespaceURI;i=new b(this,this.node);if(h.clone||h.string){i=i.clone()}if(h.context){i.scope=h.context}i.process();if(h.string){if(i.node.innerHTML){j=i.node.innerHTML}else{if(this.xmldom){j=i.node.xml}else{j=(new XMLSerializer).serializeToString(i.node)}}}else{j=i.node;if(h.parent){if(h.clone){j=a(h.parent,i.node)}else{this.appendTo(h.parent)}}}return j},load:function(j){if(typeof j==="string"){j={url:j}}j=j||{};this.loading=true;var h=function(k){this.node=k.node;this.loading=false;this.loaded=true;if(j.callback){j.callback.apply(j.scope,[k])}};var i;if(j.failure){i=(function(){return function(k){j.failure.call(j.scope,k)}})()}f.loadTemplate({url:j.url,callback:h,failure:i,scope:this})},appendTo:function(h){this.node=a(h,this.node);return this}});var c=function(h,j,i){this.element=h;this.node=j;this.type=i;thi
 s.nodeValue=j.nodeValue;this.nodeName=j.nodeName;this.template=h.template};g(c.prototype,{splitAttributeValue:function(i){i=(i!=null)?i:this.nodeValue;var h=this.template.trimSpace.exec(i);return h&&h.length===3&&[h[1],h[2]]},splitExpressionPrefix:function(){var h=this.splitAttributeValue();if(!h||(h[0]!="structure"&&h[0]!="text")){h=[null,this.nodeValue]}return h},getAttributeValues:function(){return this.nodeValue.replace(/[\t\n]/g,"").replace(/;\s*$/,"").replace(/;;/g,"\t").split(";").join("\n").replace(/\t/g,";").split(/\n/g)},removeSelf:function(){this.element.removeAttributeNode(this)},process:function(){return this.processAttribute[this.type].apply(this,[])},evalInScope:function(k){var i=this.element.scope;var h=[];var j=[];for(key in i){h.push(key);j.push(i[key])}var l=new Function(h.join(","),"return "+k);return l.apply({},j)},processAttribute:{define:function(){var l,k,j,h=this.getAttributeValues();for(k=0,j=h.length;k<j;++k){l=this.splitAttributeValue(h[k]);this.e
 lement.scope[l[0]]=this.evalInScope(l[1])}this.removeSelf();return true},condition:function(){var h=!!(this.evalInScope(this.nodeValue));this.removeSelf();if(!h){this.element.removeSelf()}return h},repeat:function(){var l=this.splitAttributeValue();var r=l[0];var o=this.evalInScope(l[1]);this.removeSelf();if(!(o instanceof Array)){var q=new Array();for(var j in o){q.push(j)}o=q}var m;var h=this.element;for(var n=0,k=o.length;n<k;++n){m=this.element.clone();m.scope[r]=o[n];m.scope.repeat[r]={index:n,number:n+1,even:!(n%2),odd:!!(n%2),start:(n===0),end:(n===k-1),length:k};h.insertAfter(m);m.process();h=m}this.element.removeSelf();return false},content:function(){var m=this.splitExpressionPrefix();var p=this.evalInScope(m[1]);this.removeSelf();if(m[0]==="structure"){try{this.element.node.innerHTML=p}catch(l){var h=document.createElement("div");h.innerHTML=p;if(this.element.node.xml&&this.template.xmldom){while(this.element.node.firstChild){this.element.node.removeChild(this.ele
 ment.node.firstChild)}this.template.xmldom.loadXML(h.outerHTML);var k=this.template.xmldom.firstChild.childNodes;for(var n=0,o=k.length;n<o;++n){this.element.node.appendChild(k[n])}}else{this.element.node.innerHTML=h.innerHTML}}}else{var q;if(this.element.node.xml&&this.template.xmldom){q=this.template.xmldom.createTextNode(p)}else{q=document.createTextNode(p)}var j=new b(this.template,q);this.element.removeChildNodes();this.element.appendChild(j)}return true},replace:function(){var k=this.splitExpressionPrefix();var j=this.evalInScope(k[1]);this.removeSelf();if(k[0]==="structure"){var m=document.createElement("div");m.innerHTML=j;if(this.element.node.xml&&this.template.xmldom){this.template.xmldom.loadXML(m.outerHTML);m=this.template.xmldom.firstChild}while(m.firstChild){var l=m.removeChild(m.firstChild);if(this.element.node.ownerDocument&&this.element.node.ownerDocument.importNode){if(l.ownerDocument!=this.element.node.ownerDocument){l=this.element.node.ownerDocument.impor
 tNode(l,true)}}this.element.node.parentNode.insertBefore(l,this.element.node)}}else{var i;if(this.element.node.xml&&this.template.xmldom){i=this.template.xmldom.createTextNode(j)}else{i=document.createTextNode(j)}var h=new b(this.template,i);this.element.insertBefore(h)}this.element.removeSelf();return true},attributes:function(){var h=this.getAttributeValues();var n,k,m;for(var l=0,j=h.length;l<j;++l){n=this.splitAttributeValue(h[l]);k=n[0];m=this.evalInScope(n[1]);if(m!==false){this.element.setAttribute(k,m)}}this.removeSelf();return true},"omit-tag":function(){var l=((this.nodeValue==="")||!!(this.evalInScope(this.nodeValue)));this.removeSelf();if(l){var k=this.element.getChildNodes();for(var j=0,h=k.length;j<h;++j){this.element.insertBefore(k[j])}this.element.removeSelf()}},reflow:function(){var h=((this.nodeValue==="")||!!(this.evalInScope(this.nodeValue)));this.removeSelf();if(h){if(this.element.node.outerHTML){this.element.node.outerHTML=this.element.node.outerHTML}el
 se{this.element.node.innerHTML=this.element.node.innerHTML}}}}});window.jugl=g(f,{Template:e})})();
\ No newline at end of file

Modified: sandbox/ahocevar/renderer-ng/examples/KMLParser.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/KMLParser.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/KMLParser.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -31,7 +31,9 @@
   <body onload="load()">
       <h1 id="title">KML Parser Example</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+        KML, parsing, format
+      </div>
 
       <p id="shortdesc">
           Demonstrate the operation of the KML parser.

Modified: sandbox/ahocevar/renderer-ng/examples/SLDSelect.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/SLDSelect.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/SLDSelect.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -130,7 +130,9 @@
   <body onload="init()">
     <h1 id="title">SLD based selection on WMS layers</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        sld, sldselect, styling, style
+    </div>
 
     <div id="shortdesc">Using Styled Layer Descriptors to make a selection on WMS layers</div>
 

Modified: sandbox/ahocevar/renderer-ng/examples/WMSDescribeLayerParser.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/WMSDescribeLayerParser.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/WMSDescribeLayerParser.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -25,7 +25,9 @@
   <body onload="load()">
       <h1 id="title">WMSDescribeLayer Parser Example</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+          wmsdescribelayer, parser, cleanup
+      </div>
 
       <p id="shortdesc">
           Demonstrate the operation of the WMSDescribeLayer parser.

Modified: sandbox/ahocevar/renderer-ng/examples/WMSPost.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/WMSPost.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/WMSPost.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -124,7 +124,7 @@
 
             var layer = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {
                     layers: 'basic'
                 }
@@ -152,13 +152,17 @@
     <h1 id="title">Basic WMS Example via HTTP-POST protocol with a large SLD
     included</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        sld, advanced
+    </div>
 
     <div id="shortdesc">Creating a WMS layer with a large SLD in the sld_body</div>
 
     <div id="map" style="width: 512; height: 256; border: 1px solid red;"></div>
 
     <div id="docs">
+        <p><b>Deprecated.</b> See <a href="wms-long-url.html">wms-long-url.html</a>
+            for the recommended way to avoid long URLs.</p><p>
         This example uses a large SLD created on the client side to style a WMS
         layer.  This example uses a WMS.Post layer which transfers data via the
         HTTP-POST protocol. <br>
@@ -169,7 +173,7 @@
         instead. The default setting (["mozilla", "firefox", "opera"])
         excludes problematic browsers without removing the ability to use long
         request parameters, because all these browsers support long urls via
-        GET.
+        GET.</p>
     </div>
   </body>
 </html>

Modified: sandbox/ahocevar/renderer-ng/examples/accessible.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/accessible.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/accessible.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -38,7 +38,7 @@
                 map = new OpenLayers.Map('map', options);
                 var wms = new OpenLayers.Layer.WMS(
                     "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0?",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0?",
                     {layers: 'basic'}
                 );
                 map.addLayer(wms);
@@ -50,7 +50,8 @@
         <h1 id="title">Accessible Example</h1>
 
         <div id="tags">
-        </div>
+            keyboard, pan, panning, zoom, zooming, accesskey
+        </div>        
 
         <p id="shortdesc">
             Demonstrate how to use the KeyboardDefaults option parameter for layer types.

Modified: sandbox/ahocevar/renderer-ng/examples/all-overlays-google.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/all-overlays-google.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/all-overlays-google.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,6 +11,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">All Overlays with Google and OSM</h1>
+        <div id="tags">
+            overlay, baselayer, google, osm, openstreetmap
+        </div>
         <p id="shortdesc">
             Using the Google and OSM layers as overlays.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/all-overlays.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/all-overlays.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/all-overlays.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -56,6 +56,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">OpenLayers Overlays Only Example</h1>
+        <div id="tags">
+            overlay, baselayer
+        </div> 
         <p id="shortdesc">
             Demonstrates a map with overlays only.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/animated_panning.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/animated_panning.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/animated_panning.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -36,7 +36,7 @@
         function init(){
             map = new OpenLayers.Map('map', {numZoomLevels: 2});
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
                 
             map.addLayer(layer);
             map.zoomToMaxExtent();
@@ -47,7 +47,7 @@
 
             map2 = new OpenLayers.Map('map2', {'panMethod': null, numZoomLevels: 2} );
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
                 
             map2.addLayer(layer);
             map2.zoomToMaxExtent();
@@ -73,7 +73,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">map.panTo Example</h1>
-    <div id="tags">map.panTo</div>
+    <div id="tags">
+        panning, animation, effect, smooth, panMethod
+    </div>
     <div id="shortdesc">Show animated panning effects in the map</div>
     <div id="map" class="smallmap"></div>
     <div id="docs">

Modified: sandbox/ahocevar/renderer-ng/examples/arcgis93rest.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/arcgis93rest.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/arcgis93rest.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -41,6 +41,7 @@
     <h1 id="title">ArcGIS Server 9.3 Rest API Example</h1>
 
     <div id="tags">
+        ESRI, ArcGIS, REST, filter
     </div>
     <p id="shortdesc">
         Shows the basic use of openlayers using an ArcGIS Server 9.3 Rest API layer

Modified: sandbox/ahocevar/renderer-ng/examples/arcims-thematic.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/arcims-thematic.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/arcims-thematic.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -58,6 +58,7 @@
     <h1 id="title">ArcIMS Thematic Example</h1>
 
     <div id="tags">
+        ESRI, ArcIMS, ArcXML, style, thematic, chloropleth, representation
     </div>
     <p id="shortdesc">
         Shows the advanced use of OpenLayers using a thematic ArcIMS layer

Modified: sandbox/ahocevar/renderer-ng/examples/arcims.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/arcims.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/arcims.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -33,6 +33,7 @@
     <h1 id="title">ArcIMS Example</h1>
 
     <div id="tags">
+        ESRI, ArcIMS
     </div>
     <p id="shortdesc">
         Shows the basic use of OpenLayers using an ArcIMS layer

Modified: sandbox/ahocevar/renderer-ng/examples/attribution.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/attribution.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/attribution.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,8 +11,8 @@
                 map = new OpenLayers.Map('map');
 
                 var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'},
-                    {'attribution': 'Provided by <a href="http://labs.metacarta.com/">MetaCarta</a>'});
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'},
+                    {'attribution': 'Provided by OSGeo'});
 
                 var jpl_wms = new OpenLayers.Layer.WMS( "NASA Global Mosaic",
                     "http://t1.hypercube.telascience.org/cgi-bin/landsat7", 
@@ -34,7 +34,7 @@
         <h1 id="title">Attribution Example</h1>
 
         <div id="tags">
-            copyright watermark logo attribution
+            copyright, watermark, logo, attribution
         </div>
 
         <p id="shortdesc">
@@ -47,7 +47,7 @@
             This is an example of how to add an attribution block to the OpenLayers window.  In order to use an
             attribution block, an attribution parameter must be set in each layer that requires attribution. In
             addition, an attribution control must be added to the map, though one is added to all OpenLayers Maps by default. 
-            Be aware that this is a layer *option*: the options hash goes in
+            Be aware that this is a layer <strong>option</strong>: the options hash goes in
             different places depending on the layer type you are using.  
         </div>
     </body>

Modified: sandbox/ahocevar/renderer-ng/examples/baseLayers.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/baseLayers.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/baseLayers.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -15,6 +15,7 @@
         <script src='http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAA9XNhd8q0UdwNC7YSO4YZghSPUCi5aRYVveCcVYxzezM4iaj_gxQ9t-UajFL70jfcpquH5l1IJ-Zyyw'></script>
         <!-- Localhost key -->
         <!-- <script src='http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTS6gjckBmeABOGXIUiOiZObZESPg'></script>-->
+        <!-- CLEANUP: the URL below doesn't work anymore -->
         <script type="text/javascript" src="http://clients.multimap.com/API/maps/1.1/metacarta_04"></script>
         <script src='http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1'></script>
         <script src="http://api.maps.yahoo.com/ajaxymap?v=3.0&appid=euzuro-openlayers"></script>
@@ -33,7 +34,7 @@
                 map = new OpenLayers.Map( 'map' );
 
                 var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                          "http://labs.metacarta.com/wms/vmap0",
+                          "http://vmap0.tiles.osgeo.org/wms/vmap0",
                           {layers: 'basic'} );
                 var google = new OpenLayers.Layer.Google( "Google Hybrid" , {type: G_HYBRID_MAP });
                 var ve = new OpenLayers.Layer.VirtualEarth( "VE");
@@ -53,8 +54,8 @@
             }
 
             function add() {
-                var url = 'http://boston.openguides.org/markers/AQUA.png';
-                var sz = new OpenLayers.Size(10, 17);
+                var url = 'http://www.openlayers.org/dev/img/marker.png';
+                var sz = new OpenLayers.Size(21, 25);
                 var calculateOffset = function(size) {
                                     return new OpenLayers.Pixel(-(size.w/2), -size.h);
                                  };
@@ -77,6 +78,7 @@
         <h1 id="title">Base Layers Example</h1>
 
         <div id="tags">
+            Google, Yahoo, Virtual Earth, Bing, MultiMap, cleanup
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/behavior-fixed-http-gml.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/behavior-fixed-http-gml.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/behavior-fixed-http-gml.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -10,7 +10,7 @@
             function init(){
                 map = new OpenLayers.Map('map');
                 var wms = new OpenLayers.Layer.WMS(
-                    "OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0",
+                    "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'}
                 );
 
@@ -31,6 +31,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">Vector Behavior Example (Fixed/HTTP/GML)</h1>
+        <div id="tags">
+            vector, strategy, strategies, protocoll, advanced, gml, http, fixed
+        </div>
         <p id="shortdesc">
             Vector layer with a Fixed strategy, HTTP protocol, and GML format.
         </p>

Copied: sandbox/ahocevar/renderer-ng/examples/bing-tiles.html (from rev 10991, trunk/openlayers/examples/bing-tiles.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/bing-tiles.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/bing-tiles.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>OpenLayers Bing Tiles Example</title>
+    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <style type="text/css">
+    .olControlAttribution {
+        left: 5px;
+        right: inherit;
+        bottom: 5px; 
+    }
+    </style>
+  </head>
+  <body>
+    <h1 id="title">Basic Bing Tiles Example</h1>
+
+    <div id="tags">
+        bing tiles
+    </div>
+
+    <div id="shortdesc">Use Bing with direct tile access</div>
+
+    <div id="map" class="smallmap"></div>
+
+    <div id="docs">
+        <p>This example shows a very simple map with Bing layers that use
+        direct tile access through Bing Maps REST Services.</p><p>See
+        <a target="_blank" href="bing-tiles.js">bing-tiles.js</a> for the
+        source code.</p>
+    </div>
+    <script src="../lib/OpenLayers.js"></script>
+    <script src="bing-tiles.js"></script>
+  </body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/examples/bing-tiles.js (from rev 10991, trunk/openlayers/examples/bing-tiles.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/bing-tiles.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/bing-tiles.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,26 @@
+// API key for http://openlayers.org. Please get your own at
+// http://bingmapsportal.com/ and use that instead.
+var apiKey = "AqTGBsziZHIJYYxgivLBf0hVdrAk9mWO5cQcb8Yux8sW5M8c8opEC2lZqKR1ZZXf";
+
+var map = new OpenLayers.Map( 'map');
+
+var road = new OpenLayers.Layer.Bing({
+    key: apiKey,
+    type: "Road"
+});
+var aerial = new OpenLayers.Layer.Bing({
+    key: apiKey,
+    type: "Aerial"
+});
+var hybrid = new OpenLayers.Layer.Bing({
+    key: apiKey,
+    type: "AerialWithLabels",
+    name: "Bing Aerial With Labels"
+});
+
+map.addLayers([road, aerial, hybrid]);
+map.addControl(new OpenLayers.Control.LayerSwitcher());
+map.setCenter(new OpenLayers.LonLat(-71.147, 42.472).transform(
+    new OpenLayers.Projection("EPSG:4326"),
+    map.getProjectionObject()
+), 12);

Modified: sandbox/ahocevar/renderer-ng/examples/bing.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/bing.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/bing.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -35,7 +35,9 @@
   <body onload="init()">
     <h1 id="title">Bing Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        Bing, Microsoft, Virtual Earth
+    </div>
 
     <p id="shortdesc">
         Demonstrates the use of Bing layers.

Modified: sandbox/ahocevar/renderer-ng/examples/boxes-vector.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/boxes-vector.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/boxes-vector.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,6 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
-        <title>OpenLayers Boxes Example</title>
+        <title>OpenLayers Boxes Vector Example</title>
         <link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
         <link rel="stylesheet" href="style.css" type="text/css" />
         <script src="../lib/OpenLayers.js"></script>
@@ -16,7 +16,7 @@
                 map = new OpenLayers.Map('map');
 
                 var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'} );
 
                 var boxes  = new OpenLayers.Layer.Vector( "Boxes" );
     
@@ -38,9 +38,10 @@
         </script>
     </head>
     <body onload="init()">
-        <h1 id="title">Boxes Example</h1>
+        <h1 id="title">Boxes Example Vector</h1>
 
         <div id="tags">
+            box, vector, annotation
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/boxes.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/boxes.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/boxes.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -16,7 +16,7 @@
                 map = new OpenLayers.Map('map');
 
                 var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'} );
 
                 var boxes  = new OpenLayers.Layer.Boxes( "Boxes" );
     
@@ -40,6 +40,7 @@
         <h1 id="title">Boxes Example</h1>
 
         <div id="tags">
+            box, annotation
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/browser-name.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/browser-name.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/browser-name.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -47,7 +47,7 @@
             };
 
             var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'},
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'},
                 options);
 
             var options2 = {
@@ -75,9 +75,11 @@
   <body onload="init()">
     <h1 id="title" style="display:inline;">Example Showing Browser Name</h1>
     <h3 id="browserHeader" style="display:inline;"></h3>
+    
+    <div id="tags">
+        browser, vendor  
+    </div>
 
-    <div id="tags"></div>
-
     <p id="shortdesc">
         Demonstrate a simple map that shows the browser name.
     </p>

Modified: sandbox/ahocevar/renderer-ng/examples/buffer.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/buffer.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/buffer.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,15 +13,15 @@
             function init(){
                 map = new OpenLayers.Map( 'map' );
                 layer = new OpenLayers.Layer.WMS( "0 buffer: OpenLayers WMS",
-                        "http://labs.metacarta.com/wms/vmap0",
+                        "http://vmap0.tiles.osgeo.org/wms/vmap0",
                         {layers: 'basic'}, {'buffer':0} );
                 map.addLayer(layer);
                 layer = new OpenLayers.Layer.WMS( "1 buffer: OpenLayers WMS",
-                        "http://labs.metacarta.com/wms/vmap0",
+                        "http://vmap0.tiles.osgeo.org/wms/vmap0",
                         {layers: 'basic'}, {'buffer':1} );
                 map.addLayer(layer);
                 layer = new OpenLayers.Layer.WMS( "4 buffer: OpenLayers WMS",
-                        "http://labs.metacarta.com/wms/vmap0",
+                        "http://vmap0.tiles.osgeo.org/wms/vmap0",
                         {layers: 'basic'}, {'buffer':4} );
                 map.addLayer(layer);
                 map.addControl(new OpenLayers.Control.LayerSwitcher())
@@ -33,6 +33,7 @@
         <h1 id="title">Buffer Example</h1>
 
         <div id="tags">
+            buffer, performance, tile
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/canvas.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/canvas.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/canvas.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -9,6 +9,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">Canvas Renderer Example</h1>
+        <div id="tags">
+            canvas, renderer, advanced,
+        </div>
         <p id="shortdesc">
             Demonstrates the use of the canvas renderer with a vector layer.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/click-handler.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/click-handler.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/click-handler.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -16,7 +16,7 @@
             #east {
                 position: absolute;
                 left: 370px;
-                top: 3em;
+                top: 4em;
             }
 
             table td {
@@ -81,7 +81,7 @@
                 map = new OpenLayers.Map('map');
                 var layer = new OpenLayers.Layer.WMS(
                     "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'}
                 );
                 map.addLayers([layer]);
@@ -156,6 +156,7 @@
         <div id="west">
     
             <div id="tags">
+                event, events, propagation,  advanced
             </div>
     
             <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/click.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/click.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/click.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -41,7 +41,7 @@
                 map = new OpenLayers.Map('map');
 
                 var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'} );
 
             var jpl_wms = new OpenLayers.Layer.WMS( "NASA Global Mosaic",
                 "http://t1.hypercube.telascience.org/cgi-bin/landsat7", 
@@ -65,17 +65,23 @@
         <h1 id="title">Click Event Example</h1>
 
         <div id="tags">
+            click control, double, doubleclick, double-click, event, events, 
+            propagation
         </div>
 
         <p id="shortdesc">
-            This example shows the use of the click handler and getLonLatFromViewPortPx functions to trigger events on mouse click. 
-
+            This example shows the use of the click handler and 
+            getLonLatFromViewPortPx functions to trigger events on mouse click. 
         </p>
 
         <div id="map" class="smallmap"></div>
     
         <div id="docs">
-            Using the Click handler allows you to (for example) catch clicks without catching double clicks, something that standard browser events don't do for you. (Try double clicking: you'll zoom in, whereas using the browser click event, you would just get two alerts.) This example click control shows you how to use it. 
+            Using the Click handler allows you to (for example) catch clicks 
+            without catching double clicks, something that standard browser 
+            events don't do for you. (Try double clicking: you'll zoom in, 
+            whereas using the browser click event, you would just get two 
+            alerts.) This example click control shows you how to use it. 
         </div>
     </body>
 </html>

Modified: sandbox/ahocevar/renderer-ng/examples/controls.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/controls.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/controls.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -26,7 +26,7 @@
     
 
                 var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} );
                 var jpl_wms = new OpenLayers.Layer.WMS( "NASA Global Mosaic",
                     "http://t1.hypercube.telascience.org/cgi-bin/landsat7", 
@@ -49,6 +49,7 @@
         <h1 id="title">Map Controls Example</h1>
 
         <div id="tags">
+            control, basic
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/custom-control-point.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/custom-control-point.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/custom-control-point.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -14,7 +14,7 @@
             map = new OpenLayers.Map( $('map') );
 
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
 
             var control = new OpenLayers.Control();
             OpenLayers.Util.extend(control, {
@@ -42,6 +42,7 @@
       <h1 id="title">Custom Control Point Example</h1>
 
       <div id="tags">
+        control, point, cleanup
       </div>
 
       <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/custom-control.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/custom-control.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/custom-control.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,7 +13,7 @@
             function init(){
                 map = new OpenLayers.Map('map');
                 layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                        "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                        "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
 
                 var control = new OpenLayers.Control();
                 OpenLayers.Util.extend(control, {
@@ -45,15 +45,20 @@
     <body onload="init()">
         <h1 id="title">Custom Control Example</h1>
 
-          <div id="tags">
+        <div id="tags">
+            control, panel, rectangle
         </div>
 
         <p id="shortdesc">
-            Demonstrate the addition of a draggable rectangle to the OpenLayers window.
+            Demonstrate the addition of a rectangle to the OpenLayers window.
         </p>
       
         <div id="map" class="smallmap"></div>
 
-        <div id="docs"></div>
+        <div id="docs">
+            The control allows you to draw a rectangle, that reports its coordinates
+            after creation. Hold down the shift key on your keyboard and draw a 
+            rectangle with the mouse.
+        </div>
     </body>
 </html>

Modified: sandbox/ahocevar/renderer-ng/examples/custom-style.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/custom-style.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/custom-style.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -10,7 +10,7 @@
             }
             div.olControlMousePosition {
                 font-family: Verdana;
-                font-size: 0.5em;
+                font-size: 2em;
                 color: red;
             }
         </style>
@@ -25,7 +25,7 @@
                 var options = {theme: null};
                 map = new OpenLayers.Map('map', options);
                 layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                        "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                        "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
 
                 map.addControl(new OpenLayers.Control.MousePosition());
                 map.addLayer(layer);
@@ -37,6 +37,7 @@
         <h1 id="title">Custom Style Example</h1>
 
         <div id="tags">
+            styling, css, stylesheet, theming, theme
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/debug.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/debug.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/debug.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -27,7 +27,9 @@
     <body>
         <h1 id="title">Debug Example</h1>
 
-        <div id="tags"></div>
+        <div id="tags">
+            debugging, error, fix, fixing, console, firebug, developers, advanced
+        </div>
 
         <p id="shortdesc">
             Demonstrate console calls to a Firebug console. Requires Firefox. Mostly for developers.

Modified: sandbox/ahocevar/renderer-ng/examples/document-drag.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/document-drag.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/document-drag.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -14,7 +14,7 @@
                 new OpenLayers.Control.Attribution()
             ]} );
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} );
             map.addLayer(layer);
             map.zoomToMaxExtent();
@@ -24,7 +24,9 @@
   <body onload="init()">
     <h1 id="title">OpenLayers Document Drag Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        drag
+    </div>
 
     <div id="shortdesc">Keep on dragging even when the mouse cursor moves outside of the map</div>
 
@@ -34,4 +36,4 @@
         This example shows how to make a map draggable outside of the map itself.
     </div>
   </body>
-</html>
\ No newline at end of file
+</html>

Copied: sandbox/ahocevar/renderer-ng/examples/donut.html (from rev 10991, trunk/openlayers/examples/donut.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/donut.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/donut.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>OpenLayers Polygon Hole Digitizing</title>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+        <style>
+            #controlToggle li {
+                list-style: none;
+            }
+            .olControlAttribution {
+                font-size: 9px;
+                bottom: 2px;
+            }
+            #output {
+                margin: 1em;
+                font-size: 0.9em;
+            }
+        </style>
+    </head>
+    <body>
+        <h1 id="title">Drawing Holes in Polygons</h1>
+        <div id="tags">
+            draw polygon hole
+        </div>         
+        <p id="shortdesc">
+            The DrawFeature control can be used to digitize donut polygons.
+        </p>
+        
+        <div id="map" class="smallmap"></div>
+        <ul id="controlToggle">
+            <li>
+                <input type="radio" name="type" value="none" id="noneToggle"
+                       onclick="toggleControl(this);" checked="checked">
+                <label for="noneToggle">navigate</label>
+            </li>
+            <li>
+                <input type="radio" name="type" value="polygon" id="polygonToggle" onclick="toggleControl(this);">
+                <label for="polygonToggle">draw polygon</label>
+            </li>
+        </ul>
+        <div id="output"></div>
+        <div id="docs">
+            <p>
+                To digitize holes in polygons, hold down the <code>Alt</code> 
+                key and draw over an existing polygon.  By default, the 
+                <code>Shift</code> key triggers freehand drawing.  Use a 
+                combination of the <code>Shift</code> and <code>Alt</code> keys
+                to digitize holes in freehand mode.
+            </p>
+            <p>
+                See the <a href="donut.js" target="_blank">
+                donut.js source</a> for details on how this is done.
+            </p>
+        </div>
+        <script src="../lib/OpenLayers.js"></script>
+        <script src="donut.js"></script>
+    </body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/examples/donut.js (from rev 10991, trunk/openlayers/examples/donut.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/donut.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/donut.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,38 @@
+var map = new OpenLayers.Map({
+    div: "map",
+    layers: [
+        new OpenLayers.Layer.OSM(),
+        new OpenLayers.Layer.Vector()
+    ],
+    center: new OpenLayers.LonLat(0, 0),
+    zoom: 1
+});
+
+var draw = new OpenLayers.Control.DrawFeature(
+    map.layers[1],
+    OpenLayers.Handler.Polygon,
+    {handlerOptions: {holeModifier: "altKey"}}
+);
+map.addControl(draw);
+
+// optionally listen for sketch events on the layer
+var output = document.getElementById("output");
+function updateOutput(event) {
+    window.setTimeout(function() {
+        output.innerHTML = event.type + " " + event.feature.id;
+    }, 100);
+}
+map.layers[1].events.on({
+    sketchmodified: updateOutput,
+    sketchcomplete: updateOutput
+})
+
+// add behavior to UI elements
+function toggleControl(element) {
+    if (element.value === "polygon" && element.checked) {
+        draw.activate();
+    } else {
+        draw.deactivate();
+    }
+}
+document.getElementById("noneToggle").checked = true;
\ No newline at end of file

Modified: sandbox/ahocevar/renderer-ng/examples/doubleSetCenter.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/doubleSetCenter.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/doubleSetCenter.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -9,7 +9,9 @@
     <body>
         <h1 id="title">Double Set Center Example</h1>
 
-        <div id="tags"></div>
+        <div id="tags">
+            center, centering, cleanup
+        </div>
 
         <p id="shortdesc">
             Demonstrate the behavior of two calls to set the center after instatiating the layer object.
@@ -20,7 +22,7 @@
         <script defer="defer" type="text/javascript">
             var map = new OpenLayers.Map('map');
             var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(wms);
             map.setCenter(new OpenLayers.LonLat(100,10));
             map.setCenter(new OpenLayers.LonLat(1,1));

Modified: sandbox/ahocevar/renderer-ng/examples/drag-feature.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/drag-feature.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/drag-feature.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -21,7 +21,7 @@
             function init(){
                 map = new OpenLayers.Map('map');
                 var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'});
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'});
     
                 vectors = new OpenLayers.Layer.Vector("Vector Layer");
 
@@ -62,7 +62,9 @@
     <body onload="init()">
         <h1 id="title">Drag Feature Example</h1>
 
-        <div id="tags"></div>
+        <div id="tags">
+            point, line, linestring, polygon, digitizing, geometry, draw, drag
+        </div>
 
         <p id="shortdesc">
             Demonstrates point, line and polygon creation and editing.

Modified: sandbox/ahocevar/renderer-ng/examples/draw-feature.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/draw-feature.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/draw-feature.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -24,7 +24,7 @@
                 map = new OpenLayers.Map('map');
 
                 var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'});
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'});
 
                 var pointLayer = new OpenLayers.Layer.Vector("Point Layer");
                 var lineLayer = new OpenLayers.Layer.Vector("Line Layer");
@@ -67,7 +67,9 @@
     <body onload="init()">
         <h1 id="title">OpenLayers Draw Feature Example</h1>
 
-        <div id="tags"></div>
+        <div id="tags">
+            point, line, linestring, polygon, digitizing, geometry, draw, drag
+        </div>
 
         <p id="shortdesc">
             Demonstrate on-screen digitizing tools for point, line, and polygon creation.

Modified: sandbox/ahocevar/renderer-ng/examples/dynamic-text-layer.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/dynamic-text-layer.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/dynamic-text-layer.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -10,7 +10,7 @@
             function init(){
                 map = new OpenLayers.Map('map');
                 var wms = new OpenLayers.Layer.WMS(
-                    "OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0",
+                    "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'}
                 );
 
@@ -66,6 +66,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">Dynamic POIs via a Text Layer</h1>
+        <div id="tags">
+            poi, dynamic data, text, format, strategy, popup, select, selection
+        </div>
         <p id="shortdesc">
            Loading dynamic data from a text file. 
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/editingtoolbar-outside.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/editingtoolbar-outside.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/editingtoolbar-outside.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -24,7 +24,7 @@
             map = new OpenLayers.Map('map', {theme: null});
             layer = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: "basic"}
             );
             map.addLayer(layer);
@@ -43,6 +43,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers EditingToolbar Outside Viewport</h1>
+    <div id="tags">
+        digitizing, point, line, linestring, polygon, editing, positioning, style
+    </div>
     <p id="shortdesc">
         Display an editing toolbar panel outside the map viewport.
     </p>

Modified: sandbox/ahocevar/renderer-ng/examples/editingtoolbar.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/editingtoolbar.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/editingtoolbar.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -15,7 +15,7 @@
 
             function init(){
                 layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                        "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                        "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
     
                 vlayer = new OpenLayers.Layer.Vector( "Editable" );
                 map = new OpenLayers.Map( 'map', {
@@ -33,7 +33,9 @@
     <body onload="init()">
         <h1 id="title">Editing Toolbar Example</h1>
 
-        <div id="tags"></div>
+        <div id="tags">
+            digitizing, point, line, linestring, polygon, editing
+        </div>
 
         <p id="shortdesc">
             Demonstrate polygon, polyline and point creation and editing tools.

Modified: sandbox/ahocevar/renderer-ng/examples/events.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/events.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/events.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -18,7 +18,7 @@
             #output {
                 position: absolute;
                 left: 550px;
-                top: 40px;
+                top: 4em;
                 width: 350px;
                 height: 400px;
             }
@@ -106,7 +106,7 @@
                 
                 var vmap = new OpenLayers.Layer.WMS(
                     "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'}
                 );
                 var landsat = new OpenLayers.Layer.WMS(
@@ -136,6 +136,7 @@
         <h1 id="title">Event Handling</h1>
 
         <div id="tags">
+            event, events, handler, listener, cleanup
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/example-list.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/example-list.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/example-list.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -34,6 +34,12 @@
                 font-weight: bold;
                 color: #333;
             }
+            .ex_tags{
+                display: inline;
+                font-size: smaller;
+                font-style: italic;
+                color: #333;
+            }
             .ex_filename {
                 font-weight: normal;
                 font-size: 0.8em;
@@ -92,8 +98,6 @@
         <script type="text/javascript" src="Jugl.js"></script>
         <script type="text/javascript" src="example-list.js"></script>
         <script type="text/javascript">
-            // import
-            var Jugl = window["http://jugl.tschaub.net/trunk/lib/Jugl.js"];
             var template, target;
 
             function listExamples(examples) {
@@ -195,7 +199,7 @@
                 }
             }
             window.onload = function() {
-                template = new Jugl.Template("template");
+                template = new jugl.Template("template");
                 target = document.getElementById("examples");
                 listExamples(info.examples);
                 document.getElementById("exwin").src = "../examples/example.html";
@@ -231,6 +235,9 @@
                         <p class="ex_classes" jugl:content="example.classes">
                             Related Classes go here
                         </p>
+                        <div class="ex_tags" jugl:content="'...tagged with ' + example.tags">
+                            
+                        </div>
                     </a>
                 </li>
             </ul>

Modified: sandbox/ahocevar/renderer-ng/examples/example.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/example.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/example.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,55 +1,22 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <title>OpenLayers Example</title>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
-    <link rel="stylesheet" href="style.css" type="text/css" />
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        // making this a global variable so that it is accessible for
-        // debugging/inspecting in Firebug
-        var map = null;
-
-        function init(){
-
-            map = new OpenLayers.Map('map');
-
-            var ol_wms = new OpenLayers.Layer.WMS(
-                "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
-                {layers: 'basic'}
-            );
-
-            var jpl_wms = new OpenLayers.Layer.WMS(
-                "NASA Global Mosaic",
-                "http://t1.hypercube.telascience.org/cgi-bin/landsat7", 
-                {layers: "landsat7"}
-            );
-
-            var dm_wms = new OpenLayers.Layer.WMS(
-                "Canadian Data",
-                "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap",
-                {
-                    layers: "bathymetry,land_fn,park,drain_fn,drainage," +
-                            "prov_bound,fedlimit,rail,road,popplace",
-                    transparent: "true",
-                    format: "image/png"
-                },
-                {isBaseLayer: false, visibility: false}
-            );
-
-            map.addLayers([ol_wms, jpl_wms, dm_wms]);
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-            map.zoomToMaxExtent();
-        }
-    </script>
-  </head>
-  <body onload="init()">
-    <h1 id="title">OpenLayers Example</h1>
-    <div id="tags"></div>
-    <p id="shortdesc">
-        Demonstrate a simple map with an overlay that includes layer switching controls.
-    </p>
-    <div id="map" class="smallmap"></div>
-    <div id="docs"></div>
-  </body>
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>OpenLayers Example</title>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+    </head>
+    <body>
+        <h1 id="title">OpenLayers Example</h1>
+        <div id="tags">simple, basic</div>
+        <p id="shortdesc">
+            Demonstrate a simple map with an overlay that includes layer switching controls.
+        </p>
+        <div id="map" class="smallmap"></div>
+        <div id="docs">
+            <p>This is a basic example demonstrating the use of a map with two layers and a few controls.</p>
+            <p>View the <a href="example.js" target="_blank">example.js</a> source to see how this is done.</p>
+        </div>
+        <script src="../lib/OpenLayers.js"></script>
+        <script src="example.js"></script>
+    </body>
 </html>

Copied: sandbox/ahocevar/renderer-ng/examples/example.js (from rev 10991, trunk/openlayers/examples/example.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/example.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/example.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,23 @@
+var map = new OpenLayers.Map("map");
+
+var ol_wms = new OpenLayers.Layer.WMS(
+    "OpenLayers WMS",
+    "http://vmap0.tiles.osgeo.org/wms/vmap0",
+    {layers: "basic"}
+);
+
+var dm_wms = new OpenLayers.Layer.WMS(
+    "Canadian Data",
+    "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap",
+    {
+        layers: "bathymetry,land_fn,park,drain_fn,drainage," +
+                "prov_bound,fedlimit,rail,road,popplace",
+        transparent: "true",
+        format: "image/png"
+    },
+    {isBaseLayer: false, visibility: false}
+);
+
+map.addLayers([ol_wms, dm_wms]);
+map.addControl(new OpenLayers.Control.LayerSwitcher());
+map.zoomToMaxExtent();

Modified: sandbox/ahocevar/renderer-ng/examples/filter-strategy.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/filter-strategy.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/filter-strategy.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -7,7 +7,6 @@
         <link rel="stylesheet" href="style.css" type="text/css">
         <script src="../lib/OpenLayers.js"></script>
         <script>OpenLayers.ImgPath = "../img/";</script>
-        <script src="filter-strategy.js"></script>
         <style>
             .olControlAttribution {
                 font-size: 9px;
@@ -15,8 +14,11 @@
             }
         </style>
     </head>
-    <body onload="init()">
+    <body>
         <h1 id="title">Filter Strategy</h1>
+        <div id="tags">
+            filter, strategy, strategies, kml, advanced
+        </div>
         <p id="shortdesc">
             Demonstrates the filter strategy for limiting features passed to the layer.
         </p>
@@ -44,5 +46,6 @@
                 source to see how this is done
             </p>
         </div>
+        <script src="filter-strategy.js"></script>
     </body>
 </html>

Modified: sandbox/ahocevar/renderer-ng/examples/filter-strategy.js
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/filter-strategy.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/filter-strategy.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,62 +1,11 @@
 var map, filter, filterStrategy;
-
+var animationTimer;
+var currentDate;
 var startDate = new Date(1272736800000); // lower bound of when values
 var endDate = new Date(1272737100000); // upper value of when values
 var step = 8; // sencods to advance each interval
 var interval = 0.125; // seconds between each step in the animation
 
-function init() {
-
-    // add behavior to elements
-    document.getElementById("start").onclick = startAnimation;
-    document.getElementById("stop").onclick = stopAnimation;
-    var spanEl = document.getElementById("span");
-
-    var mercator = new OpenLayers.Projection("EPSG:900913");
-    var geographic = new OpenLayers.Projection("EPSG:4326");
-    map = new OpenLayers.Map("map");
-    
-    var osm = new OpenLayers.Layer.OSM();
-    
-    filter = new OpenLayers.Filter.Comparison({
-        type: OpenLayers.Filter.Comparison.BETWEEN,
-        property: "when",
-        lowerBoundary: startDate,
-        upperBoundary: new Date(startDate.getTime() + (parseInt(spanEl.value, 10) * 1000))
-    });
-
-    filterStrategy = new OpenLayers.Strategy.Filter({filter: filter});
-
-    var flights = new OpenLayers.Layer.Vector("Aircraft Locations", {
-        projection: geographic,
-        strategies: [new OpenLayers.Strategy.Fixed(), filterStrategy],
-        protocol: new OpenLayers.Protocol.HTTP({
-            url: "kml-track.kml",
-            format: new OpenLayers.Format.KML({
-                extractTracks: true
-                //,extractStyles: true // use style from KML instead of styleMap below
-            })
-        }),
-        styleMap: new OpenLayers.StyleMap({
-            "default": new OpenLayers.Style({
-                graphicName: "circle",
-                pointRadius: 3,
-                fillOpacity: 0.25,
-                fillColor: "#ffcc66",
-                strokeColor: "#ff9933",
-                strokeWidth: 1
-            })
-        }),
-        renderers: ["Canvas", "SVG", "VML"]
-    });
-    
-    map.addLayers([osm, flights]);
-    map.setCenter(new OpenLayers.LonLat(-93.2735, 44.8349).transform(geographic, mercator), 8);
-    
-};
-
-var animationTimer;
-var currentDate;
 function startAnimation() {
     if (animationTimer) {
         stopAnimation(true);
@@ -87,3 +36,49 @@
     }
 }
 
+// add behavior to elements
+document.getElementById("start").onclick = startAnimation;
+document.getElementById("stop").onclick = stopAnimation;
+var spanEl = document.getElementById("span");
+
+var mercator = new OpenLayers.Projection("EPSG:900913");
+var geographic = new OpenLayers.Projection("EPSG:4326");
+map = new OpenLayers.Map("map");
+
+var osm = new OpenLayers.Layer.OSM();
+
+filter = new OpenLayers.Filter.Comparison({
+    type: OpenLayers.Filter.Comparison.BETWEEN,
+    property: "when",
+    lowerBoundary: startDate,
+    upperBoundary: new Date(startDate.getTime() + (parseInt(spanEl.value, 10) * 1000))
+});
+
+filterStrategy = new OpenLayers.Strategy.Filter({filter: filter});
+
+var flights = new OpenLayers.Layer.Vector("Aircraft Locations", {
+    projection: geographic,
+    strategies: [new OpenLayers.Strategy.Fixed(), filterStrategy],
+    protocol: new OpenLayers.Protocol.HTTP({
+        url: "kml-track.kml",
+        format: new OpenLayers.Format.KML({
+            extractTracks: true
+            //,extractStyles: true // use style from KML instead of styleMap below
+        })
+    }),
+    styleMap: new OpenLayers.StyleMap({
+        "default": new OpenLayers.Style({
+            graphicName: "circle",
+            pointRadius: 3,
+            fillOpacity: 0.25,
+            fillColor: "#ffcc66",
+            strokeColor: "#ff9933",
+            strokeWidth: 1
+        })
+    }),
+    renderers: ["Canvas", "SVG", "VML"]
+});
+
+map.addLayers([osm, flights]);
+map.setCenter(new OpenLayers.LonLat(-93.2735, 44.8349).transform(geographic, mercator), 8);
+

Modified: sandbox/ahocevar/renderer-ng/examples/filter.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/filter.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/filter.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -63,6 +63,10 @@
   </head>
   <body>
     <h1 id="title">Filter Encoding</h1>
+    <div id="tags">
+        filter, format, comparison, filter encoding, fe, logical, attribute,
+        attributive, spatial, advanced
+    </div>
     <p id="shortdesc">
         Using the filter format write out filter objects.
     </p>

Modified: sandbox/ahocevar/renderer-ng/examples/fractional-zoom.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/fractional-zoom.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/fractional-zoom.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,7 +13,7 @@
                   numZoomLevels: 10 });
             var wms = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'}
             );
             map.addLayers([wms]);
@@ -40,6 +40,7 @@
     <h1 id="title">Fractional Zoom Example</h1>
 
     <div id="tags">
+        zoomlevel, unlimited zoom, scale
     </div>
     <p id="shortdesc">
             Shows the use of a map with fractional (or non-discrete) zoom levels.

Modified: sandbox/ahocevar/renderer-ng/examples/fullScreen.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/fullScreen.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/fullScreen.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -17,6 +17,9 @@
                 bottom: 1em;
                 left: 1em;
                 width: 512px;
+                z-index: 20000;
+                background-color: white;
+                padding: 0 0.5em 0.5em 0.5em;
             }
         </style>
         <script src="../lib/OpenLayers.js"></script>
@@ -26,7 +29,7 @@
                 map = new OpenLayers.Map('map');
 
             var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} );
             var jpl_wms = new OpenLayers.Layer.WMS( "NASA Global Mosaic",
                 "http://t1.hypercube.telascience.org/cgi-bin/landsat7", 
@@ -40,8 +43,8 @@
 
                 map.addLayers([ol_wms, jpl_wms, dm_wms]);
                 map.addControl(new OpenLayers.Control.LayerSwitcher());
-                // map.setCenter(new OpenLayers.LonLat(0, 0), 0);
-                map.zoomToMaxExtent();
+                map.setCenter(new OpenLayers.LonLat(0, 0), 6);
+                //map.zoomToMaxExtent();
             }
         </script>
     </head>
@@ -51,7 +54,9 @@
           <div id="text">
               <h1 id="title">Full Screen Example</h1>
 
-              <div id="tags"></div>
+              <div id="tags">
+                css, style, fullscreen, window, margin, padding, scrollbar
+              </div>
 
               <p id="shortdesc">
                 Demonstrate a map that fill the entire browser window.

Modified: sandbox/ahocevar/renderer-ng/examples/geojson.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/geojson.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/geojson.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -12,7 +12,7 @@
         function init(){
             map = new OpenLayers.Map( 'map' );
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} );
             map.addLayer(layer);
             map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
@@ -57,6 +57,17 @@
   </head>
   <body onload="init()">
     <h1 id="title">GeoJSON Example</h1>
+    
+    <div id="tags">
+       JSON, GeoJSON
+    </div>
+
+      <p id="shortdesc">
+        Demonstrate the use of the GeoJSON format.
+    </p>
     <div id="map" class="smallmap"></div>
+    <div id="docs">
+        This example uses the GeoJSON format.
+    </div>
   </body>
 </html>

Modified: sandbox/ahocevar/renderer-ng/examples/georss-flickr.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/georss-flickr.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/georss-flickr.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -16,7 +16,7 @@
             map = new OpenLayers.Map('map', {maxResolution:'auto'});
             
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             
             map.setCenter(new OpenLayers.LonLat(0, 0), 0);
@@ -94,7 +94,23 @@
   </head>
   <body onload="init()">
     <h1 id="title">GeoRSS from Flickr in OpenLayers</h1>
-    <p>The displayed GeoRSS feed has a <tt>&lt;media:thumbnail/&gt;</tt> property for each item. An extended <tt>createFeatureFromItem()</tt> function is used to add this attribute to the attributes hash of each feature read in by <tt>OpenLayers.Format.GeoRSS</tt>. The example is configured with a style to render each item with its thumbnail image. Also, to show how rules work, we defined a rule that if the title of an rss item contains "powder", it will be rendered larger than the others.</p>
+    <div id="tags">
+        georss, style, styling, marker, flickr, thumbnail, image, rule
+    </div>
+
+    <p id="shortdesc">
+        Display a flickr-feed on top of the map
+    </p>
+    
     <div id="map" class="smallmap"></div>
+    <div id="docs">
+    <p>The displayed GeoRSS feed has a <tt>&lt;media:thumbnail/&gt;</tt> 
+    property for each item. An extended <tt>createFeatureFromItem()</tt> 
+    function is used to add this attribute to the attributes hash of each 
+    feature read in by <tt>OpenLayers.Format.GeoRSS</tt>. The example is 
+    configured with a style to render each item with its thumbnail image. 
+    Also, to show how rules work, we defined a rule that if the title of an 
+    rss item contains "powder", it will be rendered larger than the others.</p>
+    </div>
   </body>
 </html>

Modified: sandbox/ahocevar/renderer-ng/examples/georss-markers.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/georss-markers.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/georss-markers.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,13 +11,13 @@
         function init(){
             map = new OpenLayers.Map('map', {maxResolution:'auto'});
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             map.setCenter(new OpenLayers.LonLat(0, 0), 0);
             map.addControl(new OpenLayers.Control.LayerSwitcher());
             var newl = new OpenLayers.Layer.GeoRSS( 'GeoRSS', 'georss.xml');
             map.addLayer(newl);
-            var yelp = new OpenLayers.Icon("http://openlayers.org/~crschmidt/yelp.png", new OpenLayers.Size(20,29));
+            var yelp = new OpenLayers.Icon("http://www.openlayers.org/images/OpenLayers.trac.png", new OpenLayers.Size(49,44));
             var newl = new OpenLayers.Layer.GeoRSS( 'Yelp GeoRSS', 'yelp-georss.xml', {'icon':yelp});
             map.addLayer(newl);
         }
@@ -26,7 +26,9 @@
   <body onload="init()">
     <h1 id="title">GeoRSS Marker Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        georss, style, styling, marker, flickr, image
+    </div>
 
     <p id="shortdesc">
         Demonstrate loading a GeoRSS feed using the GeoRSS parser.

Modified: sandbox/ahocevar/renderer-ng/examples/georss.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/georss.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/georss.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
         function init(){
             map = new OpenLayers.Map('map', {maxResolution:'auto'});
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             map.setCenter(new OpenLayers.LonLat(0, 0), 0);
             map.addControl(new OpenLayers.Control.LayerSwitcher());
@@ -29,7 +29,9 @@
   <body onload="init()">
     <h1 id="title">GeoRSS Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        georss, style, styling, marker
+    </div>
 
     <p id="shortdesc">
         Display a couple of locally cached georss feeds on an a basemap.
@@ -48,9 +50,9 @@
                <input type="submit" onclick="addUrl(); return false;" value="Load Feed" onsubmit="addUrl(); return false;" />
         </form>
 
-        <p>The above input box allows the input of a URL to a GeoRSS feed. This feed can be local to the HTML page --
+        <p>The above input box allows the input of a URL to a GeoRSS feed. This feed can be local to the HTML page &mdash;
         for example, entering 'georss.xml' will work by default, because there is a local file in the directory called
-        georss.xml -- or, with a properly set up ProxyHost variable (as is used here), it will be able to load any
+        georss.xml &mdash; or, with a properly set up ProxyHost variable (as is used here), it will be able to load any
         HTTP URL which contains GeoRSS and display it. Anything else will simply have no effect.</p>
     </div>
   </body>

Modified: sandbox/ahocevar/renderer-ng/examples/getfeature-wfs.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/getfeature-wfs.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/getfeature-wfs.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -18,8 +18,8 @@
             });
             layer = new OpenLayers.Layer.WMS(
                 "States WMS/WFS",
-                "http://demo.opengeo.org/geoserver/ows",
-                {layers: 'topp:states', format: 'image/gif'}
+                "http://v2.suite.opengeo.org/geoserver/ows",
+                {layers: 'usa:states', format: 'image/gif'}
             );
             select = new OpenLayers.Layer.Vector("Selection", {styleMap: 
                 new OpenLayers.Style(OpenLayers.Feature.Vector.style["select"])
@@ -57,6 +57,7 @@
 <h1 id="title">WFS GetFeature Example (GeoServer)</h1>
 
 <div id="tags">
+WFS, GetFeature
 </div>
 
 <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/getfeatureinfo-control.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/getfeatureinfo-control.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/getfeatureinfo-control.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -160,7 +160,9 @@
   <body onload="load()">
       <h1 id="title">Feature Info Example</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+        WMS, GetFeatureInfo
+      </div>
 
       <p id="shortdesc">
         Demonstrates the WMSGetFeatureInfo control for fetching information about a position from WMS (via GetFeatureInfo request).

Modified: sandbox/ahocevar/renderer-ng/examples/getfeatureinfo-popup.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/getfeatureinfo-popup.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/getfeatureinfo-popup.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -75,7 +75,9 @@
   <body onload="load()">
       <h1 id="title">Feature Info in Popup</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+        WMS, GetFeatureInfo, popup
+      </div>
 
       <p id="shortdesc">
         Demonstrates the WMSGetFeatureInfo control for fetching information

Modified: sandbox/ahocevar/renderer-ng/examples/getfeatureinfo.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/getfeatureinfo.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/getfeatureinfo.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,9 @@
   <body>
       <h1 id="title">Feature Info Example</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+        WMS, GetFeatureInfo, cleanup
+      </div>
 
       <p id="shortdesc">
         Demonstrates sending a GetFeatureInfo query to an OWS. Returns information about a map feature in the side DIV.
@@ -31,6 +33,7 @@
     OpenLayers.ProxyHost = "/dev/examples/proxy.cgi?url=";
     var map = new OpenLayers.Map('map', {'maxResolution':'auto'});
 
+// cleanup: this WMS is broken
     var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
         "http://world.freemap.in/cgi-bin/mapserv?map=/www/freemap.in/world/map/factbook.map", {'layers': 'factbook'} );
     map.addLayer(wms);

Modified: sandbox/ahocevar/renderer-ng/examples/gml-layer.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/gml-layer.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/gml-layer.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,7 +13,7 @@
         function init(){
             map = new OpenLayers.Map('map');
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             map.zoomToExtent(new OpenLayers.Bounds(-3.922119,44.335327,4.866943,49.553833));
             map.addLayer(new OpenLayers.Layer.GML("GML", "gml/polygon.xml"));
@@ -23,7 +23,9 @@
   <body onload="init()">
       <h1 id="title">GML Layer Example</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+        GML
+      </div>
 
       <p id="shortdesc">
           Loads locally stored GML vector data on a basemap. Includes GML example file.

Modified: sandbox/ahocevar/renderer-ng/examples/google-reproject.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/google-reproject.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/google-reproject.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -37,7 +37,9 @@
   <body onload="init()">
     <h1 id="title">Google with Overlay Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        Google, overlay, mercator, reproject, cleanup
+    </div>
 
     <p id="shortdesc">
         Demonstrate a Google basemap used with boundary overlay layer.

Modified: sandbox/ahocevar/renderer-ng/examples/google-v3-alloverlays.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/google-v3-alloverlays.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/google-v3-alloverlays.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,6 +11,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">Google (v3) allOverlays Layer Example</h1>
+        <div id="tags">
+            Google, overlay
+        </div>
         <p id="shortdesc">
             Demonstrate use the Google Maps v3 API with allOverlays set to true on the map.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/google-v3.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/google-v3.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/google-v3.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -5,12 +5,15 @@
         <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
         <link rel="stylesheet" href="../theme/default/google.css" type="text/css">
         <link rel="stylesheet" href="style.css" type="text/css">
-        <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
+        <script src="http://maps.google.com/maps/api/js?v=3.2&amp;sensor=false"></script>
         <script src="../lib/OpenLayers.js"></script>
         <script src="google-v3.js"></script>
     </head>
     <body onload="init()">
         <h1 id="title">Google (v3) Layer Example</h1>
+        <div id="tags">
+            Google, api key, apikey
+        </div>
         <p id="shortdesc">
             Demonstrate use the Google Maps v3 API.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/google.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/google.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/google.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -41,7 +41,9 @@
   <body onload="init()">
     <h1 id="title">Google Layer Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        Google
+    </div>
 
     <p id="shortdesc">
         Demonstrate use of the various types of Google layers.

Modified: sandbox/ahocevar/renderer-ng/examples/graphic-name.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/graphic-name.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/graphic-name.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,89 +1,39 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <title>OpenLayers Graphic Names</title>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
-    <link rel="stylesheet" href="style.css" type="text/css" />
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        // user custom graphicname
-        
-        OpenLayers.Renderer.symbol.lightning = [0,0, 4,2, 6,0, 10,5, 6,3, 4,5, 0,0];
-        OpenLayers.Renderer.symbol.rectangle = [0,0, 4,0, 4,10, 0,10, 0,0];
-            
-        var map;
-
-        function init() {
-            map = new OpenLayers.Map('map');
-
-            // list of well-known graphic names
-            var graphics = ["star", "cross", "x", "square", "triangle", "circle", "lightning", "rectangle"];
-            
-            // Create one feature for each well known graphic.
-            // Give features a type attribute with the graphic name.
-            var num = graphics.length;
-            var slot = map.maxExtent.getWidth() / num;
-            var features = Array(num);
-            for(var i=0; i<graphics.length; ++i) {
-                lon = map.maxExtent.left + (i * slot) + (slot / 2);
-                features[i] = new OpenLayers.Feature.Vector(
-                    new OpenLayers.Geometry.Point(
-                        map.maxExtent.left + (i * slot) + (slot / 2), 0
-                    ), {
-                        type: graphics[i]
-                    }
-                );
-            }
-            
-            // Create a style map for painting the features.
-            // The graphicName property of the symbolizer is evaluated using
-            // the type attribute on each feature (set above).
-            var styles = new OpenLayers.StyleMap({
-                "default": {
-                    graphicName: "${type}",
-                    pointRadius: 10,
-                    strokeColor: "fuchsia",
-                    strokeWidth: 2,
-                    fillColor: "lime",
-                    fillOpacity: 0.6
-                },
-                "select": {
-                    pointRadius: 20,
-                    fillOpacity: 1,
-                    rotation: 45
-                }
-            });
-
-            // Create a vector layer and give it your style map.
-            var layer = new OpenLayers.Layer.Vector(
-                "Graphics", {styleMap: styles, isBaseLayer: true}
-            );
-            layer.addFeatures(features);
-            map.addLayer(layer);
-            
-            // Create a select feature control and add it to the map.
-            var select = new OpenLayers.Control.SelectFeature(layer, {hover: true});
-            map.addControl(select);
-            select.activate();
-            
-            map.setCenter(new OpenLayers.LonLat(0, 0), 0);
-        }
-    </script>
-  </head>
-  <body onload="init()">
-    <h1 id="title">Named Graphics Example</h1>
-
-    <div id="tags"></div>
-
-    <p id="shortdesc">
-        Shows how to use well-known graphic names.
-    </p>
-
-    <div id="map" class="smallmap"></div>
-
-    <div id="docs">
-        OpenLayers supports well-known names for a few graphics.  You can use
-        the names "star", "cross", "x", "square", "triangle", and "circle" as
-        the value for the graphicName property of a symbolizer.
-    </div>
-  </body>
-</html>
\ No newline at end of file
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <title>OpenLayers Graphic Names</title>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
+        <link rel="stylesheet" href="style.css" type="text/css" />
+        <script src="../lib/OpenLayers.js" type="text/javascript"></script>
+        <script src="./graphic-name.js" type="text/javascript"></script>
+    </head>
+    <body onload="init();">
+        <h1 id="title">Named Graphics Example</h1>
+        <div id="tags">
+            vector, named graphic, star, cross, x, square, triangle, circle, style
+        </div>
+        <p id="shortdesc">
+            Shows how to use well-known graphic names.
+        </p>
+        <div id="map" class="smallmap">
+        </div>
+        <div id="docs">
+            <p>
+                OpenLayers supports well-known names for a few graphics.  You 
+                can use the names &quot;star&quot;, &quot;cross&quot;, 
+                &quot;x&quot;, &quot;square&quot;, &quot;triangle&quot;, and 
+                &quot;circle&quot; as value for the graphicName property of a 
+                symbolizer.
+            </p>
+            <p>
+                The named symbols &quot;lightning&quot;, &quot;rectangle&quot; 
+                and &quot;church&quot; are user defined.
+            </p>
+            <p>
+                See <a href="./graphic-name.js">graphic-name.js</a>
+                for the source code of this example.
+            </p>
+        </div>
+    </body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/examples/graphic-name.js (from rev 10991, trunk/openlayers/examples/graphic-name.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/graphic-name.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/graphic-name.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,62 @@
+// user custom graphicname
+OpenLayers.Renderer.symbol.lightning = [0, 0, 4, 2, 6, 0, 10, 5, 6, 3, 4, 5, 0, 0];
+OpenLayers.Renderer.symbol.rectangle = [0, 0, 4, 0, 4, 10, 0, 10, 0, 0];
+OpenLayers.Renderer.symbol.church = [4, 0, 6, 0, 6, 4, 10, 4, 10, 6, 6, 6, 6, 14, 4, 14, 4, 6, 0, 6, 0, 4, 4, 4, 4, 0];
+var map;
+
+function init(){
+    map = new OpenLayers.Map('map', {
+        controls: []
+    });
+    
+    // list of well-known graphic names
+    var graphics = ["star", "cross", "x", "square", "triangle", "circle", "lightning", "rectangle", "church"];
+    
+    // Create one feature for each well known graphic.
+    // Give features a type attribute with the graphic name.
+    var num = graphics.length;
+    var slot = map.maxExtent.getWidth() / num;
+    var features = Array(num);
+    for (var i = 0; i < graphics.length; ++i) {
+        lon = map.maxExtent.left + (i * slot) + (slot / 2);
+        features[i] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(map.maxExtent.left + (i * slot) + (slot / 2), 0), {
+            type: graphics[i]
+        });
+    }
+    
+    // Create a style map for painting the features.
+    // The graphicName property of the symbolizer is evaluated using
+    // the type attribute on each feature (set above).
+    var styles = new OpenLayers.StyleMap({
+        "default": {
+            graphicName: "${type}",
+            pointRadius: 10,
+            strokeColor: "fuchsia",
+            strokeWidth: 2,
+            fillColor: "lime",
+            fillOpacity: 0.6
+        },
+        "select": {
+            pointRadius: 20,
+            fillOpacity: 1,
+            rotation: 45
+        }
+    });
+    
+    // Create a vector layer and give it your style map.
+    var layer = new OpenLayers.Layer.Vector("Graphics", {
+        styleMap: styles,
+        isBaseLayer: true
+    });
+    layer.addFeatures(features);
+    map.addLayer(layer);
+    
+    // Create a select feature control and add it to the map.
+    var select = new OpenLayers.Control.SelectFeature(layer, {
+        hover: true
+    });
+    map.addControl(select);
+    select.activate();
+    
+    map.zoomToMaxExtent();
+}

Modified: sandbox/ahocevar/renderer-ng/examples/graticule.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/graticule.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/graticule.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -44,7 +44,7 @@
                 });
 
                 var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'}, {wrapDateLine: true} );
 
                 map1.addLayers([ol_wms]);
@@ -89,6 +89,7 @@
         <h1 id="title">Graticule Example</h1>
 
         <div id="tags">
+          graticule, grid
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/gutter.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/gutter.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/gutter.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -33,7 +33,9 @@
   <body>
     <h1 id="title">Gutter Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        gutter, quality, tile
+    </div>
 
     <p id="shortdesc">
         Demonstrates map tiling artifacts, and OpenLayer's facility for correcting this distortion.

Modified: sandbox/ahocevar/renderer-ng/examples/highlight-feature.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/highlight-feature.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/highlight-feature.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -70,6 +70,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers Select and Highlight Feature Example</h1>
+    <div id="tags">
+        select, highlight, hover, onmouseover, click, vector
+    </div>
     <p id="shortdesc">
       Select features on click, highlight features on hover.
     </p>  

Modified: sandbox/ahocevar/renderer-ng/examples/hover-handler.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/hover-handler.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/hover-handler.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -76,7 +76,7 @@
                 map = new OpenLayers.Map('map');
                 var layer = new OpenLayers.Layer.WMS(
                     'OpenLayers WMS',
-                    'http://labs.metacarta.com/wms/vmap0',
+                    'http://vmap0.tiles.osgeo.org/wms/vmap0',
                     {layers: 'basic'}
                 );
                 map.addLayers([layer]);
@@ -143,6 +143,7 @@
         <div id="west">
     
             <div id="tags">
+                hover, onmouseover, handler, listener, event, events
             </div>
     
             <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/image-layer.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/image-layer.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/image-layer.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -47,7 +47,9 @@
   <body onload="init()">
     <h1 id="title">Image Layer Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        image, imagelayer
+    </div>
 
     <p id="shortdesc">
         Demonstrate a single non-tiled image as a selectable base layer.

Modified: sandbox/ahocevar/renderer-ng/examples/intersects.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/intersects.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/intersects.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -161,6 +161,9 @@
   <body onload="init()">
     <div id="leftcol">
         <h1 id="title">OpenLayers Geometry Intersection Example</h1>
+        <div id="tags">
+            intersection, geometry
+        </div>
         <p id="shortdesc">
             Use of geometry.intersects method for testing geometry intersections.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/kamap.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/kamap.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/kamap.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -26,7 +26,9 @@
   <body onload="init()">
     <h1 id="title">KaMap Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        KaMap
+    </div>
 
     <p id="shortdesc">
         Demonstrate a tiled kamap layer as the base map, which can be pre-cached for higher performance.

Modified: sandbox/ahocevar/renderer-ng/examples/kml-layer.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/kml-layer.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/kml-layer.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,43 +1,33 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
-    <link rel="stylesheet" href="style.css" type="text/css" />
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        var lon = 5;
-        var lat = 40;
-        var zoom = 5;
-        var map, layer;
+<!DOCTYPE html>
+<html>
+    <head>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+    </head>
+    <body>
+    <h1 id="title">KML Layer Example</h1>
 
-        function init(){
-            map = new OpenLayers.Map('map');
-            layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
-            map.addLayer(layer);
-            map.addLayer(new OpenLayers.Layer.GML("KML", "kml/lines.kml", 
-               {
-                format: OpenLayers.Format.KML, 
-                formatOptions: {
-                  extractStyles: true, 
-                  extractAttributes: true,
-                  maxDepth: 2
-                }
-               }));
-            map.zoomToExtent(new OpenLayers.Bounds(-112.306698,36.017792,-112.03204,36.18087));
-        }
-    </script>
-  </head>
-  <body onload="init()">
-      <h1 id="title">KML Layer Example</h1>
+    <div id="tags">KML</div>
 
-      <div id="tags"></div>
-
-      <p id="shortdesc">
-          Demonstrates loading and displaying a KML file on top of a basemap.
+    <p id="shortdesc">
+        Demonstrates loading and displaying a KML file on top of a basemap.
     </p>
 
     <div id="map" class="smallmap"></div>
 
-    <div id="docs"></div>
-  </body>
+    <div id="docs">
+        <p>
+            A vector layer can be populated with features from a KML document
+            by configuring the layer with an HTTP protocol that points to the 
+            KML document and is configured with a KML format for parsing features.
+            The fixed strategy is used to load all features at once.
+        </p>
+        <p>
+            View the <a href="kml-layer.js" target="_blank">kml-layer.js</a>
+            source to see how this is done.
+        </p>
+    </div>
+    <script src="../lib/OpenLayers.js"></script>
+    <script src="kml-layer.js"></script>
+    </body>
 </html>

Copied: sandbox/ahocevar/renderer-ng/examples/kml-layer.js (from rev 10991, trunk/openlayers/examples/kml-layer.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/kml-layer.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/kml-layer.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,22 @@
+var map = new OpenLayers.Map({
+    div: "map",
+    layers: [
+        new OpenLayers.Layer.WMS(
+            "WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0",
+            {layers: "basic"}
+        ),
+        new OpenLayers.Layer.Vector("KML", {
+            strategies: [new OpenLayers.Strategy.Fixed()],
+            protocol: new OpenLayers.Protocol.HTTP({
+                url: "kml/lines.kml",
+                format: new OpenLayers.Format.KML({
+                    extractStyles: true, 
+                    extractAttributes: true,
+                    maxDepth: 2
+                })
+            })
+        })
+    ],
+    center: new OpenLayers.LonLat(-112.169, 36.099),
+    zoom: 11
+});

Modified: sandbox/ahocevar/renderer-ng/examples/kml-track.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/kml-track.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/kml-track.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -18,6 +18,9 @@
         <p id="shortdesc">
             Demonstrates parsing of gx:Track elements from KML.
         </p>
+        <div id="tags">
+            KML, parser, parsing, tracks
+        </div>
         <div id="map" class="smallmap"></div>
         <div id="docs">
             <p>

Modified: sandbox/ahocevar/renderer-ng/examples/late-render.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/late-render.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/late-render.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
             map = new OpenLayers.Map();
             layer = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'}
             );
             map.addLayer(layer);
@@ -24,7 +24,9 @@
   <body onload="init()">
     <h1 id="title">Late Rendering</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        creation, render, div
+    </div>
 
     <p id="shortdesc">
         Demonstrates how a map can be rendered to an empty container after

Modified: sandbox/ahocevar/renderer-ng/examples/layer-opacity.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/layer-opacity.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/layer-opacity.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -65,7 +65,9 @@
   <body onload="init()">
     <h1 id="title">Layer Opacity Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        opacity, transparent, transparency
+    </div>
 
     <p id="shortdesc">
         Demonstrate a change in the opacity for an overlay layer.

Modified: sandbox/ahocevar/renderer-ng/examples/layerLoadMonitoring.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/layerLoadMonitoring.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/layerLoadMonitoring.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -32,28 +32,28 @@
             map.addControl(new OpenLayers.Control.LayerSwitcher());
 
             buffer0 = new OpenLayers.Layer.WMS( "WMS Buffer 0",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} ,
                     { singleTile: false, buffer:0}
             );
             registerEvents(buffer0);
 
             buffer1 = new OpenLayers.Layer.WMS( "WMS Buffer 1",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} ,
                     { singleTile: false, buffer:1}
             );
             registerEvents(buffer1);
 
             buffer2 = new OpenLayers.Layer.WMS( "WMS Buffer 2",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} ,
                     { singleTile: false, buffer:2 }
             );
             registerEvents(buffer2);
 
             singleTileLayer = new OpenLayers.Layer.WMS( "Single Tile Layer",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} ,
                     { singleTile: true}
             );
@@ -107,7 +107,9 @@
   <body onload="init()">
       <h1 id="title">Layer Load Monitoring Example</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+        monitor, loading
+      </div>
 
       <p id="shortdesc">
           Demonstrate a method for monitoring tile loading performance.

Modified: sandbox/ahocevar/renderer-ng/examples/layerswitcher.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/layerswitcher.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/layerswitcher.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,7 +13,7 @@
             map.addControl(new OpenLayers.Control.LayerSwitcher({'div':OpenLayers.Util.getElement('layerswitcher')}));
 
             var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'}, {'displayInLayerSwitcher':false} );
 
             var jpl_wms = new OpenLayers.Layer.WMS( "NASA Global Mosaic",
@@ -38,6 +38,7 @@
     <h1 id="title">Layer Switcher Example</h1>
 
     <div id="tags">
+        tree, layerswitcher, reposition
     </div>
 
     <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/lite.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/lite.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/lite.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -9,7 +9,7 @@
         function init(){
             map = new OpenLayers.Map( 'map' );
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} );
             map.addLayer(layer);
             map.zoomToMaxExtent();
@@ -19,7 +19,9 @@
   <body onload="init()">
     <h1 id="title">Basic Single WMS Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        basic, simple, minimal, cleanup
+    </div>
 
     <div id="shortdesc">Show a Simple Map</div>
 

Modified: sandbox/ahocevar/renderer-ng/examples/mapguide.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/mapguide.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/mapguide.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -135,6 +135,7 @@
     <h1 id="title">MapGuide Layer Example</h1>
 
     <div id="tags">
+        MapGuide, basic
     </div>
 
     <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/mapserver.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/mapserver.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/mapserver.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,7 +13,7 @@
         function init(){
             map = new OpenLayers.Map( 'map' );
             layer = new OpenLayers.Layer.MapServer( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'},
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'},
                     {gutter: 15});
             map.addLayer(layer);
 
@@ -25,7 +25,7 @@
   </head>
   <body onload="init()">
     <h1 id="title">MapServer Layer</h1>
-    <div id="tags"></div>
+    <div id="tags">UMN Mapserver, tile, tiled</div>
     <div id="shortdesc">Shows MapServer Layer</div>
     <div id="map" class="smallmap"></div>
     <div id="docs">

Modified: sandbox/ahocevar/renderer-ng/examples/mapserver_untiled.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/mapserver_untiled.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/mapserver_untiled.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -16,7 +16,7 @@
         window.onload = function(){
             map = new OpenLayers.Map( 'map', {maxResolution: 'auto'} );
             var layer = new OpenLayers.Layer.MapServer( "MapServer Untiled", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'}, {singleTile: true} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'}, {singleTile: true} );
             map.addLayer(layer);
             map.setCenter(new OpenLayers.LonLat(0, 0), 1);
             map.addControl( new OpenLayers.Control.LayerSwitcher() );
@@ -25,7 +25,9 @@
   </head>
   <body>
     <h1 id="title">MapServer Single Tile Mode</h1>
-    <div id="tags"></div>
+    <div id="tags">
+        UMN Mapserver, basic, singleTile
+    </div>
     <div id="shortdesc">Shows single tile MapServer Layer</div>
     <div id="map" class="smallmap"></div>
     <div id="docs">

Modified: sandbox/ahocevar/renderer-ng/examples/marker-shadow.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/marker-shadow.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/marker-shadow.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -112,6 +112,7 @@
         <h1 id="title">Marker Shadows using Background Graphics/Z-Indexes</h1>
 
         <div id="tags">
+            markers, shadow, style
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/markerResize.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/markerResize.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/markerResize.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,17 +11,17 @@
         function init(){
             map = new OpenLayers.Map('map');
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
                 
             map.addLayer(layer);
             var markers = new OpenLayers.Layer.Markers( "Markers" );
             map.addLayer(markers);
 
-            size = new OpenLayers.Size(50,50);
+            size = new OpenLayers.Size(21, 25);
             calculateOffset = function(size) {
                         return new OpenLayers.Pixel(-(size.w/2), -size.h); };
             icon = new OpenLayers.Icon(
-                'http://boston.openguides.org/markers/AQUA.png',
+                'http://www.openlayers.org/dev/img/marker.png',
                 size, null, calculateOffset);
             markers.addMarker(
                 new OpenLayers.Marker(new OpenLayers.LonLat(-71,40), icon));
@@ -40,7 +40,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Resize a Marker</h1>
-    <div id="tags"></div>
+    <div id="tags">
+        animation, resizing, style, size
+    </div>
     <div id="shortdesc">Dynamically resize a marker</div>
     <div id="map" class="smallmap"></div>
     <div id="docs">

Modified: sandbox/ahocevar/renderer-ng/examples/markers.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/markers.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/markers.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
             OpenLayers.ProxyHost="/proxy/?url=";
             map = new OpenLayers.Map('map');
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
                 
             map.addLayer(layer);
             map.setCenter(new OpenLayers.LonLat(0, 0), 0);
@@ -22,9 +22,9 @@
             var markers = new OpenLayers.Layer.Markers( "Markers" );
             map.addLayer(markers);
 
-            var size = new OpenLayers.Size(10,17);
+            var size = new OpenLayers.Size(21,25);
             var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
-            var icon = new OpenLayers.Icon('http://boston.openguides.org/markers/AQUA.png',size,offset);
+            var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png',size,offset);
             markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon));
 
             var halfIcon = icon.clone();
@@ -43,7 +43,7 @@
   </head>
   <body onload="init()">
     <h1 id="title">Markers Layer Example</h1>
-    <div id="tags"></div>
+    <div id="tags">Marker, event, mousedown, popup, inco</div>
     <div id="shortdesc">Show markers layer with different markers</div>
     <div id="map" class="smallmap"></div>
     <div id="docs">

Modified: sandbox/ahocevar/renderer-ng/examples/markersTextLayer.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/markersTextLayer.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/markersTextLayer.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
             OpenLayers.ProxyHost="/proxy/?url=";
             map = new OpenLayers.Map('map');
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
                 
             map.addLayer(layer);
 
@@ -25,6 +25,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Using a Layer.Text to display markers</h1>
+    <div id="tags">
+        textlayer, csv, tsv, basic, popup
+    </div>
     <p id="shortdesc">
       The Layer.Text class reads a Tab seperated values file and displays it as markers on
       the map.

Modified: sandbox/ahocevar/renderer-ng/examples/measure.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/measure.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/measure.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -29,7 +29,7 @@
             map = new OpenLayers.Map('map');
             
             var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}); 
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'}); 
 
             map.addLayers([wmsLayer]);
             map.addControl(new OpenLayers.Control.LayerSwitcher());
@@ -132,10 +132,20 @@
                 control.geodesic = element.checked;
             }
         }
+        
+        function toggleImmediate(element) {
+            for(key in measureControls) {
+                var control = measureControls[key];
+                control.setImmediate(element.checked);
+            }
+        }
     </script>
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers Measure Example</h1>
+    <div id="tags">
+        measuring, geodesic, area, length, distance
+    </div>
     <p id="shortdesc">
         Demonstrates the measure control to measure distances and areas.
     </p>
@@ -161,13 +171,19 @@
                 <input type="checkbox" name="geodesic" id="geodesicToggle" onclick="toggleGeodesic(this);" />
                 <label for="geodesicToggle">use geodesic measures</label>
             </li>
+            <li>
+                <input type="checkbox" name="immediate" id="immediateToggle" onclick="toggleImmediate(this);" />
+                <label for="immediateToggle">use immediate measures</label>
+            </li>
         </ul>
         <p>Note that the geometries drawn are planar geometries and the
         metrics returned by the measure control are planar measures by
         default.  If your map is in a geographic projection or you have the
         appropriate projection definitions to transform your geometries into
         geographic coordinates, you can set the "geodesic" property of the control
-        to true to calculate geodesic measures instead of planar measures.</p>
+        to true to calculate geodesic measures instead of planar measures.
+        Also you have the possibility to set the "immediate" property to true
+        to get a new calculated value once the mouse has been mooved.</p>
     </div>
   </body>
 </html>

Modified: sandbox/ahocevar/renderer-ng/examples/mm.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/mm.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/mm.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -12,7 +12,8 @@
     </style>
 
 
-    <script type="text/javascript" src="http://clients.multimap.com/API/maps/1.1/metacarta_04"></script>
+    <!-- multimap api key for http://(www.)openlayers.org -->
+    <script type="text/javascript" src="http://developer.multimap.com/API/maps/1.2/OA10072915821139765"></script>
 
 
     <script src="../lib/OpenLayers.js"></script>
@@ -50,6 +51,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">MultiMap Example</h1>
+    <div id="tags">
+        MultiMap, basic, cleanup
+    </div>
     <p id="shortdesc">
       An example of using the Layer.MultiMap class.
     </p>  

Modified: sandbox/ahocevar/renderer-ng/examples/modify-feature.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/modify-feature.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/modify-feature.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -21,7 +21,7 @@
         function init(){
             map = new OpenLayers.Map('map');
             var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}); 
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'}); 
             OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2';
             vectors = new OpenLayers.Layer.Vector("Vector Layer");
 
@@ -106,6 +106,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers Modify Feature Example</h1>
+    <div id="tags">
+        vertices, digitizing, draw, drawing
+    </div>
     <div id="shortdesc">A demonstration of the ModifyFeature control for editing vector features.</div>
     <div id="map" class="smallmap"></div>
     <div id="controls">

Modified: sandbox/ahocevar/renderer-ng/examples/mouse-position.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/mouse-position.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/mouse-position.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -14,7 +14,7 @@
             map.addControl(new OpenLayers.Control.MousePosition());
 
             var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'} );
 
             map.addLayers([ol_wms]);
@@ -29,6 +29,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">MousePosition Control</h1>
+    <div id="tags">
+        coordinate
+    </div>
     <p id="shortdesc">
       Use the MousePosition Control to display the coordinates of the cursor
       inside or outside the map div.

Modified: sandbox/ahocevar/renderer-ng/examples/mousewheel-interval.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/mousewheel-interval.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/mousewheel-interval.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -23,7 +23,7 @@
                 new OpenLayers.Control.Attribution()
             ]} );
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} );
             map.addLayer(layer);
             map.zoomToMaxExtent();
@@ -33,7 +33,9 @@
   <body onload="init()">
     <h1 id="title">OpenLayers Mousewheel Interval Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        performance, zoom by wheel
+    </div>
 
     <div id="shortdesc">Let OpenLayers send less tile requests to the server when wheel-zooming.</div>
 

Modified: sandbox/ahocevar/renderer-ng/examples/multimap-mercator.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/multimap-mercator.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/multimap-mercator.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -54,6 +54,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">MultiMap Mercator Example</h1>
+    <div id="tags">
+        MultiMap, basic, cleanup
+    </div>
     <p id="shortdesc">
       This sphericalMercator example using multimap demonstrates that the
       multimap layer does not fully support the sphericalMercator projection at

Modified: sandbox/ahocevar/renderer-ng/examples/multiserver.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/multiserver.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/multiserver.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,8 +13,8 @@
         function init(){
             map = new OpenLayers.Map( 'map' );
             
-            var urlArray = ["http://t1.labs.metacarta.com/wms-c/Basic.py",
-                            "http://t2.labs.metacarta.com/wms-c/Basic.py"];
+            var urlArray = ["http://tilecache.osgeo.org/wms-c/Basic.py",
+                            "http://tilecache.osgeo.org/wms-c/Basic.py"];
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
                                               urlArray,
                                               {layers: 'basic'} );
@@ -27,6 +27,7 @@
     <h1 id="title">Multiple Server URLS</h1>
 
   <div id="tags">
+    performance, multiple urls, request
   </div>
   <p id="shortdesc">
       Load your tiles faster by pointing to the same server, but with different urls

Modified: sandbox/ahocevar/renderer-ng/examples/mvs.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/mvs.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/mvs.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -81,7 +81,7 @@
             case 'openlayers':
                 theMVS.addLayer(
                   new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                        "http://labs.metacarta.com/wms/vmap0", 
+                        "http://vmap0.tiles.osgeo.org/wms/vmap0", 
                         {layers: 'basic'} )
                   );
                 break;

Modified: sandbox/ahocevar/renderer-ng/examples/navigation-control.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/navigation-control.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/navigation-control.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -9,7 +9,7 @@
         function init(){
             map = new OpenLayers.Map( 'map', { controls: [] });
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} );
             map.addLayer(layer);
             nav = new OpenLayers.Control.Navigation({'zoomWheelEnabled': false});
@@ -21,7 +21,9 @@
   <body onload="init()">
     <h1 id="title">Navigation Control</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        drag, move, zoom, navigate
+    </div>
 
     <div id="shortdesc">Demonstrate Navigation Control features</div>
 

Modified: sandbox/ahocevar/renderer-ng/examples/navigation-history.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/navigation-history.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/navigation-history.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -32,7 +32,7 @@
                 
                 var layer = new OpenLayers.Layer.WMS(
                     "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'}
                 );
                 map.addLayer(layer);
@@ -44,6 +44,7 @@
         <h1 id="title">Map Navigation History Example</h1>
 
         <div id="tags">
+            history, basic
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/navtoolbar-alwaysZoom.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/navtoolbar-alwaysZoom.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/navtoolbar-alwaysZoom.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -56,7 +56,7 @@
 
 	            var wms = new OpenLayers.Layer.WMS(
 	                "OpenLayers WMS",
-	                "http://labs.metacarta.com/wms/vmap0",
+	                "http://vmap0.tiles.osgeo.org/wms/vmap0",
 	                {layers: 'basic'}
 	            );					  
 								
@@ -70,6 +70,9 @@
 	</head>
 	<body onload="init()">
 		<h1 id="title">A navToolbar with an alwaysZoom ZoomBox</h1>
+        <div id="tags">
+            navigation toolbar
+        </div>
 		<p id="shortdesc">
        		Demo of a custom NavToolbar which uses a zoomBox tool that always zoom in even when the zoom box is too big.
     	</p> 

Modified: sandbox/ahocevar/renderer-ng/examples/navtoolbar-outsidemap.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/navtoolbar-outsidemap.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/navtoolbar-outsidemap.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -22,7 +22,7 @@
         function init(){
             map = new OpenLayers.Map( 'map', { controls: [new OpenLayers.Control.PanZoom()] } );
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             var panel = new OpenLayers.Control.NavToolbar({'div':OpenLayers.Util.getElement('paneldiv')});
             map.addControl(panel);
@@ -33,6 +33,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Navigation Toolbar: Outside the Map</h1>
+    <div id="tags">
+        navigation toolbar, style, position, div
+    </div>
     <div id="map" class="smallmap"></div>
     <div id="paneldiv" class="olControlNavToolbar"></div>
     <div id="docs">

Modified: sandbox/ahocevar/renderer-ng/examples/navtoolbar.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/navtoolbar.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/navtoolbar.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -18,7 +18,7 @@
         function init() {
             map = new OpenLayers.Map( 'map', { controls: [new OpenLayers.Control.PanZoom()] } );
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
 
             var panel = new OpenLayers.Control.NavToolbar();
@@ -30,6 +30,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">NavToolbar Demo</h1>
+    <div id="tags">
+        navigation toolbar, basic
+    </div>
     <p id="shortdesc">
        Demo the NavToolbar, a subclass of Control.Panel which shows icons for
        navigation.

Deleted: sandbox/ahocevar/renderer-ng/examples/notile.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/notile.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/notile.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,39 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <title>OpenLayers: Single Tile</title>
-    <link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
-    <link rel="stylesheet" href="style.css" type="text/css" />
-    <script src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        var map;
-        function init(){
-            map = new OpenLayers.Map('mapDiv', {maxResolution: 'auto'});
-
-            var old_ol_wms = new OpenLayers.Layer.WMS.Untiled( "WMS.Untiled", 
-                "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'} );
-            old_ol_wms.addOptions({isBaseLayer: true});
-            
-            var new_ol_wms = new OpenLayers.Layer.WMS( "WMS w/singleTile", 
-                "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}, 
-                { singleTile: true, ratio: 1 } );
-            new_ol_wms.addOptions({isBaseLayer: true});
-
-            map.addLayers([old_ol_wms, new_ol_wms]);
-            map.addControl(new OpenLayers.Control.LayerSwitcher());
-            map.setCenter(new OpenLayers.LonLat(6.5, 40.5), 4);
-        }
-    </script>
-  </head>
-  <body onload="init()">
-    <h1 id="title">Untiled Example</h1>
-    <p id="shortdesc">
-      Create an untiled WMS layer using the singleTile: true, option or the deprecated
-      WMS.Untiled layer.
-    </p>  
-    <div id="mapDiv" class="smallmap"></div>
-    <p> The first layer is an old OpenLayers.Layer.WMS.Untiled layer, using 
-        a default ratio value of 1.5.
-    <p> The second layer is an OpenLayers.Layer.WMS layer with singleTile set
-        to true, and with a ratio of 1.    
-  </body>
-</html>

Modified: sandbox/ahocevar/renderer-ng/examples/ordering.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/ordering.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/ordering.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -173,6 +173,7 @@
         <h1 id="title">Z-Index/Y-Order Example</h1>
 
         <div id="tags">
+            stack, stacking, zindex, ordering
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/osm-google.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/osm-google.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/osm-google.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -14,6 +14,9 @@
         <p id="shortdesc">
             Demonstrate use of an OSM layer and a Google layer as base layers.
         </p>
+        <div id="tags">
+            openstreetmap google
+        </div>
         <div id="map" class="smallmap"></div>
         <div id="docs">
             <p>

Modified: sandbox/ahocevar/renderer-ng/examples/osm-layer.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/osm-layer.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/osm-layer.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -104,6 +104,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Advanced OSM Layer</h1>
+    <div id="tags">
+        openstreetmap advanced
+    </div>
     <div id="map" class="smallmap"></div>
     <div id="download">
       <ul>

Modified: sandbox/ahocevar/renderer-ng/examples/osm.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/osm.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/osm.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -22,7 +22,9 @@
   <body onload="init()">
     <h1 id="title">Basic OSM Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        openstreetmap basic
+    </div>
 
     <div id="shortdesc">Show a Simple OSM Map</div>
 

Modified: sandbox/ahocevar/renderer-ng/examples/outOfRangeMarkers.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/outOfRangeMarkers.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/outOfRangeMarkers.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -51,6 +51,9 @@
 
  <body onload="init()">
     <h1 id="title">Using maxResolution to control overlays</h1>
+    <div id="tags">
+        cleanup
+    </div>
     <p id="shortdesc">
       See how to control the maximum resolution for a markers layer, 
       causing it to not be displayed beyond a certain point.

Modified: sandbox/ahocevar/renderer-ng/examples/overviewmap.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/overviewmap.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/overviewmap.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -21,6 +21,7 @@
         <h1 id="title">Overview Map</h1>
 
         <div id="tags">
+            overview, mapOptions, basic
         </div>
         <p id="shortdesc">
             Enable a small Overview Map that moves/interacts with your main map.
@@ -42,7 +43,7 @@
         
         var ol = new OpenLayers.Layer.WMS(
             "OpenLayers WMS", 
-            "http://labs.metacarta.com/wms/vmap0",
+            "http://vmap0.tiles.osgeo.org/wms/vmap0",
             {layers: 'basic'}
         );
         

Modified: sandbox/ahocevar/renderer-ng/examples/pan-zoom-panels.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/pan-zoom-panels.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/pan-zoom-panels.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -32,7 +32,7 @@
         
         var wms = new OpenLayers.Layer.WMS(
             "OpenLayers WMS",
-            "http://labs.metacarta.com/wms/vmap0",
+            "http://vmap0.tiles.osgeo.org/wms/vmap0",
             {layers: 'basic'}
         );
         map.addLayers([wms]);
@@ -78,8 +78,11 @@
 </head>
 <body onload='init();'>
     <h1 id="title">Pan and Zoom Panels</h1>
-    <div id="tags"></div>
-    <p id="shortdesc">Customizable pan and zoom panels</p>
+    <div id="tags">
+        panning, zooming, panel, CSS, style
+    </div>
+    <p id="shortdesc">
+    Customizable pan and zoom panels
     </p>
     <div id="map" class="smallmap"></div>
     <p id="docs">

Modified: sandbox/ahocevar/renderer-ng/examples/panel.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/panel.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/panel.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -60,7 +60,7 @@
         function init(){
             map = new OpenLayers.Map( 'map', { controls: [] } );
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
 
             vlayer = new OpenLayers.Layer.Vector( "Editable" );
@@ -92,6 +92,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Custom Control.Panel</h1>
+    <div id="tags">
+        panels, CSS, style, basic
+    </div>
     <p id="shortdesc">
       Create a custom control.panel, styled entirely with
       CSS, and add your own controls to it.

Modified: sandbox/ahocevar/renderer-ng/examples/point-track-markers.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/point-track-markers.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/point-track-markers.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
         function init(){
             map = new OpenLayers.Map('map', {maxResolution:'auto'});
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             map.setCenter(new OpenLayers.LonLat(20.22, 22.05), 9);
             map.addControl(new OpenLayers.Control.LayerSwitcher());
@@ -53,7 +53,11 @@
   </head>
   <body onload="init()">
     <h1 id="title">GeoRSS PointTrack in OpenLayers</h1>
-    <p style="font-size:.9em;">This demo uses OpenLayers.Layer.GeoRSS and OpenLayers.Layer.PointTrack. The track is created by connecting the points of the GeoRSS feed.</a></p>
+    <div id="tags">
+        GeoRSS, PointTrack
+    </div>
+    <p id="shortdesc">This demo uses OpenLayers.Layer.GeoRSS and OpenLayers.Layer.PointTrack.</p>
+    <p style="font-size:.9em;">The track is created by connecting the points of the GeoRSS feed.</a></p>
     <form onsubmit="return false;">
    GeoRSS URL: <input type="text" id="url" size="50" /><input type="submit" onclick="addUrl(); return false;" value="Load Feed" onsubmit="addUrl(); return false;" />
     </form>  

Modified: sandbox/ahocevar/renderer-ng/examples/popupMatrix.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/popupMatrix.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/popupMatrix.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -870,6 +870,7 @@
   <h1 id="title">Popup Matrix</h1>
 
   <div id="tags">
+  popup, popups
   </div>
       <p id="shortdesc">
           All kinds of different popup configurations.

Modified: sandbox/ahocevar/renderer-ng/examples/popups.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/popups.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/popups.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
         function init(){
             map = new OpenLayers.Map('map');
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             layer = new OpenLayers.Layer.Google( "Google" );
             map.addLayer(layer);
@@ -108,6 +108,7 @@
   <h1 id="title">Popup Mayhem</h1>
 
   <div id="tags">
+    popup, popups
   </div>
   <p id="shortdesc">
       All kinds of ways to create and interact with Popups.

Modified: sandbox/ahocevar/renderer-ng/examples/projected-map.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/projected-map.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/projected-map.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -56,6 +56,7 @@
   <h1 id="title">Layer Projections</h1>
 
   <div id="tags">
+    projection, reprojection, epsg, basic
   </div>
   <p id="shortdesc">
       Use different (not default) projections with your map 

Modified: sandbox/ahocevar/renderer-ng/examples/protocol-gears.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/protocol-gears.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/protocol-gears.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -31,7 +31,7 @@
 
             // create base layer
             var layer = new OpenLayers.Layer.WMS("OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {"layers": "basic"}
             );
             map.addLayer(layer);
@@ -218,6 +218,7 @@
     <h1 id="title">Gears Protocol Example</h1>
 
     <div id="tags">
+        Google, Gears
     </div>
     <p id="shortdesc">
         Shows the usage of the Gears protocol.

Modified: sandbox/ahocevar/renderer-ng/examples/proxy.cgi
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/proxy.cgi	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/proxy.cgi	2011-01-03 15:30:11 UTC (rev 10994)
@@ -20,7 +20,8 @@
                 'prototype.openmnnd.org', 'geo.openplans.org',
                 'sigma.openplans.org', 'demo.opengeo.org',
                 'www.openstreetmap.org', 'sample.azavea.com',
-                'v-swe.uni-muenster.de:8080']
+                'v2.suite.opengeo.org', 'v-swe.uni-muenster.de:8080', 
+                'vmap0.tiles.osgeo.org']
 
 method = os.environ["REQUEST_METHOD"]
 

Modified: sandbox/ahocevar/renderer-ng/examples/regular-polygons.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/regular-polygons.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/regular-polygons.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -41,7 +41,7 @@
             map = new OpenLayers.Map('map');
             
             var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}); 
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'}); 
 
             var polygonLayer = new OpenLayers.Layer.Vector("Polygon Layer");
 
@@ -73,6 +73,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers Regular Polygon Example</h1>
+    <div id="tags">
+        vector, feature, regularpolygon, drawing, draw, advanced
+    </div>     
     <p id="shortdesc">
       Shows how to use the RegularPolygon handler to draw features with
       different numbers of sides.

Modified: sandbox/ahocevar/renderer-ng/examples/resize-features.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/resize-features.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/resize-features.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -15,7 +15,7 @@
         function init(){
             map = new OpenLayers.Map('map');
             var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             
             var style_blue = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
@@ -80,6 +80,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Resize Features Programatically</h1>
+    <div id="tags">
+        vector, feature, resizing, resize
+    </div>    
     <p id="shortdesc">
       Demonstration of how to use the geometry resize methods to
       change feature sizes programatically.

Modified: sandbox/ahocevar/renderer-ng/examples/restricted-extent.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/restricted-extent.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/restricted-extent.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -17,7 +17,7 @@
 
             var wms = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0?",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?",
                 {layers: 'basic'}
             ); 
 
@@ -37,6 +37,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers Restricted Extent Example</h1>
+    <div id="tags">
+        map, restrict, restrictedextent, extent
+    </div>    
     <p id="shortdesc">
       Don't let users drag outside the map extent: instead, limit dragging such
       that the extent of the layer is the maximum viewable area.

Modified: sandbox/ahocevar/renderer-ng/examples/rotate-features.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/rotate-features.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/rotate-features.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -15,7 +15,7 @@
         function init(){
             map = new OpenLayers.Map('map');
             var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             
             var style_blue = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
@@ -94,8 +94,9 @@
   <body onload="init()">
     <h1 id="title">Rotate vector features</h1>
 
-  <div id="tags">
-  </div>
+    <div id="tags">
+        vector, feature, rotating, rotation, rotate, advanced
+    </div>
   <p id="shortdesc">
       Details on how to create and rotate vector features programmatically
   </p>

Modified: sandbox/ahocevar/renderer-ng/examples/select-feature-multilayer.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/select-feature-multilayer.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/select-feature-multilayer.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -16,7 +16,7 @@
             map = new OpenLayers.Map('map');
             var wmsLayer = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'}
             ); 
 
@@ -106,6 +106,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers Select Feature on Multiple Layers Example</h1>
+    <div id="tags">
+        vector, feature, selecting, selection, advanced
+    </div>     
     <p id="shortdesc">
       Select a feature on click with the Control.SelectFeature on multiple 
       vector layers.

Modified: sandbox/ahocevar/renderer-ng/examples/select-feature-openpopup.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/select-feature-openpopup.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/select-feature-openpopup.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -32,7 +32,7 @@
         function init(){
             map = new OpenLayers.Map('map');
             var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}); 
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'}); 
 
             var polygonLayer = new OpenLayers.Layer.Vector("Polygon Layer");
 
@@ -71,6 +71,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Open Popup on Layer.Vector</h1> 
+    <div id="tags">
+        vector, feature, selecting, selection, popup
+    </div>    
     <p id="shortdesc">
       Using a Control.SelectFeature, open a popup on click.
     </p>

Modified: sandbox/ahocevar/renderer-ng/examples/select-feature.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/select-feature.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/select-feature.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -16,7 +16,7 @@
             map = new OpenLayers.Map('map');
             var wmsLayer = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'}
             ); 
 
@@ -27,7 +27,7 @@
                 },
                 'featureunselected': function(feature) {
                     $('counter').innerHTML = this.selectedFeatures.length;
-                },
+                }
             });
 
             map.addLayers([wmsLayer, vectors]);
@@ -100,6 +100,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers Select Feature Example</h1>
+    <div id="tags">
+        vector, feature, selecting, selection, advanced
+    </div>        
     <p id="shortdesc">
       Select a feature on hover or click with the Control.SelectFeature on a
       vector layer.

Modified: sandbox/ahocevar/renderer-ng/examples/setextent.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/setextent.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/setextent.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -7,6 +7,9 @@
 </head>
 <body>
 <h1 id="title">Setting a Visual Extent</h1>
+<div id="tags">
+    boxes, box, marker
+</div>
 <p id='shortdesc'>
   Use a boxes layer to visually display the area of interest indicated by a user.
 </p>
@@ -22,7 +25,7 @@
     var map = new OpenLayers.Map('map');
     var bounds = new OpenLayers.Bounds(-45,-45, 0, 45); 
     var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-        "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+        "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
     map.addLayer(wms);
     map.zoomToExtent(bounds);
     var boxes = new OpenLayers.Layer.Boxes("boxes");

Copied: sandbox/ahocevar/renderer-ng/examples/simplify-linestring.html (from rev 10991, trunk/openlayers/examples/simplify-linestring.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/simplify-linestring.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/simplify-linestring.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+        <title>Simplify a LineString geometry</title>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+        <style type="text/css">
+        #map, #map-simplify {
+            height: 400px;
+            width: 400px;
+            margin: 5px !important;
+            float: left;
+        }
+        #info {
+            width: 300px;
+            float: left;
+        }
+        #docs {
+            clear: both;
+        }
+        </style>
+    </head>
+    <body>
+        <h1 id="title">Simplify a LineString geometry</h1>
+        <div id="tags">
+            Douglas-Peucker, Douglas, Peucker, Peuker, tolerance
+        </div>
+        <p id="shortdesc">
+            Shows the usage of the method &quot;simplify&quot; that implements 
+			the Douglas-Peucker algorithm to remove &quot;insignificant&quot; 
+			vertices from LineString geometries.
+        </p>
+        <div id="control-simplify">
+            <label for="tolerance">Tolerance factor:</label>
+            <input name="tolerance" id="tolerance" type="number" min="0" max="1" step="0.02" value="0.1">
+            <input type="button" id="simplify" value="Simplify LineString">
+            <input type="button" id="animation" value="Start animation">
+        </div>
+        <div id="map" class="smallmap">
+        </div>
+        <div id="map-simplify" class="smallmap">
+        </div>
+        <div id="info">
+        </div>
+        <div id="docs">
+            <p>
+                Instances of OpenLayers.Geometry.LineString have a method simplify,
+                that can be used to simplify linestring geometries.
+                Simplification sometimes is useful to enhance the perfomance of 
+                vector rendering or to reduce complexity of geometries. This 
+                might be especially handy when viewing geometries a small 
+                scales.  
+            </p>
+            <p>
+                OpenLayers.Geometry.LineString::simplify is a recursive 
+				implementation of the famous Douglas-Peucker algorithm. It is 
+				controlled by a tolerance factor that defines the threshold for 
+				vertices to be considered &quot;insignificant&quot; for the 
+                general structure of the geometry.                
+            </p>
+            <p>
+                The LineString on the left map can be simplified according to 
+                the tolerance value one enters in the form-field above the maps.
+                Use a value between 0 and 1 for best results. If you navigate 
+                the left map, the right map will show the same location to make 
+                it easier to spot the differeces between the LineStrings.
+            </p>
+            <p>
+                You can also use the button &quot;Start animation&quot; to get 
+                results for increasing tolerance-factors from 0.02 to 1.0. The
+                animation can be paused by clicking on the button &quot;Stop
+                animation&quot;. 
+            </p>
+            <p>
+                The LineString represents a part of the coastline of 
+                <a href="http://www.openstreetmap.org/?lat=54.7309684753418&amp;lon=83.1809234619141&amp;zoom=11">this 
+                place southeast of Novosibirsk in Russia</a> &mdash; found via 
+                <a href="http://ryba4.com/python/ramer-douglas-peucker">an
+                example implementation of the algorithm in python</a>.
+            </p>
+            <p>
+                For a detailled explanation of the algorithm see 
+                <a href="http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm">the
+                Wikipedia article</a> or the original publication: David Douglas 
+                &amp; Thomas Peucker, "Algorithms for the reduction of the 
+                number of points required to represent a digitized line or its 
+                caricature", The Canadian Cartographer 10(2), 112-122 (1973) 
+                (<a href="http://dx.doi.org/10.3138/FM57-6770-U75U-7727">DOI: 
+                10.3138/FM57-6770-U75U-7727</a>).
+            </p>
+            <p>See <a href="simplify-linestring.js">simplify-linestring.js</a>
+                for the source code of this example.</p>
+        </div>
+        <script type="text/javascript" src="../lib/OpenLayers.js">
+        </script>
+        <script type="text/javascript" src="./simplify-linestring.js">
+        </script>
+    </body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/examples/simplify-linestring.js (from rev 10991, trunk/openlayers/examples/simplify-linestring.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/simplify-linestring.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/simplify-linestring.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,599 @@
+// global variables
+var map, map2;
+
+// wrap the instanciation code in an anonymous function that gets executed
+// immedeately
+(function(){
+    // style the vectorlayer
+    var styleMap = new OpenLayers.StyleMap({
+        'default': new OpenLayers.Style({
+            strokeColor: "#333333",
+            strokeWidth: 1.2,
+            strokeOpacity: 1
+        })
+    });
+    
+    // the vectorlayer
+    var vectorlayer = new OpenLayers.Layer.Vector('Vectorlayer', {
+        isBaseLayer: true,
+        styleMap: styleMap
+    });
+    
+    var original = OpenLayers.Geometry.fromWKT("LINESTRING(" +
+        "6.247872 11.316756," +
+        "6.338566 11.316756," +
+        "6.633323 11.205644," +
+        "6.724018 11.205644," +
+        "6.792039 11.205644," +
+        "7.154817 11.372311," +
+        "7.313532 11.400089," +
+        "7.381553 11.344533," +
+        "7.336206 11.288978," +
+        "7.200164 11.288978," +
+        "7.154817 11.261200," +
+        "7.132143 11.233422," +
+        "7.154817 11.150089," +
+        "7.268185 11.177867," +
+        "7.313532 11.122311," +
+        "7.404227 11.150089," +
+        "7.472248 11.094533," +
+        "7.767005 10.900089," +
+        "7.758951 10.864989," +
+        "7.752684 10.837656," +
+        "7.426900 10.927867," +
+        "6.519955 10.927867," +
+        "6.429261 10.900089," +
+        "6.315893 10.955644," +
+        "6.270545 10.955644," +
+        "6.247872 10.927867," +
+        "6.111830 11.011200," +
+        "6.066483 11.066756," +
+        "5.862420 11.038978," +
+        "5.817073 10.955644," +
+        "5.771726 10.900089," +
+        "5.862420 10.761200," +
+        "5.975788 10.733422," +
+        "6.157177 10.566756," +
+        "6.247872 10.511200," +
+        "6.293219 10.427867," +
+        "6.315893 10.233422," +
+        "6.315893 10.177867," +
+        "6.542629 9.844533," +
+        "6.587976 9.761200," +
+        "6.610650 9.288978," +
+        "6.542629 9.066756," +
+        "6.565303 8.900089," +
+        "6.519955 8.816756," +
+        "6.542629 8.761200," +
+        "6.565303 8.733422," +
+        "6.429261 8.427867," +
+        "6.474608 8.316756," +
+        "6.724018 8.288978," +
+        "6.882733 8.538978," +
+        "6.973428 8.594533," +
+        "6.996101 8.622311," +
+        "7.200164 8.650089," +
+        "7.290859 8.650089," +
+        "7.426900 8.483422," +
+        "7.404227 8.455644," +
+        "7.245511 8.511200," +
+        "6.996101 8.427867," +
+        "7.041449 8.372311," +
+        "7.154817 8.455644," +
+        "7.200164 8.455644," +
+        "7.245511 8.455644," +
+        "7.381553 8.316756," +
+        "7.381553 8.261200," +
+        "7.404227 8.233422," +
+        "7.494921 8.205644," +
+        "7.767005 8.288978," +
+        "7.948394 8.233422," +
+        "8.016415 8.261200," +
+        "8.197804 8.094533," +
+        "8.084435 7.816756," +
+        "8.152456 7.733422," +
+        "8.175130 7.650089," +
+        "8.175130 7.511200," +
+        "8.311172 7.427867," +
+        "8.311172 7.372311," +
+        "8.651276 7.372311," +
+        "8.923360 7.316756," +
+        "8.900686 7.261200," +
+        "8.809991 7.261200," +
+        "8.472735 7.171122," +
+        "8.333845 7.038978," +
+        "8.282022 6.981100," +
+        "8.254778 6.848911," +
+        "8.265824 6.816756," +
+        "8.239206 6.711211," +
+        "8.219743 6.612067," +
+        "8.130227 6.433044," +
+        "8.084435 6.316756," +
+        "8.107109 6.288978," +
+        "7.948394 6.177867," +
+        "7.925720 5.983422," +
+        "7.857699 5.816756," +
+        "7.835026 5.788978," +
+        "7.857699 5.511200," +
+        "7.812352 5.400089," +
+        "7.812352 5.344533," +
+        "7.812352 5.177867," +
+        "8.084435 4.733422," +
+        "8.107109 4.622311," +
+        "7.857699 4.344533," +
+        "7.630963 4.261200," +
+        "7.540268 4.177867," +
+        "7.494921 4.150089," +
+        "7.449574 4.150089," +
+        "7.404227 4.150089," +
+        "7.336206 4.094533," +
+        "7.313532 4.066756," +
+        "7.041449 4.011200," +
+        "6.905407 3.955644," +
+        "6.950754 3.900089," +
+        "7.200164 3.927867," +
+        "7.630963 3.872311," +
+        "7.721657 3.872311," +
+        "7.948394 3.788978," +
+        "7.993741 3.705644," +
+        "7.971067 3.677867," +
+        "7.925720 3.622311," +
+        "8.175130 3.705644," +
+        "8.401866 3.650089," +
+        "8.492561 3.650089," +
+        "8.605929 3.538978," +
+        "8.651276 3.566756," +
+        "8.855339 3.372311," +
+        "8.900686 3.316756," +
+        "8.900686 3.150089," +
+        "8.787318 2.900089," +
+        "8.787318 2.844533," +
+        "8.946033 2.816756," +
+        "8.991380 2.788978," +
+        "9.014054 2.705644," +
+        "8.886928 2.524989," +
+        "8.832665 2.538978," +
+        "8.809991 2.455644," +
+        "8.923360 2.538978," +
+        "9.014054 2.400089," +
+        "9.308811 2.288978," +
+        "9.399506 2.261200," +
+        "9.512874 2.122311," +
+        "9.535548 1.983422," +
+        "9.512874 1.955644," +
+        "9.467527 1.816756," +
+        "9.036728 1.816756," +
+        "8.991380 1.927867," +
+        "8.946033 1.955644," +
+        "8.900686 1.983422," +
+        "8.946033 2.122311," +
+        "8.968707 2.150089," +
+        "9.195443 1.927867," +
+        "9.354158 1.955644," +
+        "9.376832 2.038978," +
+        "9.376832 2.094533," +
+        "9.240790 2.205644," +
+        "9.195443 2.205644," +
+        "9.263464 2.150089," +
+        "9.240790 2.122311," +
+        "9.195443 2.122311," +
+        "9.104749 2.122311," +
+        "8.900686 2.316756," +
+        "8.787318 2.344533," +
+        "8.696623 2.372311," +
+        "8.651276 2.427867," +
+        "8.719297 2.455644," +
+        "8.787318 2.650089," +
+        "8.832665 2.705644," +
+        "8.605929 2.677867," +
+        "8.537908 2.788978," +
+        "8.333845 2.788978," +
+        "7.925720 2.316756," +
+        "7.925720 2.261200," +
+        "7.903046 2.233422," +
+        "7.857699 2.233422," +
+        "7.857699 2.177867," +
+        "7.789678 1.983422," +
+        "7.812352 1.788978," +
+        "7.948394 1.538978," +
+        "7.971067 1.511200," +
+        "8.129783 1.511200," +
+        "8.243151 1.594533," +
+        "8.333845 1.594533," +
+        "8.424540 1.622311," +
+        "8.515234 1.566756," +
+        "8.673950 1.400089," +
+        "8.771174 1.291756," +
+        "8.828938 1.119878," +
+        "8.762504 0.972544," +
+        "9.238614 0.759633," +
+        "9.492323 0.627022," +
+        "9.820891 0.644711," +
+        "10.376567 0.800622," +
+        "10.651961 1.085978," +
+        "10.762173 1.132022," +
+        "10.943045 1.095989," +
+        "11.256739 0.999878," +
+        "11.576074 0.761611," +
+        "11.768247 0.425211," +
+        "11.960165 0.074778," +
+        "11.953907 0.000000," +
+        "11.629411 0.258767," +
+        "11.229920 0.582278," +
+        "11.001633 0.564300," +
+        "10.868476 0.447478," +
+        "10.633849 0.541833," +
+        "10.513370 0.672133," +
+        "11.188700 0.820078," +
+        "11.194014 0.859656," +
+        "11.118212 0.905822," +
+        "10.874860 0.930311," +
+        "10.427319 0.716522," +
+        "10.023620 0.374211," +
+        "9.434614 0.360144," +
+        "8.455131 0.859544," +
+        "8.180481 0.920500," +
+        "7.902529 1.115078," +
+        "7.823108 1.269800," +
+        "7.830482 1.403778," +
+        "7.791937 1.496744," +
+        "7.767005 1.538978," +
+        "7.676310 1.622311," +
+        "7.653637 1.650089," +
+        "7.585616 1.955644," +
+        "7.562942 1.983422," +
+        "7.562942 2.233422," +
+        "7.608289 2.400089," +
+        "7.630963 2.427867," +
+        "7.608289 2.538978," +
+        "7.585616 2.566756," +
+        "7.653637 2.705644," +
+        "7.630963 2.816756," +
+        "7.336206 3.011200," +
+        "7.290859 3.011200," +
+        "7.245511 3.011200," +
+        "7.041449 2.955644," +
+        "6.928081 2.816756," +
+        "6.928081 2.733422," +
+        "6.905407 2.622311," +
+        "6.860060 2.677867," +
+        "6.814712 2.677867," +
+        "6.678671 2.677867," +
+        "6.678671 2.733422," +
+        "6.769365 2.733422," +
+        "6.814712 2.733422," +
+        "6.792039 2.788978," +
+        "6.293219 3.066756," +
+        "6.225198 3.122311," +
+        "6.202525 3.233422," +
+        "6.134504 3.344533," +
+        "5.907767 3.261200," +
+        "5.862420 3.288978," +
+        "6.043809 3.427867," +
+        "6.021136 3.483422," +
+        "5.975788 3.483422," +
+        "5.930441 3.511200," +
+        "5.953115 3.566756," +
+        "5.975788 3.594533," +
+        "5.749052 3.788978," +
+        "5.703705 3.788978," +
+        "5.635684 3.788978," +
+        "5.703705 3.844533," +
+        "5.703705 4.011200," +
+        "5.499642 4.011200," +
+        "5.862420 4.372311," +
+        "5.975788 4.427867," +
+        "6.021136 4.427867," +
+        "6.089156 4.538978," +
+        "6.111830 4.566756," +
+        "6.089156 4.650089," +
+        "5.998462 4.650089," +
+        "5.817073 4.788978," +
+        "5.771726 4.816756," +
+        "5.681031 4.816756," +
+        "5.749052 4.927867," +
+        "5.749052 5.038978," +
+        "5.839747 5.177867," +
+        "5.998462 5.233422," +
+        "6.225198 5.233422," +
+        "6.270545 5.233422," +
+        "6.383914 5.288978," +
+        "6.406587 5.372311," +
+        "6.429261 5.400089," +
+        "6.587976 5.483422," +
+        "6.670626 5.490000," +
+        "6.700845 5.564100," +
+        "6.860060 5.927867," +
+        "6.860060 6.038978," +
+        "6.950754 6.205644," +
+        "6.973428 6.316756," +
+        "7.041449 6.344533," +
+        "7.064122 6.455644," +
+        "7.116072 6.541989," +
+        "7.114313 6.603667," +
+        "7.025305 6.741422," +
+        "6.736924 6.701367," +
+        "6.641658 6.741467," +
+        "6.500574 6.761389," +
+        "6.435410 6.733422," +
+        "6.224291 6.728556," +
+        "6.191759 6.738989," +
+        "6.099124 6.755000," +
+        "6.041805 6.749733," +
+        "6.001672 6.742967," +
+        "5.905382 6.718300," +
+        "5.817073 6.677867," +
+        "5.611713 6.686622," +
+        "5.401366 6.864333," +
+        "5.386274 6.927867," +
+        "5.356608 6.981811," +
+        "5.404095 7.111822," +
+        "5.561958 7.216133," +
+        "5.660643 7.244722," +
+        "5.366149 7.489478," +
+        "5.340927 7.511200," +
+        "5.114998 7.592867," +
+        "4.870667 7.692033," +
+        "4.746560 7.781856," +
+        "4.708060 7.760867," +
+        "4.692225 7.802500," +
+        "4.607090 7.849044," +
+        "4.481324 7.879711," +
+        "4.340031 8.093378," +
+        "4.181171 8.158044," +
+        "4.116415 8.200800," +
+        "4.081135 8.195278," +
+        "4.090912 8.272500," +
+        "4.032232 8.378311," +
+        "3.779566 8.791278," +
+        "3.769654 8.849022," +
+        "3.598177 8.955178," +
+        "3.576828 9.059633," +
+        "3.527037 9.066756," +
+        "3.498069 9.082022," +
+        "3.541865 9.174211," +
+        "3.542409 9.234411," +
+        "3.576275 9.262711," +
+        "3.582279 9.287744," +
+        "3.390995 9.316756," +
+        "3.209606 9.344533," +
+        "3.100836 9.367511," +
+        "2.957466 9.370756," +
+        "2.870844 9.366222," +
+        "2.777211 9.285222," +
+        "2.744851 9.285900," +
+        "2.775397 9.294867," +
+        "2.832661 9.341156," +
+        "2.868114 9.373300," +
+        "2.869502 9.400089," +
+        "2.794434 9.420178," +
+        "2.714423 9.440078," +
+        "2.641124 9.441944," +
+        "2.572096 9.428378," +
+        "2.548379 9.418600," +
+        "2.573130 9.388211," +
+        "2.563126 9.333567," +
+        "2.535855 9.320067," +
+        "2.517670 9.282778," +
+        "2.479488 9.260278," +
+        "2.483125 9.239067," +
+        "2.464034 9.224278," +
+        "2.468586 9.180556," +
+        "2.443129 9.168989," +
+        "2.439084 9.147456," +
+        "2.448389 9.129344," +
+        "2.444897 9.109600," +
+        "2.450720 9.097256," +
+        "2.444897 9.080389," +
+        "2.447808 9.045822," +
+        "2.424536 9.024011," +
+        "2.415811 9.000133," +
+        "2.442457 8.957422," +
+        "2.429887 8.946567," +
+        "2.455028 8.894556," +
+        "2.435936 8.879078," +
+        "2.413136 8.853411," +
+        "2.410805 8.836944," +
+        "2.412202 8.822133," +
+        "2.387533 8.789544," +
+        "2.386608 8.776044," +
+        "2.398706 8.757278," +
+        "2.373103 8.739511," +
+        "2.387070 8.769467," +
+        "2.375434 8.784611," +
+        "2.358674 8.785922," +
+        "2.337270 8.793167," +
+        "2.365195 8.790533," +
+        "2.399169 8.821478," +
+        "2.396376 8.837933," +
+        "2.408946 8.879078," +
+        "2.432218 8.894878," +
+        "2.414995 8.963022," +
+        "2.390961 8.983722," +
+        "2.340091 8.969389," +
+        "2.332091 8.946244," +
+        "2.340091 8.927722," +
+        "2.332091 8.912289," +
+        "2.316093 8.904067," +
+        "2.311730 8.874744," +
+        "2.288975 8.861244," +
+        "2.247727 8.856233," +
+        "2.233180 8.861889," +
+        "2.209436 8.859233," +
+        "2.231003 8.871144," +
+        "2.265911 8.873200," +
+        "2.277548 8.869600," +
+        "2.290635 8.873711," +
+        "2.299360 8.904578," +
+        "2.268088 8.909622," +
+        "2.247727 8.925256," +
+        "2.225734 8.920756," +
+        "2.208747 8.909622," +
+        "2.203768 8.921811," +
+        "2.214352 8.931822," +
+        "2.197138 8.933811," +
+        "2.148725 8.907478," +
+        "2.134577 8.904844," +
+        "2.113354 8.917222," +
+        "2.095107 8.918800," +
+        "2.079961 8.912944," +
+        "2.060761 8.913356," +
+        "2.034577 8.902656," +
+        "1.983589 8.895400," +
+        "2.033997 8.913356," +
+        "2.062502 8.918700," +
+        "2.092758 8.929811," +
+        "2.148090 8.928756," +
+        "2.168397 8.937878," +
+        "2.146421 8.965533," +
+        "2.182173 8.943933," +
+        "2.201537 8.951311," +
+        "2.239138 8.938400," +
+        "2.267063 8.944989," +
+        "2.284939 8.925767," +
+        "2.306887 8.926022," +
+        "2.311086 8.936356," +
+        "2.296312 8.952489," +
+        "2.317254 8.981122," +
+        "2.334939 9.003844," +
+        "2.374500 9.014044," +
+        "2.386136 9.034778," +
+        "2.401962 9.044656," +
+        "2.418723 9.044889," +
+        "2.426287 9.054878," +
+        "2.411739 9.063522," +
+        "2.426867 9.099311," +
+        "2.398362 9.125233," +
+        "2.373339 9.121944," +
+        "2.403595 9.134289," +
+        "2.417680 9.165778," +
+        "2.425860 9.192778," +
+        "2.423783 9.231400," +
+        "2.400330 9.237022," +
+        "2.419494 9.243567," +
+        "2.429815 9.246711," +
+        "2.449495 9.245489," +
+        "2.457676 9.289856," +
+        "2.481311 9.298211," +
+        "2.488585 9.334211," +
+        "2.520255 9.353822," +
+        "2.520400 9.369944," +
+        "2.494960 9.432511," +
+        "2.463671 9.469200," +
+        "2.406950 9.500578," +
+        "2.240907 9.536433," +
+        "2.129969 9.569467," +
+        "2.031530 9.607422," +
+        "1.932328 9.658044," +
+        "1.835167 9.695656," +
+        "1.746196 9.760744," +
+        "1.667446 9.789667," +
+        "1.575400 9.797622," +
+        "1.562104 9.828722," +
+        "1.531422 9.846800," +
+        "1.415859 9.888744," +
+        "1.315206 9.942167," +
+        "1.175573 10.083667," +
+        "1.147394 10.090267," +
+        "1.118064 10.086567," +
+        "0.990883 9.998400," +
+        "0.778930 9.990856," +
+        "0.592924 10.033144," +
+        "0.507490 10.125422," +
+        "0.419562 10.320811," +
+        "0.375403 10.344533," +
+        "0.276464 10.431189," +
+        "0.220170 10.534911," +
+        "0.181271 10.571000," +
+        "0.153745 10.620156," +
+        "0.114973 10.653889," +
+        "0.103274 10.707756," +
+        "0.097914 10.761511," +
+        "0.076256 10.811522," +
+        "0.061935 10.867833," +
+        "0.000000 10.960167)"
+    );
+    vectorlayer.addFeatures([new OpenLayers.Feature.Vector(original)]);
+    var maxExtent = vectorlayer.getDataExtent();
+    // instanciate the map
+    map = new OpenLayers.Map("map", {
+        fractionalZoom: true, 
+        maxExtent: maxExtent,
+        layers: [vectorlayer]
+    });
+    map.zoomToMaxExtent();
+    map.events.register('moveend', map, function(){
+        map2.setCenter(map.getCenter(), map.getZoom());
+    });
+    
+    
+    var vectorlayer2 = new OpenLayers.Layer.Vector('Vectorlayer simplified', {
+        isBaseLayer: true,
+        styleMap: styleMap
+    });
+    
+    map2 =  new OpenLayers.Map("map-simplify", {
+        fractionalZoom: true, 
+        maxExtent: maxExtent,
+        controls: [],
+        layers: [vectorlayer2]
+    });
+    map2.zoomToExtent(maxExtent);
+    
+    // Control behaviour
+    var lastValue = 0.1;
+    var simplify = function() {
+        var min = 0;
+        var max = 1;
+        var givenVal= parseFloat(document.getElementById('tolerance').value);
+        var useVal = lastValue;
+        if (!isNaN(givenVal)) {
+            if (givenVal >= min && givenVal <= max) {
+                useVal = givenVal;
+            } else {
+                useVal = (givenVal < min) ? min : max;
+            }
+        }
+        document.getElementById('tolerance').value = useVal;
+        vectorlayer2.removeFeatures(vectorlayer2.features);
+        var newLineString = original.simplify(useVal);
+        vectorlayer2.addFeatures([new OpenLayers.Feature.Vector(newLineString)]);
+        var originalVerticesCnt = original.getVertices().length;
+        var simplifiedVerticesCnt = newLineString.getVertices().length;
+        var infotxt = '<ul><li>Original LineString: <strong>';
+        infotxt +=  originalVerticesCnt + ' vertices</strong></li>';
+        infotxt += ' <li>Simplified geometry: <strong>' + simplifiedVerticesCnt + ' vertices</strong></li>';
+        infotxt += ' <li>Decreased by <strong>' + (((originalVerticesCnt-simplifiedVerticesCnt)/originalVerticesCnt)*100).toFixed(2) + ' per cent</strong></li></ul>';
+        document.getElementById('info').innerHTML = infotxt;
+        lastValue = useVal;
+    };
+    document.getElementById('tolerance').value = lastValue;
+    document.getElementById('simplify').onclick = simplify;
+    simplify();
+    
+    var animationInterval;
+    var animationHandler = function(){
+        if (this.value === 'Start animation') {
+            document.getElementById('simplify').disabled = true;
+            document.getElementById('animation').value = "Stop animation";
+            animationInterval = window.setInterval(function(){
+                var tolerance = parseFloat(document.getElementById('tolerance').value);
+                if (tolerance < 1) {
+                    tolerance+=0.02;
+                } else {
+                    tolerance = 0.02;
+                }
+                document.getElementById('tolerance').value = tolerance.toFixed(2);
+                simplify();
+            }, 500);
+            simplify();
+        } else {
+            if (animationInterval) {
+                window.clearInterval(animationInterval);
+            }
+            document.getElementById('simplify').disabled = false;
+            document.getElementById('animation').value = "Start animation";
+        }
+    };
+    document.getElementById('animation').onclick = animationHandler;
+})();

Copied: sandbox/ahocevar/renderer-ng/examples/single-tile.html (from rev 10991, trunk/openlayers/examples/single-tile.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/single-tile.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/single-tile.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>OpenLayers: Single Tile</title>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+    </head>
+    <body>
+        <h1 id="title">Single Tile Example</h1>
+        <div id="tags">tile, ratio, singleTile, performance</div>
+        <p id="shortdesc">
+            Use the singleTile option on gridded layers to request a single tile.
+        </p>  
+        <div id="mapDiv" class="smallmap"></div>
+        <div id="docs">
+            <p>
+                This map demonstrates the use of the singleTile property as an
+                alternative to the default tiled behavior of layers.  The first
+                layer in the map is a WMS layer with the singleTile option set
+                true.  The second layer is a WMS layer with the default options.
+            </p>
+            <p>
+                View the <a href="single-tile.js" target="_blank">single-tile.js</a>
+                source to see how this is done.
+            </p>
+        </div>
+        <script src="../lib/OpenLayers.js"></script>
+        <script src="single-tile.js"></script>
+    </body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/examples/single-tile.js (from rev 10991, trunk/openlayers/examples/single-tile.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/single-tile.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/single-tile.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,20 @@
+var map = new OpenLayers.Map({
+    div: "mapDiv",
+    layers: [
+        new OpenLayers.Layer.WMS(
+            "Single Tile", 
+            "http://vmap0.tiles.osgeo.org/wms/vmap0",
+            {layers: "basic"}, 
+            {singleTile: true, ratio: 1}
+        ), 
+        new OpenLayers.Layer.WMS(
+            "Multiple Tiles", 
+            "http://vmap0.tiles.osgeo.org/wms/vmap0",
+            {layers: "basic"}
+        )
+    ],
+    center: new OpenLayers.LonLat(6.5, 40.5),
+    zoom: 4
+});
+
+map.addControl(new OpenLayers.Control.LayerSwitcher());

Modified: sandbox/ahocevar/renderer-ng/examples/sld-parser.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/sld-parser.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/sld-parser.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -18,7 +18,9 @@
     </head>
     <body>
         <h1 id="title">SLD Parser</h1>
-
+        <div id="tags">
+            sld, sldselect, styling, style, parser, cleanup
+        </div>
         <div id="shortdesc">Parsing Styled Layer Descriptor (SLD) documents with the SLD format.</div>
 
         <textarea id="input">paste SLD here</textarea><br>

Modified: sandbox/ahocevar/renderer-ng/examples/sld.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/sld.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/sld.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -91,6 +91,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Styled Layer Descriptor (SLD) Example</h1>
+    <div id="tags">
+        vector, feature, sld, styling, style
+    </div>
     <p id="shortdesc">
         Parsing SLD and applying styles to a vector layer.
     </p>

Modified: sandbox/ahocevar/renderer-ng/examples/snap-split.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/snap-split.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/snap-split.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -237,6 +237,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Snapping & Splitting Example</h1>
+    <div id="tags">
+        vector, feature, splitting, snapping, stylemap, advanced
+    </div>    
     <div id="shortdesc">A demonstration snapping and splitting while editing vector features.</div>
     <div id="map" class="smallmap"></div>
     <br/>

Modified: sandbox/ahocevar/renderer-ng/examples/snapping.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/snapping.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/snapping.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -164,7 +164,7 @@
             });
             draw = new OpenLayers.Control.DrawFeature(
                 poly, OpenLayers.Handler.Polygon,
-                {displayClass: "olControlDrawFeaturePoint", title: "Draw Features"}
+                {displayClass: "olControlDrawFeaturePoint", title: "Draw Features", handlerOptions: {holeModifier: "altKey"}}
             );
             modify = new OpenLayers.Control.ModifyFeature(
                 poly, {displayClass: "olControlModifyFeature", title: "Modify Features"}
@@ -272,6 +272,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Snapping Example</h1>
+    <div id="tags">
+        vector, feature, snapping, stylemap, advanced
+    </div>      
     <div id="shortdesc">A demonstration snapping while editing vector features.</div>
     <div id="map" class="smallmap"></div>
     <br/>

Modified: sandbox/ahocevar/renderer-ng/examples/sos.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/sos.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/sos.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -77,11 +77,13 @@
             showPopup: function(response) {
                 this.count++;
                 var output = this.obsformat.read(response.responseXML || response.responseText);
-                this.html += '<tr>';
-                this.html += '<td width="100">'+this.getTitleForObservedProperty(output.measurements[0].observedProperty)+'</td>';
-                this.html += '<td>'+output.measurements[0].samplingTime.timeInstant.timePosition+'</td>';
-                this.html += '<td>'+output.measurements[0].result.value + ' ' + output.measurements[0].result.uom + '</td>';
-                this.html += '</tr>';
+                if (output.measurements.length > 0) {
+                    this.html += '<tr>';
+                    this.html += '<td width="100">'+this.getTitleForObservedProperty(output.measurements[0].observedProperty)+'</td>';
+                    this.html += '<td>'+output.measurements[0].samplingTime.timeInstant.timePosition+'</td>';
+                    this.html += '<td>'+output.measurements[0].result.value + ' ' + output.measurements[0].result.uom + '</td>';
+                    this.html += '</tr>';
+                }
                 // check if we are done
                 if (this.count === this.numRequests) {
                     var html = '<table cellspacing="10"><tbody>';
@@ -127,16 +129,17 @@
                     var offering = this.SOSCapabilities.contents.offeringList[name];
                     var xml = this.obsformat.write({
                         eventTime: 'latest',
-                        resultModel: 'measurement',
+                        resultModel: 'om:Measurement',
                         responseMode: 'inline',
                         procedure: feature.attributes.id,
                         offering: name,
-                        observedProperty: offering.observedProperties[0],
+                        observedProperties: offering.observedProperties,
                         responseFormat: this.responseFormat
                     });
                     OpenLayers.Request.POST({
                         url: this.url,
                         scope: this,
+                        failure: this.showPopup,
                         success: this.showPopup,
                         data: xml
                     });
@@ -149,7 +152,7 @@
 
         function init(){
             map = new OpenLayers.Map( 'map' );
-            var baseLayer = new OpenLayers.Layer.WMS("Test Layer", "http://labs.metacarta.com/wms/vmap0?", {
+            var baseLayer = new OpenLayers.Layer.WMS("Test Layer", "http://vmap0.tiles.osgeo.org/wms/vmap0?", {
                 layers: "basic"}, {singleTile: true});
 
             var sos = new OpenLayers.SOSClient({map: map, url: 'http://v-swe.uni-muenster.de:8080/WeatherSOS/sos?'});
@@ -165,6 +168,7 @@
     <h1 id="title">SOS client example</h1>
 
     <div id="tags">
+        sos, sensor, observation, popup, advanced
     </div>
         <p id="shortdesc">
             Shows how to connect OpenLayers to a Sensor Observation Service (SOS)

Modified: sandbox/ahocevar/renderer-ng/examples/spherical-mercator.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/spherical-mercator.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/spherical-mercator.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -130,6 +130,7 @@
     <h1 id="title">OpenLayers Spherical Mercator Example</h1>
 
     <div id="tags">
+        spherical, mercator, osm, xyz, google, virtual earth, yahoo, tms, tile
     </div>
     <p id="shortdesc">
         Shows the use of the Spherical Mercator Layers, for overlaying 

Modified: sandbox/ahocevar/renderer-ng/examples/split-feature.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/split-feature.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/split-feature.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -93,6 +93,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">OpenLayers Split Feature Example</h1>
+        <div id="tags">
+            vector, feature, splitting, split, stylemap
+        </div>          
         <p id="shortdesc">
             Demonstrates splitting of line features.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/strategy-bbox.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/strategy-bbox.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/strategy-bbox.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -51,6 +51,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">BBOX Strategy Example</h1>
+        <div id="tags">
+            vector, feature, stylemap, wfs, bbox, strategy, cleanup
+        </div>    
         <p id="shortdesc">
             Uses a BBOX strategy to request features within a bounding box.
         </p>

Copied: sandbox/ahocevar/renderer-ng/examples/strategy-cluster-extended.html (from rev 10991, trunk/openlayers/examples/strategy-cluster-extended.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/strategy-cluster-extended.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/strategy-cluster-extended.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>Extended clustering example</title>
+        <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
+        <link rel="stylesheet" href="style.css" type="text/css">
+        <style type="text/css">
+            label {
+                cursor: pointer
+            }
+            
+            #wrap {
+                width: 925px;
+                margin: 10px;
+            }
+            
+            #strategy-chooser, #generalinfo, #info {
+                width: 400px;
+                padding: 0;
+                float: right;
+                clear: right;
+                margin-bottom: 4px;
+            }
+            
+            #map {
+                float: left;
+            }
+        </style>
+    </head>
+    <body>
+        <h1 id="title">Extended clustering</h1>
+        <div id="tags">
+            cluster, advanced
+        </div>
+        <p id="shortdesc">
+            Shows the usage of custom classes for a fine grained control about 
+            the clustering behaviour.
+        </p>
+        <div id="wrap">
+            <div id="map" class="smallmap">
+            </div>
+            <div id="strategy-chooser">
+                <p>
+                    Select the desired clustering strategy:
+                </p>
+                <label>
+                    <input type="radio" name="strategy" value="none" id="no-strategy" checked="checked">No strategy
+                </label>
+                <br/>
+                <label>
+                    <input type="radio" name="strategy" value="cluster" id="cluster-strategy">Simple cluster-strategy
+                </label>
+                <br/>
+                <label>
+                    <input type="radio" name="strategy" value="attribute-cluster" id="attributive-cluster-strategy">Attributive cluster-strategy
+                </label>
+                <br/>
+                <label>
+                    <input type="radio" name="strategy" value="rule-cluster" id="rulebased-cluster-strategy">Rulebased cluster-strategy
+                </label>
+            </div>
+            <div id="generalinfo">
+            </div>
+            <div id="info">
+            </div>
+        </div>
+        <div id="docs" style="clear: both; padding-top: 10px">
+            <p>
+                The vectorlayer in this example contains random data with an 
+                attribute "clazz" that can take the values 1, 2, 3 and 4. The  
+                features with clazz = 4 are considered more important than the 
+                others.
+            </p>
+            <p>
+                The radiobuttons on the right of the map control the 
+                cluster strategy to be applied to the features.
+            </p>
+            <ul>
+                <li>
+                    <strong>No strategy</strong>
+                    means that all features are 
+                    rendered, no clustering shall be applied
+                </li>
+                <li>
+                    <strong>Simple cluster-strategy</strong>
+                    applies the cluster 
+                    strategy with default options to the layer. You should notice 
+                    that many of the important features with clazz = 4 are getting
+                    lost, since clustering happens regardless of feature attributes
+                </li>
+                <li>
+                    <strong>Attributive cluster-strategy</strong>
+                    uses a 
+                    customized cluster strategy. This strategy is configured to 
+                    cluster features of the same clazz only. You should be able to see all 
+                    red points (clazz = 4) even though the data is clustered. A 
+                    cluster now contains only features of the same clazz.
+                </li>
+                <li>
+                    <strong>Rulebased cluster-strategy</strong>
+                    uses another 
+                    customized cluster strategy. This strategy is configured to  
+                    cluster features that follow a certain rule only. In this case only  
+                    features with a clazz different from 4 are considered as 
+                    candidates for clustering. That means that usually you have fewer 
+                    clusters on the map, yet all with clazz = 4 are easily 
+                    distinguishable
+                </li>
+            </ul>
+            <p>
+                Hover over the features to get a short infomation about the 
+                feature or cluster of features. 
+            </p>
+        </div>
+        <p>
+            View the <a href="strategy-cluster-extended.js" target="_blank">strategy-cluster-extended.js</a>
+            source to see how this is done.
+        </p>
+        <script type="text/javascript" src="../lib/OpenLayers.js"></script>
+        <script type="text/javascript" src="strategy-cluster-extended.js"></script>
+    </body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/examples/strategy-cluster-extended.js (from rev 10991, trunk/openlayers/examples/strategy-cluster-extended.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/strategy-cluster-extended.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/strategy-cluster-extended.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,247 @@
+/**
+ * Class: OpenLayers.Strategy.AttributeCluster
+ * Strategy for vector feature clustering based on feature attributes.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Strategy.Cluster>
+ */
+OpenLayers.Strategy.AttributeCluster = OpenLayers.Class(OpenLayers.Strategy.Cluster, {
+    /**
+     * the attribute to use for comparison
+     */
+    attribute: null,
+    /**
+     * Method: shouldCluster
+     * Determine whether to include a feature in a given cluster.
+     *
+     * Parameters:
+     * cluster - {<OpenLayers.Feature.Vector>} A cluster.
+     * feature - {<OpenLayers.Feature.Vector>} A feature.
+     *
+     * Returns:
+     * {Boolean} The feature should be included in the cluster.
+     */
+    shouldCluster: function(cluster, feature) {
+        var cc_attrval = cluster.cluster[0].attributes[this.attribute];
+        var fc_attrval = feature.attributes[this.attribute];
+        var superProto = OpenLayers.Strategy.Cluster.prototype;
+        return cc_attrval === fc_attrval && 
+               superProto.shouldCluster.apply(this, arguments);
+    },
+    CLASS_NAME: "OpenLayers.Strategy.AttributeCluster"
+});
+
+/**
+ * Class: OpenLayers.Strategy.RuleCluster
+ * Strategy for vector feature clustering according to a given rule.
+ *
+ * Inherits from:
+ *  - <OpenLayers.Strategy.Cluster>
+ */
+OpenLayers.Strategy.RuleCluster = OpenLayers.Class(OpenLayers.Strategy.Cluster, {
+    /**
+     * the rule to use for comparison
+     */
+    rule: null,
+    /**
+     * Method: shouldCluster
+     * Determine whether to include a feature in a given cluster.
+     *
+     * Parameters:
+     * cluster - {<OpenLayers.Feature.Vector>} A cluster.
+     * feature - {<OpenLayers.Feature.Vector>} A feature.
+     *
+     * Returns:
+     * {Boolean} The feature should be included in the cluster.
+     */
+    shouldCluster: function(cluster, feature) {
+        var superProto = OpenLayers.Strategy.Cluster.prototype;
+        return this.rule.evaluate(cluster.cluster[0]) &&
+               this.rule.evaluate(feature) &&
+               superProto.shouldCluster.apply(this, arguments);
+    },
+    CLASS_NAME: "OpenLayers.Strategy.RuleCluster"
+});
+
+
+// global variables
+var map, vectorlayer, features, stylemap, select;
+
+// wrap the instanciation code in an anonymous function that gets executed
+// immeadeately
+(function(){
+
+    // The function that gets called on feature selection: shows information 
+    // about the feature/cluser in a div on the page 
+	var showInformation = function(evt){
+        var feature = evt.feature;
+		var info = 'Last hovered feature:<br>';
+		if (feature.cluster) {
+			info += '&nbsp;&nbsp;Cluster of ' + feature.attributes.count + ' features:';
+			var clazzes = {
+				'1': 0,
+				'2': 0,
+				'3': 0,
+				'4': 0
+			};
+			for (var i = 0; i < feature.attributes.count; i++) {
+				var feat = feature.cluster[i];
+				clazzes[feat.attributes.clazz]++;
+			}
+			for (var j=1; j<=4; j++) {
+				var plural_s = (clazzes[j] !== 1) ? 's' : '';
+				info += '<br>&nbsp;&nbsp;&nbsp;&nbsp;&bull;&nbsp;clazz ' + j + ': ' + clazzes[j] + ' feature' + plural_s;
+			}
+		} else {
+			info += '&nbsp;&nbsp;Single feature of clazz = ' + feature.attributes.clazz;
+		}
+		$('info').innerHTML = info;
+    };
+
+	// The function that gets called on feature selection. Shows information 
+    // about the number of "points" on the map.
+	var updateGeneralInformation = function() {
+		var info = 'Currently ' + vectorlayer.features.length + ' points are shown on the map.';
+		$('generalinfo').innerHTML = info;
+	};
+	
+	// instanciate the map
+	map = new OpenLayers.Map("map");
+    
+	// background WMS
+    var ol_wms = new OpenLayers.Layer.WMS("OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {
+        layers: "basic"
+    });
+    
+	// context to style the vectorlayer
+    var context = {
+        getColor: function(feature){
+            var color = '#aaaaaa';
+			if (feature.attributes.clazz && feature.attributes.clazz === 4) {
+				color = '#ee0000';
+			} else if(feature.cluster) {
+				var onlyFour = true;
+				for (var i = 0; i < feature.cluster.length; i++) {
+					if (onlyFour && feature.cluster[i].attributes.clazz !== 4) {
+						onlyFour = false;
+					}
+				}
+				if (onlyFour === true) {
+					color = '#ee0000';
+				}
+			}
+			return color;
+        }
+    };
+	
+    // style the vectorlayer
+    stylemap = new OpenLayers.StyleMap({
+        'default': new OpenLayers.Style({
+            pointRadius: 5,
+            fillColor: "${getColor}",
+            fillOpacity: 0.7,
+            strokeColor: "#666666",
+            strokeWidth: 1,
+            strokeOpacity: 1,
+			graphicZIndex: 1
+        }, {
+            context: context
+        }),
+		'select' : new OpenLayers.Style({
+            pointRadius: 5,
+            fillColor: "#ffff00",
+            fillOpacity: 1,
+            strokeColor: "#666666",
+            strokeWidth: 1,
+            strokeOpacity: 1,
+			graphicZIndex: 2
+        })
+    });
+    
+    // the vectorlayer
+    vectorlayer = new OpenLayers.Layer.Vector('Vectorlayer', {styleMap: stylemap, strategies: []});
+    
+	// the select control
+	select = new OpenLayers.Control.SelectFeature(
+        vectorlayer, {hover: true}
+    );
+    map.addControl(select);
+    select.activate();
+    vectorlayer.events.on({"featureselected": showInformation});
+	
+    map.addLayers([ol_wms, vectorlayer]);
+    map.addControl(new OpenLayers.Control.LayerSwitcher());
+    map.zoomToMaxExtent();
+    
+    features = [];
+    // adding lots of features:
+    for (var i = 0; i < 700; i++) {
+        var r1 = Math.random();
+        var r2 = Math.random();
+        var r3 = Math.random();
+        var r4 = Math.random();
+        var px = r1 * 180 * ((r2 < 0.5) ? -1 : 1); 
+        var py = r3 * 90 * ((r4 < 0.5) ? -1 : 1);
+        var p = new OpenLayers.Geometry.Point(px, py);
+        var clazz = (i % 10 === 0) ? 4 : Math.ceil(r4 * 3);
+        var f = new OpenLayers.Feature.Vector(p, {clazz: clazz});
+        features.push(f);
+    }
+    vectorlayer.addFeatures(features);
+    updateGeneralInformation();
+
+    // the behaviour and methods for the radioboxes    
+    var changeStrategy = function() {
+        var strategies = [];
+        // this is the checkbox
+        switch(this.value) {
+            case 'cluster':
+                // standard clustering
+				strategies.push(new OpenLayers.Strategy.Cluster());
+                break;
+            case 'attribute-cluster':
+                // use the custom class: only cluster features of the same clazz
+				strategies.push(new OpenLayers.Strategy.AttributeCluster({
+                    attribute:'clazz'
+                }));
+                break;
+            case 'rule-cluster':
+                // use the custom class: only cluster features that have a 
+				// clazz smaller than 4
+				strategies.push(new OpenLayers.Strategy.RuleCluster({
+                    rule: new OpenLayers.Rule({
+                        filter: new OpenLayers.Filter.Comparison({
+                            type: OpenLayers.Filter.Comparison.LESS_THAN,
+                            property: "clazz",
+                            value: 4
+                        })
+                    })
+                }));
+                break;
+        }
+		// remove layer and control
+        map.removeLayer(vectorlayer);
+		map.removeControl(select);
+		// rebuild layer
+        vectorlayer = new OpenLayers.Layer.Vector('Vectorlayer', {styleMap: stylemap, strategies: strategies});
+        map.addLayer( vectorlayer );
+        vectorlayer.addFeatures(features);
+        // rebuild select control
+		select = new OpenLayers.Control.SelectFeature(
+	        vectorlayer, {hover: true}
+	    );
+	    map.addControl(select);
+	    select.activate();
+	    vectorlayer.events.on({"featureselected": showInformation});
+		// update meta information
+		updateGeneralInformation();
+    };
+	// bind the behviour to the radios
+    var inputs = document.getElementsByTagName('input');
+    for( var cnt = 0; cnt < inputs.length; cnt++) {
+      var input = inputs[cnt];
+      if (input.name === 'strategy') {
+         input.onclick = changeStrategy;
+      }
+    }
+})();

Modified: sandbox/ahocevar/renderer-ng/examples/strategy-cluster-threshold.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/strategy-cluster-threshold.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/strategy-cluster-threshold.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -34,9 +34,9 @@
             function init() {
                 map = new OpenLayers.Map('map');
                 var base = new OpenLayers.Layer.WMS("OpenLayers WMS", 
-                    ["http://t3.labs.metacarta.com/wms-c/Basic.py",
-                     "http://t2.labs.metacarta.com/wms-c/Basic.py",
-                     "http://t1.labs.metacarta.com/wms-c/Basic.py"], 
+                    ["http://t3.tilecache.osgeo.org/wms-c/Basic.py",
+                     "http://t2.tilecache.osgeo.org/wms-c/Basic.py",
+                     "http://t1.tilecache.osgeo.org/wms-c/Basic.py"], 
                     {layers: 'satellite'}
                 );
 
@@ -116,6 +116,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">Cluster Strategy Threshold</h1>
+        <div id="tags">
+            vector, feature, stylemap, wfs, cluster, strategy, cleanup
+        </div>         
         <p id="shortdesc">
             Demonstrates the use of the cluster strategy threshold property.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/strategy-cluster.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/strategy-cluster.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/strategy-cluster.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -66,7 +66,6 @@
         <script src="animator.js"></script>
         <script type="text/javascript">
             var map, template;
-            var Jugl = window["http://jugl.tschaub.net/trunk/lib/Jugl.js"];
             OpenLayers.ProxyHost = (window.location.host == "localhost") ?
                 "/cgi-bin/proxy.cgi?url=" : "proxy.cgi?url=";
 
@@ -135,7 +134,7 @@
                 map.setCenter(new OpenLayers.LonLat(0, 0), 1);
                 
                 // template setup
-                template = new Jugl.Template("template");
+                template = new jugl.Template("template");
 
             }
             
@@ -168,6 +167,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">Cluster Strategy Example</h1>
+        <div id="tags">
+            vector, feature, stylemap, wfs, cluster, strategy, cleanup
+        </div>         
         <p id="shortdesc">
             Uses a cluster strategy to render points representing clusters of features.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/strategy-paging.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/strategy-paging.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/strategy-paging.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -61,6 +61,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">Paging Strategy Example</h1>
+        <div id="tags">
+            vector, feature, stylemap, wfs, paging, strategy, cleanup
+        </div>        
         <p id="shortdesc">
             Uses a paging strategy to cache large batches of features and render a page at a time.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/style-rules.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/style-rules.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/style-rules.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -8,7 +8,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">Rule Based Style</h1>
-        
+        <div id="tags">
+            vector, feature, stylemap, filter, comparison
+        </div>        
         <p id="shortdesc">
             Use rule based styling to use different symbolizers for different
             feature groups.
@@ -40,4 +42,4 @@
             </p>
         </div>
     </body>
-</html>
\ No newline at end of file
+</html>

Modified: sandbox/ahocevar/renderer-ng/examples/style-rules.js
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/style-rules.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/style-rules.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -5,7 +5,7 @@
 
     var wms = new OpenLayers.Layer.WMS(
         "OpenLayers WMS",
-        "http://labs.metacarta.com/wms/vmap0",
+        "http://vmap0.tiles.osgeo.org/wms/vmap0",
         {layers: "basic"}
     );
     

Modified: sandbox/ahocevar/renderer-ng/examples/stylemap.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/stylemap.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/stylemap.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
             map = new OpenLayers.Map('map');
             var wms = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'}
             );
             
@@ -68,7 +68,9 @@
   <body onload="init()">
     <h1 id="title">StyleMap Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        vector, feature, stylemap
+    </div>
 
     <p id="shortdesc">
         Shows how to use a StyleMap to style features with rule based styling.
@@ -91,4 +93,4 @@
         </p>
     </div>
   </body>
-</html>
\ No newline at end of file
+</html>

Modified: sandbox/ahocevar/renderer-ng/examples/styles-context.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/styles-context.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/styles-context.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -10,7 +10,7 @@
         function init(){
             map = new OpenLayers.Map('map', {maxResolution:'auto'});
             var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(wms);
             map.setCenter(new OpenLayers.LonLat(0, 0), 0);
             
@@ -81,7 +81,9 @@
   <body onload="init()">
     <h1 id="title">Feature Styles Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        vector, feature, stylemap
+    </div>
 
     <p id="shortdesc">
         To style features with a custom function that evaluates each feature, use
@@ -102,4 +104,4 @@
         on the context object passed to the Style constructor.</p>
     </div>
   </body>
-</html>
\ No newline at end of file
+</html>

Modified: sandbox/ahocevar/renderer-ng/examples/styles-rotation.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/styles-rotation.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/styles-rotation.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,7 +13,7 @@
             map = new OpenLayers.Map('map');
             var wms = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS", 
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'}
             );
 
@@ -71,6 +71,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Rotation Style Example</h1>
+    <div id="tags">
+        vector, feature, stylemap, rotation, cleanup
+    </div>    
     <p id="shortdesc">
         Use the rotation property of a point symbolizer to rotate
         point symbolizers.

Modified: sandbox/ahocevar/renderer-ng/examples/styles-unique.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/styles-unique.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/styles-unique.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -10,7 +10,7 @@
         function init(){
             map = new OpenLayers.Map('map', {maxResolution:'auto'});
             var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(wms);
             map.setCenter(new OpenLayers.LonLat(0, 0), 0);
             
@@ -89,7 +89,9 @@
   <body onload="init()">
     <h1 id="title">Unique Value Styles Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        vector, feature, stylemap, uniquevalue, cleanup
+    </div>
 
     <p id="shortdesc">
         Shows how to create a style based on unique feature attribute values (markers)

Modified: sandbox/ahocevar/renderer-ng/examples/sundials-spherical-mercator.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/sundials-spherical-mercator.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/sundials-spherical-mercator.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -31,15 +31,7 @@
                                                  20037508.34, 20037508.34)
             };
             map = new OpenLayers.Map('map', options);
-            var mapnik = new OpenLayers.Layer.TMS(
-                "OpenStreetMap (Mapnik)",
-                "http://tile.openstreetmap.org/",
-                {
-                    type: 'png', getURL: osm_getTileURL,
-                    displayOutsideMaxExtent: true,
-                    attribution: '<a href="http://www.openstreetmap.org/">OpenStreetMap</a>'
-                }
-            );
+            var mapnik = new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)");
             var gmap = new OpenLayers.Layer.Google("Google", {sphericalMercator:true});
             var sundials = new OpenLayers.Layer.Vector("KML", {
                 projection: map.displayProjection,
@@ -96,26 +88,14 @@
                 delete feature.popup;
             }
         }
-        function osm_getTileURL(bounds) {
-            var res = this.map.getResolution();
-            var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
-            var y = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
-            var z = this.map.getZoom();
-            var limit = Math.pow(2, z);
-
-            if (y < 0 || y >= limit) {
-                return OpenLayers.Util.getImagesLocation() + "404.png";
-            } else {
-                x = ((x % limit) + limit) % limit;
-                return this.url + z + "/" + x + "/" + y + "." + this.type;
-            }
-        }
     </script>
   </head>
   <body onload="init()">
       <h1 id="title">OSM + Google Maps + KML Reprojection</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+          osm, kml, spherical, mercator, reprojection, feature, popup, advanced
+      </div>
 
       <p id="shortdesc">
           Demonstrates loading and displaying a KML file on top of OpenStreetMap (OSM) and Google Maps data. Loads data from a KML file of sundials.

Modified: sandbox/ahocevar/renderer-ng/examples/sundials.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/sundials.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/sundials.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -24,7 +24,7 @@
 
             var wms = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'}
             );
 
@@ -85,7 +85,9 @@
   <body onload="init()">
       <h1 id="title">KML Layer Example</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+          kml, popup, feature
+      </div>
 
       <p id="shortdesc">
           Demonstrates loading and displaying a KML file on top of a basemap.

Modified: sandbox/ahocevar/renderer-ng/examples/symbolizers-fill-stroke-graphic.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/symbolizers-fill-stroke-graphic.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/symbolizers-fill-stroke-graphic.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
             map = new OpenLayers.Map('map');
             
             var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             
             // allow testing of specific renderers via "?renderer=Canvas", etc
@@ -120,7 +120,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers Example</h1>
-    <div id="tags"></div>
+    <div id="tags">
+        vector, feature, symbolizer, filter, comparison, labeling
+    </div>
     <p id="shortdesc">
         Demonstrate fill, stroke, and graphic property of symbolizers.
     </p>

Modified: sandbox/ahocevar/renderer-ng/examples/teleportation.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/teleportation.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/teleportation.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -29,7 +29,7 @@
             });
             map.addControl(new OpenLayers.Control.OverviewMap());
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'} );
             map.addLayer(layer);
             map.zoomTo(2);
@@ -49,7 +49,9 @@
   <body onload="init()">
     <h1 id="title">Map "Teleportation" and Rendering</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        map, rendering
+    </div>
 
     <p id="shortdesc">Call the map's render method to change its container.</p>
 

Modified: sandbox/ahocevar/renderer-ng/examples/tilecache.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/tilecache.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/tilecache.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,11 +11,11 @@
                 resolutions: [0.087890625, 0.0439453125, 0.02197265625, 0.010986328125]
             });
             layer = new OpenLayers.Layer.TileCache("TileCache Layer",
-                ["http://c0.labs.metacarta.com/wms-c/cache/",
-                 "http://c1.labs.metacarta.com/wms-c/cache/",
-                 "http://c2.labs.metacarta.com/wms-c/cache/",
-                 "http://c3.labs.metacarta.com/wms-c/cache/",
-                 "http://c4.labs.metacarta.com/wms-c/cache/"],
+                ["http://c0.tilecache.osgeo.org/wms-c/cache/",
+                 "http://c1.tilecache.osgeo.org/wms-c/cache/",
+                 "http://c2.tilecache.osgeo.org/wms-c/cache/",
+                 "http://c3.tilecache.osgeo.org/wms-c/cache/",
+                 "http://c4.tilecache.osgeo.org/wms-c/cache/"],
                 "basic",
                 {
                     serverResolutions: [0.703125, 0.3515625, 0.17578125, 0.087890625, 
@@ -44,7 +44,9 @@
   <body onload="init()">
       <h1 id="title">TileCache Example</h1>
 
-      <div id="tags"></div>
+      <div id="tags">
+          tile, cache, tilecache, wmsc, wms-c
+      </div>
 
       <p id="shortdesc">
         Demonstrates a TileCache layer that loads tiles from from a web

Modified: sandbox/ahocevar/renderer-ng/examples/tms.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/tms.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/tms.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,7 +13,7 @@
         function init(){
             map = new OpenLayers.Map( 'map', {maxResolution:1.40625/2} );
             layer = new OpenLayers.Layer.TMS( "TMS",
-                    "http://labs.metacarta.com/wms-c/Basic.py/", {layername: 'basic', type:'png'} );
+                    "http://tilecache.osgeo.org/wms-c/Basic.py/", {layername: 'basic', type:'png'} );
             map.addLayer(layer);
             map.addControl(new OpenLayers.Control.LayerSwitcher());
             map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
@@ -34,7 +34,9 @@
   <body onload="init()">
       <h1 id="title">Tiled Map Service Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        tile, cache, tms
+    </div>
 
     <p id="shortdesc">
         Demonstrate the initialization and modification of a Tiled Map Service layer.
@@ -43,9 +45,9 @@
     <div id="map" class="smallmap"></div>
 
     <div id="docs">
-        URL of TMS (Should end in /): <input type="text" id="url" size="60" value="http://labs.metacarta.com/wms-c/Basic.py/" /> layer_name <input type="text" id="layer" value="satellite" /> <select id="type"><option>jpg</option><option>png</option></select> <input type="submit" onclick="addTMS()"/><br />
+        URL of TMS (Should end in /): <input type="text" id="url" size="60" value="http://tilecache.osgeo.org/wms-c/Basic.py/" /> layer_name <input type="text" id="layer" value="basic" /> <select id="type"><option>jpg</option><option>png</option></select> <input type="submit" onclick="addTMS()"/><br />
         <p>
-        Example: http://labs.metacarta.com/wms-c/Basic.py/, satellite, jpg<br />
+        Example: http://tilecache.osgeo.org/wms-c/Basic.py/, basic, jpg<br />
         The first input must be an HTTP URL pointing to a TMS instance. The second
         input must be a layer name available from that instance, and the third must
         be the output format used by that layer. (Any other behavior will result in

Modified: sandbox/ahocevar/renderer-ng/examples/transform-feature.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/transform-feature.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/transform-feature.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -81,6 +81,7 @@
 <h1 id="title">Vector Feature Transformation Box Example</h1>
 
 <div id="tags">
+    vector, feature, transformation, stylemap
 </div>
 <p id="shortdesc">
     Shows the use of the TransformFeature control.

Modified: sandbox/ahocevar/renderer-ng/examples/transition.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/transition.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/transition.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -10,24 +10,24 @@
 
             var single_default_effect = new OpenLayers.Layer.WMS(
                 "WMS untiled default", 
-                "http://labs.metacarta.com/wms/vmap0?",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?",
                 {layers: 'basic'}, 
                 {singleTile: true}
             );
             var single_resize_effect = new OpenLayers.Layer.WMS(
                 "WMS untiled resize", 
-                "http://labs.metacarta.com/wms/vmap0?",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?",
                 {layers: 'basic'}, 
                 {singleTile: true, transitionEffect: 'resize'}
             );
             var tiled_default_effect = new OpenLayers.Layer.WMS(
                 "WMS tiled default ", 
-                "http://labs.metacarta.com/wms/vmap0?",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?",
                 {layers: 'basic'}
             );
             var tiled_resize_effect = new OpenLayers.Layer.WMS(
                 "WMS tiled resize", 
-                "http://labs.metacarta.com/wms/vmap0?",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?",
                 {layers: 'basic'}, 
                 {transitionEffect: 'resize'}
             );
@@ -41,6 +41,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">Transition Example</h1>
+    <div id="tags">
+        transition, resize, tile, singletile
+    </div>    
     <p id="shortdesc">
         Demonstrates the use of transition effects in tiled and untiled layers.
     </p>
@@ -60,4 +63,4 @@
     </div>
   </body>
   </body>
-</html>
\ No newline at end of file
+</html>

Modified: sandbox/ahocevar/renderer-ng/examples/urban.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/urban.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/urban.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -24,7 +24,9 @@
   <body onload="init()">
     <h1 id="title">WorldWind Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        worldwind, cleanup
+    </div>
 
     <p id="shortdesc">
         Demonstrate the use of a NASA WorldWind base layer.

Modified: sandbox/ahocevar/renderer-ng/examples/ve-novibrate.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/ve-novibrate.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/ve-novibrate.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -46,7 +46,9 @@
   <body onload="init()"> 
     <h1 id="title">Virtual Earth Example</h1> 
  
-    <div id="tags"></div> 
+    <div id="tags">
+        panning, virtual earth, panzoom, panmethod, panduration
+    </div> 
  
     <p id="shortdesc"> 
         When using the PanZoom buttons with VirtualEarth, some 'drift' is 

Modified: sandbox/ahocevar/renderer-ng/examples/ve.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/ve.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/ve.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -52,7 +52,9 @@
   <body onload="init()">
     <h1 id="title">Virtual Earth Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        virtual earth, marker
+    </div>
 
     <p id="shortdesc">
         Demonstrates the use of a Virtual Earth base layer.

Modified: sandbox/ahocevar/renderer-ng/examples/vector-features-with-text.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/vector-features-with-text.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/vector-features-with-text.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
             map = new OpenLayers.Map('map');
             
             var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
             
             // allow testing of specific renderers via "?renderer=Canvas", etc
@@ -118,7 +118,9 @@
   </head>
   <body onload="init()">
     <h1 id="title">OpenLayers Labeled features example</h1>
-    <div id="tags"></div>
+    <div id="tags">
+        vector, feature, labeling, symbolizer
+    </div>
     <p id="shortdesc">
         Label vector features with a text symbolizer.
     </p>

Modified: sandbox/ahocevar/renderer-ng/examples/vector-features.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/vector-features.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/vector-features.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <title>OpenLayers: Vector Features</title>
@@ -10,7 +11,7 @@
         function init(){
             map = new OpenLayers.Map('map');
             var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
 
             // allow testing of specific renderers via "?renderer=Canvas", etc
@@ -67,7 +68,7 @@
             style_mark.graphicYOffset = -style_mark.graphicHeight;
             style_mark.externalGraphic = "../img/marker.png";
             // graphicTitle only works in Firefox and Internet Explorer
-			style_mark.graphicTitle = "this is a test tooltip";
+            style_mark.graphicTitle = "this is a test tooltip";
 
             var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry", {
                 style: layer_style,
@@ -119,6 +120,7 @@
 <h1 id="title">Drawing Simple Vector Features Example</h1>
 
 <div id="tags">
+    vector, feature
 </div>
 <p id="shortdesc">
     Shows the use of the shows drawing simple vector features, in different styles.

Modified: sandbox/ahocevar/renderer-ng/examples/vector-formats.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/vector-formats.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/vector-formats.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -95,7 +95,7 @@
         function init(){
             map = new OpenLayers.Map('map');
             var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'});
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'});
 
             vectors = new OpenLayers.Layer.Vector("Vector Layer");
 
@@ -172,6 +172,7 @@
         <h1 id="title">Vector Formats Example</h1>
 
         <div id="tags">
+            vector, geojson, atom, kml, georss, gml, wkt, advanced, spherical, mercator
         </div>
         <p id="shortdesc">
             Shows the wide variety of vector formats that open layers supports.

Modified: sandbox/ahocevar/renderer-ng/examples/web-mercator.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/web-mercator.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/web-mercator.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,6 +13,7 @@
         <h1 id="title">OpenLayers Spherical Mercator Example</h1>
 
         <div id="tags">
+            sperical, mercator, epsg, projection
         </div>
         <p id="shortdesc">
             Shows the use of layers in spherical or web mercator using different

Modified: sandbox/ahocevar/renderer-ng/examples/web-mercator.js
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/web-mercator.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/web-mercator.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -42,4 +42,4 @@
     map.addLayers([gsat, wms]);
     map.addControl(new OpenLayers.Control.LayerSwitcher());
     map.setCenter(new OpenLayers.LonLat(-10723197, 4500612), 3);
-}
\ No newline at end of file
+}

Modified: sandbox/ahocevar/renderer-ng/examples/wfs-filter.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wfs-filter.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wfs-filter.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -10,6 +10,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">WFS Protocol and Filter</h1>
+        <div id="tags">
+            filter, wfs, comparison
+        </div>
         <p id="shortdesc">
             Demonstrates the use of a filter in making GetFeature requests using the WFS protocol.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/wfs-protocol-transactions.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wfs-protocol-transactions.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wfs-protocol-transactions.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -62,7 +62,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">WFS Transaction Example</h1>
-        <div id="tags"></div>
+        <div id="tags">
+            wfs, wfst, wfs-t, advanced
+        </div>
         <p id="shortdesc">
             Shows the use of the WFS Transactions (WFS-T).
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/wfs-protocol.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wfs-protocol.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wfs-protocol.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -12,7 +12,7 @@
                 OpenLayers.ProxyHost= "proxy.cgi?url=";
                 map = new OpenLayers.Map('map');
                 var wms = new OpenLayers.Layer.WMS(
-                    "OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0",
+                    "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0",
                     {layers: 'basic'}
                 );
 
@@ -32,6 +32,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">Vector Behavior Example</h1>
+        <div id="tags">
+            wfs, vector
+        </div>
         <p id="shortdesc">
             Uses a BBOX strategy, WFS protocol, and GML format.
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/wfs-reprojection.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wfs-reprojection.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wfs-reprojection.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -10,6 +10,7 @@
     <body onload="init()">
         <h1 id="title">WFS Reprojection Example</h1>
         <div id="tags">
+            reprojection, styling, stylemap, wfs, vector, advanced
         </div>
         <p id="shortdesc">
             Shows the use of the client side reprojection support. 

Modified: sandbox/ahocevar/renderer-ng/examples/wfs-snap-split.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wfs-snap-split.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wfs-snap-split.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -266,6 +266,7 @@
     <h1 id="title">Snap/Split and Persist via WFS</h1>
     
     <div id="tags">
+        snapping, splitting, wfs, wfst, wfs-t, advanced
     </div>
     <p id="shortdesc">
         Shows snapping, splitting, and use of the WFS Transactions (WFS-T).

Modified: sandbox/ahocevar/renderer-ng/examples/wfs-states.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wfs-states.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wfs-states.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -8,7 +8,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">WFS United States (GeoServer) Example</h1>
-        <div id="tags"></div>
+        <div id="tags">
+            wfs, vector
+        </div>
         <p id="shortdesc">
             Shows the use of the WFS United States (GeoServer). 
         </p>

Modified: sandbox/ahocevar/renderer-ng/examples/wfs-states.js
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wfs-states.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wfs-states.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -5,7 +5,7 @@
     map = new OpenLayers.Map("map");
 
     var base = new OpenLayers.Layer.WMS("OpenLayers WMS",
-        "http://labs.metacarta.com/wms-c/Basic.py",
+        "http://tilecache.osgeo.org/wms-c/Basic.py",
         {layers: "basic"} 
     );
     map.addLayer(base);

Modified: sandbox/ahocevar/renderer-ng/examples/wmc.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wmc.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wmc.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -43,7 +43,7 @@
 
             var vmap = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'},
                 {
                     maxExtent: new OpenLayers.Bounds(-130, 14, -60, 55),
@@ -130,6 +130,7 @@
     <h1 id="title">WMC Example</h1>
 
     <div id="tags">
+        wmc, parser, advanced, cleanup
     </div>
     <p id="shortdesc">
            Shows parsing of Web Map Context documents.

Copied: sandbox/ahocevar/renderer-ng/examples/wms-long-url.html (from rev 10991, trunk/openlayers/examples/wms-long-url.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wms-long-url.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/wms-long-url.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>WMS with POST Requests to Avoid Long URLs</title>
+    <link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
+    <link rel="stylesheet" href="style.css" type="text/css" />
+  </head>
+  <body>
+    <h1 id="title">WMS with POST Requests to Avoid Long URLs</h1>
+
+    <div id="tags">
+        sld, sld_body, post, iframe, advanced
+    </div>
+
+    <div id="shortdesc">Render tiles in IMG or IFRAME elements, depending on
+        the complexity of the GetMap request</div>
+
+    <div id="map" class="smallmap"></div>
+
+    <div id="docs">
+        <p>The <code>maxGetUrlLength</code> property of the layer's
+            <code>tileOptions</code> option causes tiles to be requested using
+            HTTP POST when the length of the GET url would exceed the specified
+            length (2048 characters is recommended). In real life applications,
+            this happens often when using the SLD_BODY request parameter for
+            inline styling.
+        </p><p>
+            <input type="radio" name="group" id="longurl" checked="checked">
+            Long URL - POST requests
+            <br>
+            <input type="radio" name="group" id="shorturl">
+            Short URL - GET requests
+        </p><p>
+            View the <a href="wms-long-url.js" target="_blank">wms-long-url.js</a>
+            source to see how this is done.
+        </p>
+    </div>
+    <script src="../lib/OpenLayers.js"></script>
+    <script src="wms-long-url.js"></script>
+  </body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/examples/wms-long-url.js (from rev 10991, trunk/openlayers/examples/wms-long-url.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wms-long-url.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/examples/wms-long-url.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,19 @@
+// a long text that we set as dummy param (makeTheUrlLong) to make the url long
+var longText = new Array(205).join("1234567890");
+
+var map = new OpenLayers.Map( 'map' );
+var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
+        "http://vmap0.tiles.osgeo.org/wms/vmap0",
+        {layers: 'basic', makeTheUrlLong: longText},
+        {tileOptions: {maxGetUrlLength: 2048}}
+);
+map.addLayer(layer);
+map.zoomToMaxExtent();
+
+// add behavior to dom elements
+document.getElementById("longurl").onclick = function() {
+    layer.mergeNewParams({makeTheUrlLong: longText})
+}
+document.getElementById("shorturl").onclick = function() {
+    layer.mergeNewParams({makeTheUrlLong: null})
+}

Modified: sandbox/ahocevar/renderer-ng/examples/wms-untiled.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wms-untiled.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wms-untiled.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -13,7 +13,7 @@
             map = new OpenLayers.Map( 'map' );
             layer = new OpenLayers.Layer.WMS(
                 "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'},
                 {singleTile: true}
             );
@@ -28,6 +28,7 @@
     <h1 id="title"> WMS Untiled Example</h1>
 
     <div id="tags">
+        singletile, tile
     </div>
         <p id="shortdesc">
             Shows an example of an "untiled" WMS layer, which requests a single

Modified: sandbox/ahocevar/renderer-ng/examples/wms-v13.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wms-v13.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wms-v13.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -36,6 +36,7 @@
     <h1 id="title"> WMS version 1.3 (axis order) Example</h1>
 
     <div id="tags">
+        axis order, wms 1.3
     </div>
         <p id="shortdesc">
             Shows an example of the influence of axis order on WMS 1.3 GetMap requests.

Modified: sandbox/ahocevar/renderer-ng/examples/wms.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wms.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wms.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -12,7 +12,7 @@
         function init(){
             map = new OpenLayers.Map( 'map' );
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
 
             map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
@@ -24,6 +24,7 @@
     <h1 id="title">WMS Example</h1>
 
     <div id="tags">
+        wms, layer, singletile
     </div>
     <p id="shortdesc">
         Shows the basic use of openlayers using a WMS layer

Modified: sandbox/ahocevar/renderer-ng/examples/wmst.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wmst.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wmst.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -10,7 +10,7 @@
             map = new OpenLayers.Map('map');
 
             var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'} );
 
             var jpl_wms = new OpenLayers.Layer.WMS( "NASA Global Mosaic",
                 "http://t1.hypercube.telascience.org/cgi-bin/landsat7", 
@@ -38,6 +38,7 @@
   <body onload="init()">
      <h1 id="title"> WMS Time Example</h1>
         <div id="tags">
+            wmst, wms-t
         </div>
         <p id="shortdesc">
             Shows the use of the layer WMS-T (time) layer</a>

Modified: sandbox/ahocevar/renderer-ng/examples/wmts-capabilities.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wmts-capabilities.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wmts-capabilities.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -15,7 +15,9 @@
     </head>
     <body onload="init();">
         <h1 id="title">Web Map Tile Service (WMTS) Capabilities Parsing</h1>
-        
+        <div id="tags">
+            wmts, capabilities, getcapabilities
+        </div>         
         <p id="shortdesc">
             The WMTS Capabilities format allows for parsing of capabilities
             documents from OGC Web Map Tile Service (WMTS) version 1.0.0 

Modified: sandbox/ahocevar/renderer-ng/examples/wmts-getfeatureinfo.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wmts-getfeatureinfo.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wmts-getfeatureinfo.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -43,7 +43,9 @@
     </head>
     <body onload="init();">
         <h1 id="title">WMTS GetFeatureInfo Control</h1>
-        
+        <div id="tags">
+            wmts, tile, cache, getfeatureinfo
+        </div>        
         <p id="shortdesc">
             The WMTSGetFeatureInfo control allows retrieval of information about
             features displayed in a WMTS layer.

Modified: sandbox/ahocevar/renderer-ng/examples/wmts.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wmts.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wmts.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -15,7 +15,9 @@
     </head>
     <body onload="init();">
         <h1 id="title">Web Map Tile Service (WMTS) Layer</h1>
-        
+        <div id="tags">
+            wmts
+        </div>         
         <p id="shortdesc">
             The WMTS layer allows viewing of tiles from a server implementing
             the OGC Web Map Tile Service (WMTS) standard version 1.0.0.

Modified: sandbox/ahocevar/renderer-ng/examples/worldwind.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/worldwind.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/worldwind.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -9,7 +9,7 @@
             map = new OpenLayers.Map('map', {'maxResolution': .28125, tileSize: new OpenLayers.Size(512, 512)});
 
             ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-            "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'} );
+            "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'} );
 
             ww = new OpenLayers.Layer.WorldWind( "Bathy",
             "http://worldwind25.arc.nasa.gov/tile/tile.aspx?", 36, 4,
@@ -30,6 +30,7 @@
         <h1 id="title">WorldWind layers Example</h1>
 
         <div id="tags">
+            worldwind, tile
         </div>
         <p id="shortdesc">
             Shows the use of the Tiled WorldWind layers.

Modified: sandbox/ahocevar/renderer-ng/examples/wrapDateLine.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/wrapDateLine.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/wrapDateLine.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -9,7 +9,7 @@
         function init(){
             map = new OpenLayers.Map( 'map', {maxResolution: 1.40625} );
             var mapserv = new OpenLayers.Layer.MapServer( "OpenLayers Basic",
-                        "http://labs.metacarta.com/wms/vmap0",
+                        "http://vmap0.tiles.osgeo.org/wms/vmap0",
                         {layers: 'basic'},
                         {wrapDateLine: true} );
 
@@ -25,11 +25,6 @@
                  transparent: "true", format: "image/png"},
                 {wrapDateLine: true, reproject: false});
 
-            /* TMS is broken, too */
-            tms = new OpenLayers.Layer.TMS( "OpenStreetMap",
-                    "http://labs.metacarta.com/wms-c/Basic.py/",
-                    {layername: 'osm-map', type:'png', wrapDateLine: true} );
-
             /* WW doesn't quite work yet */
             ww = new OpenLayers.Layer.WorldWind( "LANDSAT",
                     "http://worldwind25.arc.nasa.gov/tile/tile.aspx", 2.25, 4,
@@ -48,10 +43,9 @@
   <body onload="init()">
     <h1 id="title">Wrapping the Date Line</h1>
     <div id="tags">
-      Related to:
-        <a href="http://dev.openlayers.org/docs/OpenLayers/Layer/WMS.html">Layer.WMS</a>,
-        <a href="http://dev.openlayers.org/docs2/OpenLayers/Layer/MapServer.html">Layer.MapServer</a>,
-        <a href="http://dev.openlayers.org/docs2/OpenLayers/Layer.html#wrapDateLine">wrapDateLine</a>
+        WMS,
+        MapServer,
+        wrapDateLine
     </div>
 
     <p id="shortdesc">Shows how to work around dateline issues, by wrapping the dateline on a number of layer types.</p>
@@ -66,7 +60,7 @@
         </p>
     <pre id="code">
     var mapserv = new OpenLayers.Layer.MapServer( "OpenLayers Basic",
-                "http://labs.metacarta.com/wms/vmap0",
+                "http://vmap0.tiles.osgeo.org/wms/vmap0",
                 {layers: 'basic'},
                 <b>{wrapDateLine: true}</b> );
     </pre>

Modified: sandbox/ahocevar/renderer-ng/examples/xhtml.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/xhtml.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/xhtml.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,6 +11,7 @@
     <h1 id="title">XHTML Example</h1>
 
     <div id="tags">
+        xhtml
     </div>
     <p id="shortdesc">
         Shows openlayers running in a XHTML 1.0 Strict Doctype
@@ -20,7 +21,7 @@
   <script defer="defer" type="text/javascript">
     var map = new OpenLayers.Map('map');
     var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-        "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+        "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
     map.addLayer(wms);
     map.zoomToMaxExtent();
   </script>

Modified: sandbox/ahocevar/renderer-ng/examples/xml.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/xml.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/xml.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -112,6 +112,7 @@
             <h1 id="title">XML Format Example</h1>
 
             <div id="tags">
+                xml
             </div>
 
             <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/xyz-esri.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/xyz-esri.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/xyz-esri.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -21,7 +21,9 @@
   <body onload="init()">
     <h1 id="title">Basic ESRI Map Cache Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        XYZ, layer, tile
+    </div>
 
     <div id="shortdesc">Show a Simple ESRI map using the layer from <a href="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Portland/ESRI_LandBase_WebMercator/MapServer">ESRI's server</a>. </div>
 

Modified: sandbox/ahocevar/renderer-ng/examples/xyz-offset.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/xyz-offset.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/xyz-offset.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -9,7 +9,9 @@
     </head>
     <body onload="init()">
         <h1 id="title">XYZ Layer with Offset</h1>
-        
+        <div id="tags">
+            XYZ, layer, tile
+        </div>        
         <div id="shortdesc">Using a limited set of levels from an XYZ layer with zoomOffset.</div>
         
         <div id="map" class="smallmap"></div>

Modified: sandbox/ahocevar/renderer-ng/examples/yahoo.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/yahoo.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/yahoo.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -16,7 +16,7 @@
             map.addLayer(yahooLayer);
 
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
+                "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );
             map.addLayer(layer);
 
             map.setCenter(new OpenLayers.LonLat(-5, 40), 4);
@@ -28,6 +28,7 @@
     <h1 id="title">Yahoo Base Layer Example</h1>
 
         <div id="tags">
+            yahoo, layer
         </div>
 
         <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/zoomLevels.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/zoomLevels.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/zoomLevels.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -32,7 +32,7 @@
 
 
             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
-                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'});
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'});
             map.addLayer(layer);
 
 
@@ -45,6 +45,7 @@
     <h1 id="title">Zoom Level</h1>
 
     <div id="tags">
+        zoom, zoomlevel, resolution, scale, cleanup
     </div>
 
     <p id="shortdesc">

Modified: sandbox/ahocevar/renderer-ng/examples/zoomify.html
===================================================================
--- sandbox/ahocevar/renderer-ng/examples/zoomify.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/examples/zoomify.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -42,7 +42,9 @@
   <body onload="init()">
       <h1 id="title">Zoomify Layer Example</h1>
 
-    <div id="tags"></div>
+    <div id="tags">
+        zoomify, layer
+    </div>
 
     <p id="shortdesc">
         Demo of a layer with Zoomify tiles.

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Ajax.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Ajax.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Ajax.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,10 +1,12 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Request/XMLHttpRequest.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 OpenLayers.ProxyHost = "";

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Bounds.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Bounds.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Bounds.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,9 +1,11 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Class.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Class.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Class.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -22,49 +23,22 @@
  *
  */
 OpenLayers.Class = function() {
-    var Class = function() {
-        /**
-         * This following condition can be removed at 3.0 - this is only for
-         * backwards compatibility while the Class.inherit method is still
-         * in use.  So at 3.0, the following three lines would be replaced with
-         * simply:
-         * this.initialize.apply(this, arguments);
-         */
-        if (arguments && arguments[0] != OpenLayers.Class.isPrototype) {
-            this.initialize.apply(this, arguments);
-        }
-    };
-    var extended = {};
-    var parent, initialize, Type;
-    for(var i=0, len=arguments.length; i<len; ++i) {
-        Type = arguments[i];
-        if(typeof Type == "function") {
-            // make the class passed as the first argument the superclass
-            if(i == 0 && len > 1) {
-                initialize = Type.prototype.initialize;
-                // replace the initialize method with an empty function,
-                // because we do not want to create a real instance here
-                Type.prototype.initialize = function() {};
-                // the line below makes sure that the new class has a
-                // superclass
-                extended = new Type();
-                // restore the original initialize method
-                if(initialize === undefined) {
-                    delete Type.prototype.initialize;
-                } else {
-                    Type.prototype.initialize = initialize;
-                }
-            }
-            // get the prototype of the superclass
-            parent = Type.prototype;
-        } else {
-            // in this case we're extending with the prototype
-            parent = Type;
-        }
-        OpenLayers.Util.extend(extended, parent);
+    var len = arguments.length;
+    var P = arguments[0];
+    var F = arguments[len-1];
+
+    var C = typeof F.initialize == "function" ?
+        F.initialize :
+        function(){ P.apply(this, arguments); };
+
+    if (len > 1) {
+        var newArgs = [C, P].concat(
+                Array.prototype.slice.call(arguments).slice(1, len-1), F);
+        OpenLayers.inherit.apply(null, newArgs);
+    } else {
+        C.prototype = F;
     }
-    Class.prototype = extended;
-    return Class;
+    return C;
 };
 
 /**
@@ -89,7 +63,6 @@
     };
 };
 
-
 /**
  * APIFunction: inherit
  * *Deprecated*.  Old method to inherit from one or more OpenLayers style
@@ -101,15 +74,35 @@
  * Returns:
  * An object prototype
  */
-OpenLayers.Class.inherit = function () {
-    var superClass = arguments[0];
-    var proto = new superClass(OpenLayers.Class.isPrototype);
-    for (var i=1, len=arguments.length; i<len; i++) {
-        if (typeof arguments[i] == "function") {
-            var mixin = arguments[i];
-            arguments[i] = new mixin(OpenLayers.Class.isPrototype);
-        }
-        OpenLayers.Util.extend(proto, arguments[i]);
-    }
-    return proto;
+OpenLayers.Class.inherit = function (P) {
+    var C = function() {
+       P.call(this);
+    };
+    var newArgs = [C].concat(Array.prototype.slice.call(arguments));
+    OpenLayers.inherit.apply(null, newArgs);
+    return C.prototype;
 };
+
+/**
+ * Function: OpenLayers.inherit
+ *
+ * Parameters:
+ * C - {Object} the class that inherits
+ * P - {Object} the superclass to inherit from
+ *
+ * In addition to the mandatory C and P parameters, an arbitrary number of
+ * objects can be passed, which will extend C.
+ */
+OpenLayers.inherit = function(C, P) {
+   var F = function() {};
+   F.prototype = P.prototype;
+   C.prototype = new F;
+   var i, l, o;
+   for(i=2, l=arguments.length; i<l; i++) {
+       o = arguments[i];
+       if(typeof o === "function") {
+           o = o.prototype;
+       }
+       OpenLayers.Util.extend(C.prototype, o);
+   }
+};

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Element.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Element.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Element.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/LonLat.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/LonLat.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/LonLat.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,9 +1,11 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Pixel.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Pixel.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Pixel.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,9 +1,11 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Size.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Size.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes/Size.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/BaseTypes.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -9,7 +10,7 @@
  * @requires OpenLayers/BaseTypes/Pixel.js
  * @requires OpenLayers/BaseTypes/Bounds.js
  * @requires OpenLayers/BaseTypes/Element.js
- * @requires OpenLayers/Lang/en.js
+ * @requires OpenLayers/Lang.js
  * @requires OpenLayers/Console.js
  */
  
@@ -592,7 +593,7 @@
         if ("toISOString" in Date.prototype) {
             return function(date) {
                 return date.toISOString();
-            }
+            };
         } else {
             function pad(num, len) {
                 var str = num + "";
@@ -606,7 +607,7 @@
                 if (isNaN(date.getTime())) {
                     // ECMA-262 says throw RangeError, Firefox returns 
                     // "Invalid Date"
-                    str = "Invalid Date"
+                    str = "Invalid Date";
                 } else {
                     str = 
                         date.getUTCFullYear() + "-" +
@@ -618,7 +619,7 @@
                         pad(date.getUTCMilliseconds(), 3) + "Z";
                 }
                 return str;
-            }
+            };
         }
 
     })(),
@@ -648,7 +649,6 @@
             date = new Date(elapsed);
         } else {
             var match = str.match(/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{1,2}):(\d{2}):(\d{2}(?:\.\d+)?)(Z|(?:[+-]\d{1,2}(?::(\d{2}))?)))?$/);
-            var date;
             if (match && (match[1] || match[7])) { // must have at least year or time
                 var year = parseInt(match[1], 10) || 0;
                 var month = (parseInt(match[2], 10) - 1) || 0;
@@ -666,7 +666,7 @@
                     // check offset
                     if (type !== "Z") {
                         var hoursOffset = parseInt(type, 10);
-                        var minutesOffset = parseInt(match[8]) || 0;
+                        var minutesOffset = parseInt(match[8], 10) || 0;
                         var offset = -1000 * (60 * (hoursOffset * 60) + minutesOffset * 60);
                         date = new Date(date.getTime() + offset);
                     }
@@ -678,4 +678,4 @@
         return date;
     }
 
-};
\ No newline at end of file
+};

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Console.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Console.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Console.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ArgParser.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ArgParser.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ArgParser.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Attribution.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Attribution.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Attribution.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Button.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Button.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Button.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2007 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Control.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DragFeature.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DragFeature.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DragFeature.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DragPan.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DragPan.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DragPan.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DrawFeature.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DrawFeature.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/DrawFeature.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/EditingToolbar.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/EditingToolbar.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/EditingToolbar.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/GetFeature.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/GetFeature.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/GetFeature.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -206,7 +207,8 @@
      *
      * Parameters:
      * options - {Object} A configuration object which at least has to contain
-     *     a <protocol> property
+     *     a <protocol> property (if not, it has to be set before a request is
+     *     made)
      */
     initialize: function(options) {
         // concatenate events specific to vector with those from the base

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Graticule.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Graticule.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Graticule.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,9 +1,11 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/KeyboardDefaults.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/KeyboardDefaults.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/KeyboardDefaults.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,8 +1,8 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
-
 /**
  * @requires OpenLayers/Control.js
  * @requires OpenLayers/Handler/Keyboard.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/LayerSwitcher.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/LayerSwitcher.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/LayerSwitcher.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,9 +1,11 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /** 
  * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Measure.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Measure.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Measure.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -32,7 +33,8 @@
      *      will receive an event with measure, units, order, and geometry
      *      properties.
      * measurepartial - Triggered when a new point is added to the
-     *      measurement sketch.  Listeners receive an event with measure,
+     *      measurement sketch or if the <immediate> property is true and the
+     *      measurement sketch is modified.  Listeners receive an event with measure,
      *      units, order, and geometry.
      */
     EVENT_TYPES: ['measure', 'measurepartial'],
@@ -92,7 +94,7 @@
      * {Number} Timeout id of trigger for measurepartial.
      */
     delayedTrigger: null,
-    
+
     /**
      * APIProperty: persist
      * {Boolean} Keep the temporary measurement sketch drawn after the
@@ -103,6 +105,14 @@
     persist: false,
 
     /**
+     * APIProperty: immediate
+     * {Boolean} Activates the immediate measurement so that the "measurepartial"
+     *     event is also fired once the measurement sketch is modified.
+     *     Default is false.
+     */
+    immediate : false,
+
+    /**
      * Constructor: OpenLayers.Control.Measure
      * 
      * Parameters:
@@ -116,10 +126,12 @@
             OpenLayers.Control.prototype.EVENT_TYPES
         );
         OpenLayers.Control.prototype.initialize.apply(this, [options]);
-        this.callbacks = OpenLayers.Util.extend(
-            {done: this.measureComplete, point: this.measurePartial},
-            this.callbacks
-        );
+        var callbacks = {done: this.measureComplete,
+            point: this.measurePartial};
+        if (this.immediate){
+            callbacks.modify = this.measureImmediate;
+        }
+        this.callbacks = OpenLayers.Util.extend(callbacks, this.callbacks);
 
         // let the handler options override, so old code that passes 'persist' 
         // directly to the handler does not need an update
@@ -130,13 +142,36 @@
     },
     
     /**
+     * APIMethod: deactivate
+     */
+    deactivate: function() {
+        this.cancelDelay();
+        return OpenLayers.Control.prototype.deactivate.apply(this, arguments);
+    },
+
+    /**
      * APIMethod: cancel
      * Stop the control from measuring.  If <persist> is true, the temporary
      *     sketch will be erased.
      */
     cancel: function() {
+        this.cancelDelay();
         this.handler.cancel();
     },
+
+    /**
+     * APIMethod: setImmediate
+     * Sets the <immediate> property. Changes the activity of immediate
+     * measurement.
+     */
+    setImmediate: function(immediate) {
+        this.immediate = immediate;
+        if (this.immediate){
+            this.callbacks.modify = this.measureImmediate;
+        } else {
+            delete this.callbacks.modify;
+        }
+    },
     
     /**
      * Method: updateHandler
@@ -164,9 +199,7 @@
      * geometry - {<OpenLayers.Geometry>}
      */
     measureComplete: function(geometry) {
-        if(this.delayedTrigger) {
-            window.clearTimeout(this.delayedTrigger);
-        }
+        this.cancelDelay();
         this.measure(geometry, "measure");
     },
     
@@ -179,10 +212,17 @@
      * geometry - {<OpenLayers.Geometry>} The sketch geometry.
      */
     measurePartial: function(point, geometry) {
-        if (geometry.getLength() > 0) {
-            geometry = geometry.clone();
+        this.cancelDelay();
+        geometry = geometry.clone();
+        // when we're wating for a dblclick, we have to trigger measurepartial
+        // after some delay to deal with reflow issues in IE
+        if (this.handler.freehandMode(this.handler.evt)) {
+            // no dblclick in freehand mode
+            this.measure(geometry, "measurepartial");
+        } else {
             this.delayedTrigger = window.setTimeout(
                 OpenLayers.Function.bind(function() {
+                    this.delayedTrigger = null;
                     this.measure(geometry, "measurepartial");
                 }, this),
                 this.partialDelay
@@ -191,6 +231,31 @@
     },
 
     /**
+     * Method: measureImmediate
+     * Called each time the measurement sketch is modified.
+     * 
+     * Parameters: point - {<OpenLayers.Geometry.Point>} The point at the
+     * mouseposition. feature - {<OpenLayers.Feature.Vector>} The sketch feature.
+     */
+    measureImmediate : function(point, feature) {
+        if (this.delayedTrigger === null &&
+                                !this.handler.freehandMode(this.handler.evt)) {
+            this.measure(feature.geometry, "measurepartial");
+        }
+    },
+
+    /**
+     * Method: cancelDelay
+     * Cancels the delay measurement that measurePartial began.
+     */
+    cancelDelay: function() {
+        if (this.delayedTrigger !== null) {
+            window.clearTimeout(this.delayedTrigger);
+            this.delayedTrigger = null;
+        }
+    },
+
+    /**
      * Method: measure
      *
      * Parameters:

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ModifyFeature.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ModifyFeature.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ModifyFeature.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,8 +1,8 @@
-/* Copyright (c) 2006 MetaCarta, Inc., published under the Clear BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
-
 /**
  * @requires OpenLayers/Control/DragFeature.js
  * @requires OpenLayers/Control/SelectFeature.js
@@ -113,6 +113,15 @@
      * {Object} A symbolizer to be used for virtual vertices.
      */
     virtualStyle: null,
+    
+    /**
+     * APIProperty: vertexRenderIntent
+     * {String} The renderIntent to use for vertices. If no <virtualStyle> is
+     * provided, this renderIntent will also be used for virtual vertices, with
+     * a fillOpacity and strokeOpacity of 0.3. Default is null, which means
+     * that the layer's default style will be used for vertices.
+     */
+    vertexRenderIntent: null,
 
     /**
      * APIProperty: mode
@@ -193,11 +202,14 @@
      *     control.
      */
     initialize: function(layer, options) {
+        options = options || {};
         this.layer = layer;
         this.vertices = [];
         this.virtualVertices = [];
         this.virtualStyle = OpenLayers.Util.extend({},
-            this.layer.style || this.layer.styleMap.createSymbolizer());
+            this.layer.style ||
+            this.layer.styleMap.createSymbolizer(null, options.vertexRenderIntent)
+        );
         this.virtualStyle.fillOpacity = 0.3;
         this.virtualStyle.strokeOpacity = 0.3;
         this.deleteCodes = [46, 68];
@@ -622,6 +634,7 @@
             if(geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
                 vertex = new OpenLayers.Feature.Vector(geometry);
                 vertex._sketch = true;
+                vertex.renderIntent = control.vertexRenderIntent;
                 control.vertices.push(vertex);
             } else {
                 var numVert = geometry.components.length;
@@ -633,6 +646,7 @@
                     if(component.CLASS_NAME == "OpenLayers.Geometry.Point") {
                         vertex = new OpenLayers.Feature.Vector(component);
                         vertex._sketch = true;
+                        vertex.renderIntent = control.vertexRenderIntent;
                         control.vertices.push(vertex);
                     } else {
                         collectComponentVertices(component);

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MouseDefaults.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MouseDefaults.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MouseDefaults.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MousePosition.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MousePosition.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MousePosition.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MouseToolbar.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MouseToolbar.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/MouseToolbar.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/NavToolbar.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/NavToolbar.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/NavToolbar.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Navigation.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Navigation.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Navigation.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/NavigationHistory.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/NavigationHistory.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/NavigationHistory.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/OverviewMap.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/OverviewMap.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/OverviewMap.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /** 
@@ -156,7 +157,7 @@
             this.handlers.drag.destroy();
         }
 
-        this.mapDiv.removeChild(this.extentRectangle);
+        this.ovmap && this.ovmap.viewPortDiv.removeChild(this.extentRectangle);
         this.extentRectangle = null;
 
         if (this.rectEvents) {
@@ -228,7 +229,6 @@
         this.extentRectangle.style.position = 'absolute';
         this.extentRectangle.style.zIndex = 1000;  //HACK
         this.extentRectangle.className = this.displayClass+'ExtentRectangle';
-        this.mapDiv.appendChild(this.extentRectangle);
 
         this.element.appendChild(this.mapDiv);  
 
@@ -489,6 +489,7 @@
                         {controls: [], maxResolution: 'auto', 
                          fallThrough: false}, this.mapOptions);
         this.ovmap = new OpenLayers.Map(this.mapDiv, options);
+        this.ovmap.viewPortDiv.appendChild(this.extentRectangle);
         
         // prevent ovmap from being destroyed when the page unloads, because
         // the OverviewMap control has to do this (and does it).

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Pan.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Pan.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Pan.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanPanel.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanPanel.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanPanel.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Control/Panel.js
  * @requires OpenLayers/Control/Pan.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanZoom.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanZoom.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanZoom.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanZoomBar.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanZoomBar.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/PanZoomBar.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -285,9 +286,7 @@
         if (!OpenLayers.Event.isLeftClick(evt)) {
             return;
         }
-        var y = evt.xy.y;
-        var top = OpenLayers.Util.pagePosition(evt.object)[1];
-        var levels = (y - top)/this.zoomStopHeight;
+        var levels = evt.xy.y / this.zoomStopHeight;
         if(this.forceFixedZoomLevel || !this.map.fractionalZoom) {
             levels = Math.floor(levels);
         }    

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Panel.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Panel.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Panel.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -142,6 +143,7 @@
                 control = this.controls[i];
                 this.activeState[control.id] = control.deactivate();
             }    
+            this.redraw();
             return true;
         } else {
             return false;
@@ -156,15 +158,7 @@
      */    
     draw: function() {
         OpenLayers.Control.prototype.draw.apply(this, arguments);
-        for (var i=0, len=this.controls.length; i<len; i++) {
-            this.map.addControl(this.controls[i]);
-            this.controls[i].deactivate();
-            this.controls[i].events.on({
-                "activate": this.redraw,
-                "deactivate": this.redraw,
-                scope: this
-            });
-        }
+        this.addControlsToMap(this.controls);
         return this.div;
     },
 
@@ -172,10 +166,8 @@
      * Method: redraw
      */
     redraw: function() {
-        if (this.div.children.length>0) {
-            for (var l=this.div.children.length, i=l-1 ; i>=0 ; i--) {
-                this.div.removeChild(this.div.children[i]);
-            }
+        for (var l=this.div.childNodes.length, i=l-1; i>=0; i--) {
+            this.div.removeChild(this.div.childNodes[i]);
         }
         this.div.innerHTML = "";
         if (this.active) {
@@ -212,7 +204,6 @@
             } else {
                 control.activate();
             }
-            this.redraw();
             return;
         }
         var c;
@@ -261,20 +252,39 @@
         }    
 
         if (this.map) { // map.addControl() has already been called on the panel
-            for (var i=0, len=controls.length; i<len; i++) {
-                this.map.addControl(controls[i]);
-                controls[i].deactivate();
-                controls[i].events.on({
-                    "activate": this.redraw,
-                    "deactivate": this.redraw,
-                    scope: this
-                });
-            }
+            this.addControlsToMap(controls);
             this.redraw();
         }
     },
    
     /**
+     * Method: addControlsToMap
+     * Only for internal use in draw() and addControls() methods.
+     *
+     * Parameters:
+     * controls - {Array(<OpenLayers.Control>)} Controls to add into map.
+     */         
+    addControlsToMap: function (controls) {
+        var control;
+        for (var i=0, len=controls.length; i<len; i++) {
+            control = controls[i];
+            if (control.autoActivate === true) {
+                control.autoActivate = false;
+                this.map.addControl(control);
+                control.autoActivate = true;
+            } else {
+                this.map.addControl(control);
+                control.deactivate();
+            }
+            control.events.on({
+                "activate": this.redraw,
+                "deactivate": this.redraw,
+                scope: this
+            });
+        }  
+    },
+
+    /**
      * Method: onClick
      */
     onClick: function (ctrl, evt) {

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Permalink.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Permalink.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Permalink.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,11 +1,13 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Control.js
  * @requires OpenLayers/Control/ArgParser.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -121,7 +123,6 @@
         OpenLayers.Control.prototype.draw.apply(this, arguments);
           
         if (!this.element) {
-            this.div.className = this.displayClass;
             this.element = document.createElement("a");
             this.element.innerHTML = OpenLayers.i18n("permalink");
             this.element.href="";

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/SLDSelect.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/SLDSelect.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/SLDSelect.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,10 +1,11 @@
-/* Copyright (c) 2006-2010 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Control.js
- * @requires OpenLayers/Layer/WMS/Post.js
+ * @requires OpenLayers/Layer/WMS.js
  * @requires OpenLayers/Handler/RegularPolygon.js
  * @requires OpenLayers/Handler/Polygon.js
  * @requires OpenLayers/Handler/Path.js
@@ -118,7 +119,7 @@
      * APIProperty: layerCache
      * {Object} Cache to use for storing references to the selection layers.
      *     Normally each source layer will have exactly 1 selection layer of
-     *     type OpenLayers.Layer.WMS.Post. If not provided, layers will
+     *     type OpenLayers.Layer.WMS. If not provided, layers will
      *     be cached on the prototype. Note that if <clearOnDeactivate> is
      *     true, the layer will no longer be cached after deactivating the
      *     control.
@@ -157,7 +158,8 @@
             click: this.select}, this.callbacks);
         this.handlerOptions = this.handlerOptions || {};
         this.layerOptions = OpenLayers.Util.applyDefaults(this.layerOptions, {
-            displayInLayerSwitcher: false
+            displayInLayerSwitcher: false,
+            tileOptions: {maxGetUrlLength: 2048}
         });
         if (this.sketchStyle) {
             this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(
@@ -206,14 +208,14 @@
      *     is performed.
      *
      * Returns:
-     * {<OpenLayers.Layer.WMS.Post>} A WMS Post layer since SLD selections can
-     *     easily get quite long.
+     * {<OpenLayers.Layer.WMS>} A WMS layer with maxGetUrlLength configured to 2048
+     *     since SLD selections can easily get quite long.
      */
     createSelectionLayer: function(source) {
         // check if we already have a selection layer for the source layer
         var selectionLayer;
         if (!this.layerCache[source.id]) {
-            selectionLayer = new OpenLayers.Layer.WMS.Post(source.name, 
+            selectionLayer = new OpenLayers.Layer.WMS(source.name, 
                 source.url, source.params, 
                 OpenLayers.Util.applyDefaults(
                     this.layerOptions,
@@ -566,4 +568,4 @@
     },
 
     CLASS_NAME: "OpenLayers.Control.SLDSelect"
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Scale.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Scale.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Scale.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,10 +1,12 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ScaleLine.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ScaleLine.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ScaleLine.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2007 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Control.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/SelectFeature.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/SelectFeature.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/SelectFeature.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Snapping.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Snapping.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Snapping.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Split.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Split.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/Split.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/TransformFeature.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/TransformFeature.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/TransformFeature.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2009 MetaCarta, Inc., published under the Clear BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/WMSGetFeatureInfo.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/WMSGetFeatureInfo.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/WMSGetFeatureInfo.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -344,28 +345,36 @@
             layerNames = layerNames.concat(layers[i].params.LAYERS);
             styleNames = styleNames.concat(this.getStyleNames(layers[i]));
         }
+        var firstLayer = layers[0];
+        // use the firstLayer's projection if it matches the map projection -
+        // this assumes that all layers will be available in this projection
+        var projection = this.map.getProjection();
+        var layerProj = firstLayer.projection;
+        if (layerProj && layerProj.equals(this.map.getProjectionObject())) {
+            projection = layerProj.getCode();
+        }
         var params = OpenLayers.Util.extend({
             service: "WMS",
-            version: layers[0].params.VERSION,
+            version: firstLayer.params.VERSION,
             request: "GetFeatureInfo",
             layers: layerNames,
             query_layers: layerNames,
             styles: styleNames,
             bbox: this.map.getExtent().toBBOX(null,
-                layers[0].reverseAxisOrder()),
+                firstLayer.reverseAxisOrder()),
             feature_count: this.maxFeatures,
             height: this.map.getSize().h,
             width: this.map.getSize().w,
             format: format,
             info_format: this.infoFormat
-        }, (parseFloat(layers[0].params.VERSION) >= 1.3) ?
+        }, (parseFloat(firstLayer.params.VERSION) >= 1.3) ?
             {
-                crs: this.map.getProjection(),
+                crs: projection,
                 i: clickPosition.x,
                 j: clickPosition.y
             } :
             {
-                srs: this.map.getProjection(),
+                srs: projection,
                 x: clickPosition.x,
                 y: clickPosition.y
             }

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/WMTSGetFeatureInfo.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/WMTSGetFeatureInfo.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/WMTSGetFeatureInfo.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -212,35 +213,6 @@
     },
 
     /**
-     * Method: activate
-     * Activates the control.
-     * 
-     * Returns:
-     * {Boolean} The control was effectively activated.
-     */
-    activate: function () {
-        if (!this.active) {
-            this.handler.activate();
-        }
-        return OpenLayers.Control.prototype.activate.apply(
-            this, arguments
-        );
-    },
-
-    /**
-     * Method: deactivate
-     * Deactivates the control.
-     * 
-     * Returns:
-     * {Boolean} The control was effectively deactivated.
-     */
-    deactivate: function () {
-        return OpenLayers.Control.prototype.deactivate.apply(
-            this, arguments
-        );
-    },
-    
-    /**
      * Method: getInfoForClick 
      * Called on click
      *
@@ -424,18 +396,6 @@
             }
         }
     },
-   
-    /** 
-     * Method: setMap
-     * Set the map property for the control. 
-     * 
-     * Parameters:
-     * map - {<OpenLayers.Map>} 
-     */
-    setMap: function(map) {
-        this.handler.setMap(map);
-        OpenLayers.Control.prototype.setMap.apply(this, arguments);
-    },
 
     CLASS_NAME: "OpenLayers.Control.WMTSGetFeatureInfo"
 });

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomBox.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomBox.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomBox.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomIn.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomIn.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomIn.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomOut.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomOut.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomOut.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomPanel.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomPanel.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomPanel.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomToMaxExtent.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomToMaxExtent.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control/ZoomToMaxExtent.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Control.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Events.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Events.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Events.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -448,8 +449,8 @@
      * Construct an OpenLayers.Events object.
      *
      * Parameters:
-     * object - {Object} The js object to which this Events object  is being
-     * added element - {DOMElement} A dom element to respond to browser events
+     * object - {Object} The js object to which this Events object  is being added
+     * element - {DOMElement} A dom element to respond to browser events
      * eventTypes - {Array(String)} Array of custom application events 
      * fallThrough - {Boolean} Allow events to fall through after these have
      *                         been handled?
@@ -741,7 +742,7 @@
 
         // fast path
         if(!listeners || listeners.length == 0) {
-            return;
+            return undefined;
         }
 
         // prep evt object with object & div references
@@ -757,7 +758,8 @@
         // execute all callbacks registered for specified type
         // get a clone of the listeners array to
         // allow for splicing during callbacks
-        var listeners = listeners.slice(), continueChain;
+        listeners = listeners.slice();
+        var continueChain;
         for (var i=0, len=listeners.length; i<len; i++) {
             var callback = listeners[i];
             // bind the context to callback.obj
@@ -785,10 +787,15 @@
      * evt - {Event} 
      */
     handleBrowserEvent: function (evt) {
+        var type = evt.type, listeners = this.listeners[type];
+        if(!listeners || listeners.length == 0) {
+            // noone's listening, bail out
+            return;
+        }
         if (this.includeXY) {
             evt.xy = this.getMousePosition(evt);
         } 
-        this.triggerEvent(evt.type, evt);
+        this.triggerEvent(type, evt);
     },
 
     /**
@@ -822,11 +829,10 @@
         }
         
         if (!this.element.scrolls) {
+            var viewportElement = OpenLayers.Util.getViewportElement();
             this.element.scrolls = [
-                (document.documentElement.scrollLeft
-                         || document.body.scrollLeft),
-                (document.documentElement.scrollTop
-                         || document.body.scrollTop)
+                viewportElement.scrollLeft,
+                viewportElement.scrollTop
             ];
         }
 
@@ -839,8 +845,6 @@
         
         if (!this.element.offsets) {
             this.element.offsets = OpenLayers.Util.pagePosition(this.element);
-            this.element.offsets[0] += this.element.scrolls[0];
-            this.element.offsets[1] += this.element.scrolls[1];
         }
         return new OpenLayers.Pixel(
             (evt.clientX + this.element.scrolls[0]) - this.element.offsets[0]

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature/Vector.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature/Vector.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature/Vector.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 // TRASH THIS
@@ -266,7 +267,7 @@
 
         if(!this.layer || !this.geometry.move){
             //do nothing if no layer or immoveable geometry
-            return;
+            return undefined;
         }
 
         var pixel;

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature/WFS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature/WFS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature/WFS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Feature.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Comparison.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Comparison.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Comparison.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
-  * full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Filter.js
@@ -108,9 +109,10 @@
         }
         var result = false;
         var got = context[this.property];
+        var exp;
         switch(this.type) {
             case OpenLayers.Filter.Comparison.EQUAL_TO:
-                var exp = this.value;
+                exp = this.value;
                 if(!this.matchCase &&
                    typeof got == "string" && typeof exp == "string") {
                     result = (got.toUpperCase() == exp.toUpperCase());
@@ -119,7 +121,7 @@
                 }
                 break;
             case OpenLayers.Filter.Comparison.NOT_EQUAL_TO:
-                var exp = this.value;
+                exp = this.value;
                 if(!this.matchCase &&
                    typeof got == "string" && typeof exp == "string") {
                     result = (got.toUpperCase() != exp.toUpperCase());

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/FeatureId.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/FeatureId.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/FeatureId.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
-  * full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Logical.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Logical.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Logical.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
-  * full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 
 /**
@@ -69,9 +70,10 @@
      * {Boolean} The filter applies.
      */
     evaluate: function(context) {
+        var i, len;
         switch(this.type) {
             case OpenLayers.Filter.Logical.AND:
-                for (var i=0, len=this.filters.length; i<len; i++) {
+                for (i=0, len=this.filters.length; i<len; i++) {
                     if (this.filters[i].evaluate(context) == false) {
                         return false;
                     }
@@ -79,7 +81,7 @@
                 return true;
                 
             case OpenLayers.Filter.Logical.OR:
-                for (var i=0, len=this.filters.length; i<len; i++) {
+                for (i=0, len=this.filters.length; i<len; i++) {
                     if (this.filters[i].evaluate(context) == true) {
                         return true;
                     }
@@ -89,6 +91,7 @@
             case OpenLayers.Filter.Logical.NOT:
                 return (!this.filters[0].evaluate(context));
         }
+        return undefined;
     },
     
     /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Spatial.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Spatial.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter/Spatial.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,10 +1,12 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
-  * full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Filter.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Filter.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 
 /**
@@ -16,7 +17,7 @@
     
     /** 
      * Constructor: OpenLayers.Filter
-     * This is an abstract class.  Create an instance of a filter subclass.
+     * This class represents a generic filter.
      *
      * Parameters:
      * options - {Object} Optional object whose properties will be set on the
@@ -38,8 +39,8 @@
 
     /**
      * APIMethod: evaluate
-     * Evaluates this filter in a specific context.  Should be implemented by
-     *     subclasses.
+     * Evaluates this filter in a specific context.  Instances or subclasses
+     * are supposed to override this method.
      * 
      * Parameters:
      * context - {Object} Context to use in evaluating the filter.  If a vector

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/ArcXML/Features.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/ArcXML/Features.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/ArcXML/Features.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/ArcXML.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/ArcXML.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/ArcXML.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Atom.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Atom.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Atom.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2010 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetDomain/v2_0_2.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetDomain.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetDomain.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetDomain.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetRecords.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetRecords.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/CSWGetRecords.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Context.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Context.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Context.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2010 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,7 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
-
 /**
  * @requires OpenLayers/Format/Filter.js
  * @requires OpenLayers/Format/XML.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1_1_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1_1_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter/v1_1_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Filter.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Format/XML.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/Base.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/Base.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/Base.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/v2.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/v2.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/v2.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/v3.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/v3.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML/v3.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GML.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -12,6 +13,7 @@
  * @requires OpenLayers/Geometry/Polygon.js
  * @requires OpenLayers/Geometry/MultiPolygon.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GPX.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GPX.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GPX.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2007 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Format/XML.js
@@ -161,10 +162,10 @@
         // node is either a wpt, trk or rte
         // attributes are children of the form <attr>value</attr>
         var attributes = {};
-        var attrNode = node.firstChild;
+        var attrNode = node.firstChild, value, name;
         while(attrNode) {
             if(attrNode.nodeType == 1) {
-                var value = attrNode.firstChild;
+                value = attrNode.firstChild;
                 if(value.nodeType == 3 || value.nodeType == 4) {
                     name = (attrNode.prefix) ?
                         attrNode.nodeName.split(":")[1] :

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GeoJSON.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GeoJSON.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GeoJSON.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GeoRSS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GeoRSS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/GeoRSS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/JSON.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/JSON.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/JSON.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -59,6 +60,14 @@
     pretty: false,
 
     /**
+     * Property: nativeJSON
+     * {Boolean} Does the browser support native json?
+     */
+    nativeJSON: (function() {
+        return !!(window.JSON && typeof JSON.parse == "function" && typeof JSON.stringify == "function");
+    })(),
+
+    /**
      * Constructor: OpenLayers.Format.JSON
      * Create a new parser for JSON.
      *
@@ -86,15 +95,18 @@
      * {Object} An object, array, string, or number .
      */
     read: function(json, filter) {
-        /**
-         * Parsing happens in three stages. In the first stage, we run the text
-         *     against a regular expression which looks for non-JSON
-         *     characters. We are especially concerned with '()' and 'new'
-         *     because they can cause invocation, and '=' because it can cause
-         *     mutation. But just to be safe, we will reject all unexpected
-         *     characters.
-         */
-        try {
+        var object;
+        if (this.nativeJSON) {
+            object = JSON.parse(json, filter);
+        } else try {
+            /**
+             * Parsing happens in three stages. In the first stage, we run the
+             *     text against a regular expression which looks for non-JSON
+             *     characters. We are especially concerned with '()' and 'new'
+             *     because they can cause invocation, and '=' because it can
+             *     cause mutation. But just to be safe, we will reject all
+             *     unexpected characters.
+             */
             if (/^[\],:{}\s]*$/.test(json.replace(/\\["\\\/bfnrtu]/g, '@').
                                 replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
                                 replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
@@ -106,7 +118,7 @@
                  *     begin a block or an object literal. We wrap the text in
                  *     parens to eliminate the ambiguity.
                  */
-                var object = eval('(' + json + ')');
+                object = eval('(' + json + ')');
 
                 /**
                  * In the optional third stage, we recursively walk the new
@@ -126,17 +138,16 @@
                     }
                     object = walk('', object);
                 }
-
-                if(this.keepData) {
-                    this.data = object;
-                }
-
-                return object;
             }
         } catch(e) {
             // Fall through if the regexp test fails.
         }
-        return null;
+
+        if(this.keepData) {
+            this.data = object;
+        }
+
+        return object;
     },
 
     /**
@@ -158,7 +169,9 @@
         var type = typeof value;
         if(this.serialize[type]) {
             try {
-                json = this.serialize[type].apply(this, [value]);
+                json = (!this.pretty && this.nativeJSON) ?
+                    JSON.stringify(value) :
+                    this.serialize[type].apply(this, [value]);
             } catch(err) {
                 OpenLayers.Console.error("Trouble serializing: " + err);
             }

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/KML.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/KML.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/KML.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -11,6 +12,7 @@
  * @requires OpenLayers/Geometry/Collection.js
  * @requires OpenLayers/Request/XMLHttpRequest.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  * @requires OpenLayers/Projection.js
  */
 
@@ -352,11 +354,10 @@
         
         var types = ["LineStyle", "PolyStyle", "IconStyle", "BalloonStyle", 
                      "LabelStyle"];
-        var type, nodeList, geometry, parser;
+        var type, styleTypeNode, nodeList, geometry, parser;
         for(var i=0, len=types.length; i<len; ++i) {
             type = types[i];
-            styleTypeNode = this.getElementsByTagNameNS(node, 
-                                                   "*", type)[0];
+            styleTypeNode = this.getElementsByTagNameNS(node, "*", type)[0];
             if(!styleTypeNode) { 
                 continue;
             }

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OSM.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OSM.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OSM.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2007 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Format/XML.js
@@ -373,13 +374,14 @@
             return already_exists ? [] : [node];
         }, 
         linestring: function(feature) {
+            var id;
             var nodes = [];
             var geometry = feature.geometry;
             if (feature.osm_id) {
                 id = feature.osm_id;
             } else {
-               id = -this.osm_id;
-               this.osm_id++; 
+                id = -this.osm_id;
+                this.osm_id++; 
             }
             var way = this.createElementNS(null, "way");
             way.setAttribute("id", id);

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2010 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1_1_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1_1_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSCommon/v1_1_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSContext/v0_3_1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSContext/v0_3_1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSContext/v0_3_1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2010 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSContext.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSContext.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/OWSContext.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2010 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD/v1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD/v1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD/v1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SLD.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Format/XML.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSCapabilities/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSCapabilities.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSCapabilities.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSCapabilities.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSGetFeatureOfInterest.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
  
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSGetObservation.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSGetObservation.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/SOSGetObservation.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,260 +1,305 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
-/**
- * @requires OpenLayers/Format/XML.js
- * @requires OpenLayers/Format/GML.js
- * @requires OpenLayers/Format/GML/v3.js
- */
-
-/**
- * Class: OpenLayers.Format.SOSGetObservation
- * Read and write SOS GetObersation (to get the actual values from a sensor) 
- *     version 1.0.0
- *
- * Inherits from:
- *  - <OpenLayers.Format.XML>
- */
-OpenLayers.Format.SOSGetObservation = OpenLayers.Class(OpenLayers.Format.XML, {
-    
-    /**
-     * Property: namespaces
-     * {Object} Mapping of namespace aliases to namespace URIs.
-     */
-    namespaces: {
-        ows: "http://www.opengis.net/ows",
-        gml: "http://www.opengis.net/gml",
-        sos: "http://www.opengis.net/sos/1.0",
-        ogc: "http://www.opengis.net/ogc",
-        om: "http://www.opengis.net/om/1.0",
-        xlink: "http://www.w3.org/1999/xlink",
-        xsi: "http://www.w3.org/2001/XMLSchema-instance"
-    },
-
-    /**
-     * Property: regExes
-     * Compiled regular expressions for manipulating strings.
-     */
-    regExes: {
-        trimSpace: (/^\s*|\s*$/g),
-        removeSpace: (/\s*/g),
-        splitSpace: (/\s+/),
-        trimComma: (/\s*,\s*/g)
-    },
-
-    /**
-     * Constant: VERSION
-     * {String} 1.0.0
-     */
-    VERSION: "1.0.0",
-
-    /**
-     * Property: schemaLocation
-     * {String} Schema location
-     */
-    schemaLocation: "http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetObservation.xsd",
-
-    /**
-     * Property: defaultPrefix
-     */
-    defaultPrefix: "sos",
-
-    /**
-     * Constructor: OpenLayers.Format.SOSGetObservation
-     *
-     * Parameters:
-     * options - {Object} An optional object whose properties will be set on
-     *     this instance.
-     */
-    initialize: function(options) {
-        OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
-    },
-
-    /**
-     * Method: read
-     * 
-     * Parameters: 
-     * data - {String} or {DOMElement} data to read/parse.
-     *
-     * Returns:
-     * {Object} An object containing the measurements
-     */
-    read: function(data) {
-        if(typeof data == "string") {
-            data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
-        }
-        if(data && data.nodeType == 9) {
-            data = data.documentElement;
-        }
-        var info = {measurements: []};
-        this.readNode(data, info);
-        return info;
-    },
-
-    /**
-     * Method: write
-     *
-     * Parameters:
-     * options - {Object} Optional object.
-     *
-     * Returns:
-     * {String} An SOS GetObservation request XML string.
-     */
-    write: function(options) {
-        var node = this.writeNode("sos:GetObservation", options);
-        this.setAttributeNS(
-            node, this.namespaces.xsi,
-            "xsi:schemaLocation", this.schemaLocation
-        );
-        return OpenLayers.Format.XML.prototype.write.apply(this, [node]);
-    }, 
-
-    /**
-     * Property: readers
-     * Contains public functions, grouped by namespace prefix, that will
-     *     be applied when a namespaced node is found matching the function
-     *     name.  The function will be applied in the scope of this parser
-     *     with two arguments: the node being read and a context object passed
-     *     from the parent.
-     */
-    readers: {
-        "om": {
-            "ObservationCollection": function(node, obj) {
-                obj.id = this.getAttributeNS(node, this.namespaces.gml, "id");
-                this.readChildNodes(node, obj);
-            },
-            "member": function(node, observationCollection) {
-                this.readChildNodes(node, observationCollection);
-            },
-            "Measurement": function(node, observationCollection) {
-                var measurement = {};
-                observationCollection.measurements.push(measurement);
-                this.readChildNodes(node, measurement);
-            },
-            "samplingTime": function(node, measurement) {
-                var samplingTime = {};
-                measurement.samplingTime = samplingTime;
-                this.readChildNodes(node, samplingTime);
-            },
-            "observedProperty": function(node, measurement) {
-                measurement.observedProperty = 
-                    this.getAttributeNS(node, this.namespaces.xlink, "href");
-                this.readChildNodes(node, measurement);
-            },
-            "procedure": function(node, measurement) {
-                measurement.procedure = 
-                    this.getAttributeNS(node, this.namespaces.xlink, "href");
-                this.readChildNodes(node, measurement);
-            },
-            "result": function(node, measurement) {
-                var result = {};
-                measurement.result = result;
-                if (this.getChildValue(node) !== '') {
-                    result.value = this.getChildValue(node);
-                    result.uom = node.getAttribute("uom");
-                } else {
-                    this.readChildNodes(node, result);
-                }
-            }
-        },
-        "gml": OpenLayers.Util.applyDefaults({
-            "TimeInstant": function(node, samplingTime) {
-               var timeInstant = {};
-                samplingTime.timeInstant = timeInstant;
-                this.readChildNodes(node, timeInstant);
-            },
-            "timePosition": function(node, timeInstant) {
-                timeInstant.timePosition = this.getChildValue(node);
-            }
-        }, OpenLayers.Format.GML.v3.prototype.readers.gml)
-    },
-
-    /**
-     * Property: writers
-     * As a compliment to the readers property, this structure contains public
-     *     writing functions grouped by namespace alias and named like the
-     *     node names they produce.
-     */
-    writers: {
-        "sos": {
-            "GetObservation": function(options) {
-                var node = this.createElementNSPlus("GetObservation", {
-                    attributes: {
-                        version: this.VERSION,
-                        service: 'SOS'
-                    } 
-                }); 
-                this.writeNode("offering", options, node);
-                this.writeNode("eventTime", options, node);
-                this.writeNode("procedure", options, node);
-                this.writeNode("observedProperty", options, node);
-                this.writeNode("responseFormat", options, node);
-                this.writeNode("resultModel", options, node);                                
-                this.writeNode("responseMode", options, node);
-                return node; 
-            },
-            "responseFormat": function(options) {
-                return this.createElementNSPlus("responseFormat", 
-                    {value: options.responseFormat});
-            },
-            "procedure": function(options) {
-                return this.createElementNSPlus("procedure", 
-                    {value: options.procedure});
-            },
-            "offering": function(options) {
-                return this.createElementNSPlus("offering", {value: 
-                    options.offering});
-            },
-            "observedProperty": function(options) {
-                return this.createElementNSPlus("observedProperty", 
-                    {value: options.observedProperty});
-            },
-            "eventTime": function(options) {
-                var node = this.createElementNSPlus("eventTime");
-                if (options.eventTime === 'latest') {
-                    this.writeNode("ogc:TM_Equals", options, node);
-                }
-                return node;
-            },
-            "resultModel": function(options) {
-                return this.createElementNSPlus("resultModel", {value: 
-                    options.resultModel});
-            },
-            "responseMode": function(options) {
-                return this.createElementNSPlus("responseMode", {value: 
-                    options.responseMode});
-            }
-        },
-        "ogc": {
-            "TM_Equals": function(options) {
-                var node = this.createElementNSPlus("ogc:TM_Equals");
-                this.writeNode("ogc:PropertyName", {property: 
-                    "urn:ogc:data:time:iso8601"}, node);
-                if (options.eventTime === 'latest') {
-                    this.writeNode("gml:TimeInstant", {value: 'latest'}, node);
-                }
-                return node;
-            },
-            "PropertyName": function(options) {
-                return this.createElementNSPlus("ogc:PropertyName", 
-                    {value: options.property});
-            }
-        },
-        "gml": {
-            "TimeInstant": function(options) {
-                var node = this.createElementNSPlus("gml:TimeInstant");
-                this.writeNode("gml:timePosition", options, node);
-                return node;
-            },
-            "timePosition": function(options) {
-                var node = this.createElementNSPlus("gml:timePosition", 
-                    {value: options.value});
-                return node;
-            }
-        }
-    },
-    
-    CLASS_NAME: "OpenLayers.Format.SOSGetObservation" 
-
-});
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Format/XML.js
+ * @requires OpenLayers/Format/SOSGetFeatureOfInterest.js
+ */
+
+/**
+ * Class: OpenLayers.Format.SOSGetObservation
+ * Read and write SOS GetObersation (to get the actual values from a sensor) 
+ *     version 1.0.0
+ *
+ * Inherits from:
+ *  - <OpenLayers.Format.XML>
+ */
+OpenLayers.Format.SOSGetObservation = OpenLayers.Class(OpenLayers.Format.XML, {
+    
+    /**
+     * Property: namespaces
+     * {Object} Mapping of namespace aliases to namespace URIs.
+     */
+    namespaces: {
+        ows: "http://www.opengis.net/ows",
+        gml: "http://www.opengis.net/gml",
+        sos: "http://www.opengis.net/sos/1.0",
+        ogc: "http://www.opengis.net/ogc",
+        om: "http://www.opengis.net/om/1.0",
+        sa: "http://www.opengis.net/sampling/1.0",
+        xlink: "http://www.w3.org/1999/xlink",
+        xsi: "http://www.w3.org/2001/XMLSchema-instance"
+    },
+
+    /**
+     * Property: regExes
+     * Compiled regular expressions for manipulating strings.
+     */
+    regExes: {
+        trimSpace: (/^\s*|\s*$/g),
+        removeSpace: (/\s*/g),
+        splitSpace: (/\s+/),
+        trimComma: (/\s*,\s*/g)
+    },
+
+    /**
+     * Constant: VERSION
+     * {String} 1.0.0
+     */
+    VERSION: "1.0.0",
+
+    /**
+     * Property: schemaLocation
+     * {String} Schema location
+     */
+    schemaLocation: "http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetObservation.xsd",
+
+    /**
+     * Property: defaultPrefix
+     */
+    defaultPrefix: "sos",
+
+    /**
+     * Constructor: OpenLayers.Format.SOSGetObservation
+     *
+     * Parameters:
+     * options - {Object} An optional object whose properties will be set on
+     *     this instance.
+     */
+    initialize: function(options) {
+        OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
+    },
+
+    /**
+     * Method: read
+     * 
+     * Parameters: 
+     * data - {String} or {DOMElement} data to read/parse.
+     *
+     * Returns:
+     * {Object} An object containing the measurements
+     */
+    read: function(data) {
+        if(typeof data == "string") {
+            data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
+        }
+        if(data && data.nodeType == 9) {
+            data = data.documentElement;
+        }
+        var info = {measurements: [], observations: []};
+        this.readNode(data, info);
+        return info;
+    },
+
+    /**
+     * Method: write
+     *
+     * Parameters:
+     * options - {Object} Optional object.
+     *
+     * Returns:
+     * {String} An SOS GetObservation request XML string.
+     */
+    write: function(options) {
+        var node = this.writeNode("sos:GetObservation", options);
+        node.setAttribute("xmlns:om", this.namespaces.om);
+        node.setAttribute("xmlns:ogc", this.namespaces.ogc);
+        this.setAttributeNS(
+            node, this.namespaces.xsi,
+            "xsi:schemaLocation", this.schemaLocation
+        );
+        return OpenLayers.Format.XML.prototype.write.apply(this, [node]);
+    }, 
+
+    /**
+     * Property: readers
+     * Contains public functions, grouped by namespace prefix, that will
+     *     be applied when a namespaced node is found matching the function
+     *     name.  The function will be applied in the scope of this parser
+     *     with two arguments: the node being read and a context object passed
+     *     from the parent.
+     */
+    readers: {
+        "om": {
+            "ObservationCollection": function(node, obj) {
+                obj.id = this.getAttributeNS(node, this.namespaces.gml, "id");
+                this.readChildNodes(node, obj);
+            },
+            "member": function(node, observationCollection) {
+                this.readChildNodes(node, observationCollection);
+            },
+            "Measurement": function(node, observationCollection) {
+                var measurement = {};
+                observationCollection.measurements.push(measurement);
+                this.readChildNodes(node, measurement);
+            },
+            "Observation": function(node, observationCollection) {
+                var observation = {};
+                observationCollection.observations.push(observation);
+                this.readChildNodes(node, observation);
+            },
+            "samplingTime": function(node, measurement) {
+                var samplingTime = {};
+                measurement.samplingTime = samplingTime;
+                this.readChildNodes(node, samplingTime);
+            },
+            "observedProperty": function(node, measurement) {
+                measurement.observedProperty = 
+                    this.getAttributeNS(node, this.namespaces.xlink, "href");
+                this.readChildNodes(node, measurement);
+            },
+            "procedure": function(node, measurement) {
+                measurement.procedure = 
+                    this.getAttributeNS(node, this.namespaces.xlink, "href");
+                this.readChildNodes(node, measurement);
+            },
+            "featureOfInterest": function(node, observation) {
+                var foi = {features: []};
+                observation.fois = [];
+                observation.fois.push(foi);
+                this.readChildNodes(node, foi);
+                // postprocessing to get actual features
+                var features = [];
+                for (var i=0, len=foi.features.length; i<len; i++) {
+                    var feature = foi.features[i];
+                    features.push(new OpenLayers.Feature.Vector(
+                        feature.components[0], feature.attributes));
+                }
+                foi.features = features;
+            },
+            "result": function(node, measurement) {
+                var result = {};
+                measurement.result = result;
+                if (this.getChildValue(node) !== '') {
+                    result.value = this.getChildValue(node);
+                    result.uom = node.getAttribute("uom");
+                } else {
+                    this.readChildNodes(node, result);
+                }
+            }
+        },
+        "sa": OpenLayers.Format.SOSGetFeatureOfInterest.prototype.readers.sa,
+        "gml": OpenLayers.Util.applyDefaults({
+            "TimeInstant": function(node, samplingTime) {
+               var timeInstant = {};
+                samplingTime.timeInstant = timeInstant;
+                this.readChildNodes(node, timeInstant);
+            },
+            "timePosition": function(node, timeInstant) {
+                timeInstant.timePosition = this.getChildValue(node);
+            }
+        }, OpenLayers.Format.SOSGetFeatureOfInterest.prototype.readers.gml)
+    },
+
+    /**
+     * Property: writers
+     * As a compliment to the readers property, this structure contains public
+     *     writing functions grouped by namespace alias and named like the
+     *     node names they produce.
+     */
+    writers: {
+        "sos": {
+            "GetObservation": function(options) {
+                var node = this.createElementNSPlus("GetObservation", {
+                    attributes: {
+                        version: this.VERSION,
+                        service: 'SOS'
+                    } 
+                }); 
+                this.writeNode("offering", options, node);
+                if (options.eventTime) {
+                    this.writeNode("eventTime", options, node);
+                }
+                for (var procedure in options.procedures) {
+                    this.writeNode("procedure", options.procedures[procedure], node);
+                }
+                for (var observedProperty in options.observedProperties) {
+                    this.writeNode("observedProperty", options.observedProperties[observedProperty], node);
+                }
+                if (options.foi) {
+                    this.writeNode("featureOfInterest", options.foi, node);
+                }
+                this.writeNode("responseFormat", options, node);
+                if (options.resultModel) {
+                    this.writeNode("resultModel", options, node);
+                }
+                if (options.responseMode) {
+                    this.writeNode("responseMode", options, node);
+                }
+                return node; 
+            },
+            "featureOfInterest": function(foi) {
+                var node = this.createElementNSPlus("featureOfInterest");
+                this.writeNode("ObjectID", foi.objectId, node);
+                return node;
+            },
+            "ObjectID": function(options) {
+                return this.createElementNSPlus("ObjectID",
+                    {value: options});
+            },
+            "responseFormat": function(options) {
+                return this.createElementNSPlus("responseFormat", 
+                    {value: options.responseFormat});
+            },
+            "procedure": function(procedure) {
+                return this.createElementNSPlus("procedure", 
+                    {value: procedure});
+            },
+            "offering": function(options) {
+                return this.createElementNSPlus("offering", {value: 
+                    options.offering});
+            },
+            "observedProperty": function(observedProperty) {
+                return this.createElementNSPlus("observedProperty", 
+                    {value: observedProperty});
+            },
+            "eventTime": function(options) {
+                var node = this.createElementNSPlus("eventTime");
+                if (options.eventTime === 'latest') {
+                    this.writeNode("ogc:TM_Equals", options, node);
+                }
+                return node;
+            },
+            "resultModel": function(options) {
+                return this.createElementNSPlus("resultModel", {value: 
+                    options.resultModel});
+            },
+            "responseMode": function(options) {
+                return this.createElementNSPlus("responseMode", {value: 
+                    options.responseMode});
+            }
+        },
+        "ogc": {
+            "TM_Equals": function(options) {
+                var node = this.createElementNSPlus("ogc:TM_Equals");
+                this.writeNode("ogc:PropertyName", {property: 
+                    "urn:ogc:data:time:iso8601"}, node);
+                if (options.eventTime === 'latest') {
+                    this.writeNode("gml:TimeInstant", {value: 'latest'}, node);
+                }
+                return node;
+            },
+            "PropertyName": function(options) {
+                return this.createElementNSPlus("ogc:PropertyName", 
+                    {value: options.property});
+            }
+        },
+        "gml": {
+            "TimeInstant": function(options) {
+                var node = this.createElementNSPlus("gml:TimeInstant");
+                this.writeNode("gml:timePosition", options, node);
+                return node;
+            },
+            "timePosition": function(options) {
+                var node = this.createElementNSPlus("gml:timePosition", 
+                    {value: options.value});
+                return node;
+            }
+        }
+    },
+    
+    CLASS_NAME: "OpenLayers.Format.SOSGetObservation" 
+
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Text.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Text.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/Text.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Feature/Vector.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,10 +1,12 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Format/GML.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WFSCapabilities.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WFSCapabilities/v1.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities/v1_1_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WFSCapabilities/v1.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSCapabilities.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/XML.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSDescribeFeatureType.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSDescribeFeatureType.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFSDescribeFeatureType.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/XML.js
  *

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WFST/v1.js
  * @requires OpenLayers/Format/Filter/v1_0_0.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1_1_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1_1_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST/v1_1_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WFST/v1.js
  * @requires OpenLayers/Format/Filter/v1_1_0.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WFST.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WKT.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WKT.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WKT.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -94,7 +95,7 @@
      */
     write: function(features) {
         var collection, geometry, type, data, isCollection;
-        if(features.constructor == Array) {
+        if (features.constructor == Array) {
             collection = features;
             isCollection = true;
         } else {
@@ -102,31 +103,45 @@
             isCollection = false;
         }
         var pieces = [];
-        if(isCollection) {
+        if (isCollection) {
             pieces.push('GEOMETRYCOLLECTION(');
         }
-        for(var i=0, len=collection.length; i<len; ++i) {
-            if(isCollection && i>0) {
+        for (var i=0, len=collection.length; i<len; ++i) {
+            if (isCollection && i>0) {
                 pieces.push(',');
             }
             geometry = collection[i].geometry;
-            type = geometry.CLASS_NAME.split('.')[2].toLowerCase();
-            if(!this.extract[type]) {
-                return null;
-            }
-            if (this.internalProjection && this.externalProjection) {
-                geometry = geometry.clone();
-                geometry.transform(this.internalProjection, 
-                                   this.externalProjection);
-            }                       
-            data = this.extract[type].apply(this, [geometry]);
-            pieces.push(type.toUpperCase() + '(' + data + ')');
+            pieces.push(this.extractGeometry(geometry));
         }
-        if(isCollection) {
+        if (isCollection) {
             pieces.push(')');
         }
         return pieces.join('');
     },
+
+    /**
+     * Method: extractGeometry
+     * Entry point to construct the WKT for a single Geometry object.
+     *
+     * Parameters:
+     * geometry - {<OpenLayers.Geometry.Geometry>}
+     *
+     * Returns:
+     * {String} A WKT string of representing the geometry
+     */
+    extractGeometry: function(geometry) {
+        var type = geometry.CLASS_NAME.split('.')[2].toLowerCase();
+        if (!this.extract[type]) {
+            return null;
+        }
+        if (this.internalProjection && this.externalProjection) {
+            geometry = geometry.clone();
+            geometry.transform(this.internalProjection, this.externalProjection);
+        }                       
+        var wktType = type == 'collection' ? 'GEOMETRYCOLLECTION' : type.toUpperCase();
+        var data = wktType + '(' + this.extract[type].apply(this, [geometry]) + ')';
+        return data;
+    },
     
     /**
      * Object with properties corresponding to the geometry types.
@@ -206,7 +221,7 @@
         /**
          * Return an array of polygon arrays from a multipolygon.
          * @param {<OpenLayers.Geometry.MultiPolygon>} multipolygon
-         * @returns {Array} An array of polygon arrays representing
+         * @returns {String} An array of polygon arrays representing
          *                  the multipolygon
          */
         'multipolygon': function(multipolygon) {
@@ -217,6 +232,19 @@
                            ')');
             }
             return array.join(',');
+        },
+
+        /**
+         * Return the WKT portion between 'GEOMETRYCOLLECTION(' and ')' for an <OpenLayers.Geometry.Collection>
+         * @param {<OpenLayers.Geometry.Collection>} collection
+         * @returns {String} internal WKT representation of the collection
+         */
+        'collection': function(collection) {
+            var array = [];
+            for(var i=0, len=collection.components.length; i<len; ++i) {
+                array.push(this.extractGeometry.apply(this, [collection.components[i]]));
+            }
+            return array.join(',');
         }
 
     },

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1_1_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1_1_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC/v1_1_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMC.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WMSCapabilities.js
  * @requires OpenLayers/Format/XML.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WMSCapabilities/v1.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WMSCapabilities/v1_1.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_1_1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WMSCapabilities/v1_1.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_3.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_3.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_3.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WMSCapabilities/v1.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities/v1_3_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/WMSCapabilities/v1_3.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSCapabilities.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Format/XML.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSDescribeLayer/v1_1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSDescribeLayer.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSDescribeLayer.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSDescribeLayer.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSGetFeatureInfo.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSGetFeatureInfo.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMSGetFeatureInfo.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMTSCapabilities/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMTSCapabilities.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMTSCapabilities.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/WMTSCapabilities.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/XML.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/XML.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format/XML.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Format.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,10 +1,12 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Util.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Collection.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Collection.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Collection.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -107,12 +108,19 @@
      */
     calculateBounds: function() {
         this.bounds = null;
-        if ( this.components && this.components.length > 0) {
-            this.setBounds(this.components[0].getBounds());
-            for (var i=1, len=this.components.length; i<len; i++) {
-                this.extendBounds(this.components[i].getBounds());
+        var bounds = new OpenLayers.Bounds();
+        var components = this.components;
+        if (components) {
+            for (var i=0, len=components.length; i<len; i++) {
+                bounds.extend(components[i].getBounds());
             }
         }
+        // to preserve old behavior, we only set bounds if non-null
+        // in the future, we could add bounds.isEmpty()
+        if (bounds.left != null && bounds.bottom != null && 
+            bounds.right != null && bounds.top != null) {
+            this.setBounds(bounds);
+        }
     },
 
     /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Curve.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Curve.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Curve.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/LineString.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/LineString.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/LineString.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -546,6 +547,98 @@
         }
         return best;
     },
+    
+    /**
+     * APIMethod: simplify
+     * This function will return a simplified LineString.
+     * Simplification is based on the Douglas-Peucker algorithm.
+     *
+     *
+     * Parameters:
+     * tolerance - {number} threshhold for simplification in map units
+     *
+     * Returns:
+     * {OpenLayers.Geometry.LineString} the simplified LineString
+     */
+    simplify: function(tolerance){
+        if (this && this !== null) {
+            var points = this.getVertices();
+            if (points.length < 3) {
+                return this;
+            }
+    
+            var compareNumbers = function(a, b){
+                return (a-b);
+            };
+    
+            /**
+             * Private function doing the Douglas-Peucker reduction
+             */
+            var douglasPeuckerReduction = function(points, firstPoint, lastPoint, tolerance){
+                var maxDistance = 0;
+                var indexFarthest = 0;
+    
+                for (var index = firstPoint; index < lastPoint; index++) {
+                    distance = perpendicularDistance(points[firstPoint], points[lastPoint], points[index]);
+                    if (distance > maxDistance) {
+                        maxDistance = distance;
+                        indexFarthest = index;
+                    }
+                }
+    
+                if (maxDistance > tolerance && indexFarthest != firstPoint) {
+                    //Add the largest point that exceeds the tolerance
+                    pointIndexsToKeep.push(indexFarthest);
+                    douglasPeuckerReduction(points, firstPoint, indexFarthest, tolerance);
+                    douglasPeuckerReduction(points, indexFarthest, lastPoint, tolerance);
+                }
+            };
+    
+            /**
+             * Private function calculating the perpendicular distance
+             * TODO: check whether OpenLayers.Geometry.LineString::distanceTo() is faster or slower
+             */
+            var perpendicularDistance = function(point1, point2, point){
+                //Area = |(1/2)(x1y2 + x2y3 + x3y1 - x2y1 - x3y2 - x1y3)|   *Area of triangle
+                //Base = v((x1-x2)²+(x1-x2)²)                               *Base of Triangle*
+                //Area = .5*Base*H                                          *Solve for height
+                //Height = Area/.5/Base
+    
+                var area = Math.abs(0.5 * (point1.x * point2.y + point2.x * point.y + point.x * point1.y - point2.x * point1.y - point.x * point2.y - point1.x * point.y));
+                var bottom = Math.sqrt(Math.pow(point1.x - point2.x, 2) + Math.pow(point1.y - point2.y, 2));
+                var height = area / bottom * 2;
+    
+                return height;
+            };
+    
+            var firstPoint = 0;
+            var lastPoint = points.length - 1;
+            var pointIndexsToKeep = [];
+    
+            //Add the first and last index to the keepers
+            pointIndexsToKeep.push(firstPoint);
+            pointIndexsToKeep.push(lastPoint);
+    
+            //The first and the last point cannot be the same
+            while (points[firstPoint].equals(points[lastPoint])) {
+                lastPoint--;
+                //Addition: the first point not equal to first point in the LineString is kept as well
+                pointIndexsToKeep.push(lastPoint);
+            }
+    
+            douglasPeuckerReduction(points, firstPoint, lastPoint, tolerance);
+            var returnPoints = [];
+            pointIndexsToKeep.sort(compareNumbers);
+            for (var index = 0; index < pointIndexsToKeep.length; index++) {
+                returnPoints.push(points[pointIndexsToKeep[index]]);
+            }
+            return new OpenLayers.Geometry.LineString(returnPoints);
+    
+        }
+        else {
+            return this;
+        }
+    },
 
     CLASS_NAME: "OpenLayers.Geometry.LineString"
 });

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/LinearRing.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/LinearRing.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/LinearRing.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiLineString.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiLineString.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiLineString.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiPoint.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiPoint.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiPoint.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiPolygon.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiPolygon.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/MultiPolygon.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Point.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Point.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Point.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Polygon.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Polygon.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Polygon.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Rectangle.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Rectangle.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Rectangle.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Surface.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Surface.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry/Surface.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Geometry.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
  
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Box.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Box.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Box.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -205,7 +206,7 @@
                 "border-top-width")) + parseInt(OpenLayers.Element.getStyle(
                 this.zoomBox, "border-bottom-width")) + 1;
             // all browsers use the new box model, except IE in quirks mode
-            var newBoxModel = OpenLayers.Util.getBrowserName() == "msie" ?
+            var newBoxModel = OpenLayers.BROWSER_NAME == "msie" ?
                 document.compatMode != "BackCompat" : true;
             this.boxCharacteristics = {
                 xOffset: xOffset,

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Click.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Click.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Click.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the clear BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Handler.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Drag.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Drag.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Drag.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -93,8 +94,7 @@
     
     /**
      * Property: documentEvents
-     * {<OpenLayers.Events>} Event instance for observing document events. Will
-     *     be set on mouseout if documentDrag is set to true.
+     * {Boolean} Are we currently observing document events?
      */
     documentEvents: null,
 
@@ -116,6 +116,19 @@
      */
     initialize: function(control, callbacks, options) {
         OpenLayers.Handler.prototype.initialize.apply(this, arguments);
+        
+        if (this.documentDrag === true) {
+            var me = this;
+            this._docMove = function(evt) {
+                me.mousemove({
+                    xy: {x: evt.clientX, y: evt.clientY},
+                    element: document
+                });
+            };
+            this._docUp = function(evt) {
+                me.mouseup({xy: {x: evt.clientX, y: evt.clientY}});
+            };
+        }
     },
     
     /**
@@ -231,7 +244,7 @@
                     // registered with the map
                     this.setEvent(evt);
                 } else {
-                    this.destroyDocumentEvents();
+                    this.removeDocumentEvents();
                 }
             }
             if (this.interval > 0) {
@@ -271,7 +284,7 @@
         if (this.started) {
             if(this.documentDrag === true && this.documentEvents) {
                 this.adjustXY(evt);
-                this.destroyDocumentEvents();
+                this.removeDocumentEvents();
             }
             var dragged = (this.start != this.last);
             this.started = false;
@@ -300,17 +313,9 @@
      * {Boolean} Let the event propagate.
      */
     mouseout: function (evt) {
-        if (this.started && OpenLayers.Util.mouseLeft(evt, this.map.div)) {
+        if (this.started && OpenLayers.Util.mouseLeft(evt, this.map.viewPortDiv)) {
             if(this.documentDrag === true) {
-                this.documentEvents = new OpenLayers.Events(this, document,
-                                            null, null, {includeXY: true});
-                this.documentEvents.on({
-                    mousemove: this.mousemove,
-                    mouseup: this.mouseup
-                });
-                OpenLayers.Element.addClass(
-                    document.body, "olDragDown"
-                );
+                this.addDocumentEvents();
             } else {
                 var dragged = (this.start != this.last);
                 this.started = false; 
@@ -396,24 +401,34 @@
      * evt - {Object}
      */
     adjustXY: function(evt) {
-        var pos = OpenLayers.Util.pagePosition(this.map.div);
+        var pos = OpenLayers.Util.pagePosition(this.map.viewPortDiv);
         evt.xy.x -= pos[0];
         evt.xy.y -= pos[1];
     },
     
     /**
-     * Method: destroyDocumentEvents
-     * Destroys the events instance that gets added to the document body when
-     * documentDrag is true and the mouse cursor leaves the map viewport while
-     * dragging.
+     * Method: addDocumentEvents
+     * Start observing document events when documentDrag is true and the mouse
+     * cursor leaves the map viewport while dragging.
      */
-    destroyDocumentEvents: function() {
-        OpenLayers.Element.removeClass(
-            document.body, "olDragDown"
-        );
-        this.documentEvents.destroy();
-        this.documentEvents = null;
+    addDocumentEvents: function() {
+        OpenLayers.Element.addClass(document.body, "olDragDown");
+        this.documentEvents = true;
+        OpenLayers.Event.observe(document, "mousemove", this._docMove);
+        OpenLayers.Event.observe(document, "mouseup", this._docUp);
     },
+    
+    /**
+     * Method: removeDocumentEvents
+     * Stops observing document events when documentDrag is true and the mouse
+     * cursor re-enters the map viewport while dragging.
+     */
+    removeDocumentEvents: function() {
+        OpenLayers.Element.removeClass(document.body, "olDragDown");
+        this.documentEvents = false;
+        OpenLayers.Event.stopObserving(document, "mousemove", this._docMove);
+        OpenLayers.Event.stopObserving(document, "mouseup", this._docUp);
+    },
 
     CLASS_NAME: "OpenLayers.Handler.Drag"
 });

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Feature.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Feature.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Feature.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Hover.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Hover.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Hover.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the clear BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Handler.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Keyboard.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Keyboard.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Keyboard.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/MouseWheel.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/MouseWheel.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/MouseWheel.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Path.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Path.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Path.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -275,11 +276,21 @@
         }
         return true;
     },
+
+    /**
+     * APIMethod: finishGeometry
+     * Finish the geometry and send it back to the control.
+     */
+    finishGeometry: function() {
+        var index = this.line.geometry.components.length - 1;
+        this.line.geometry.removeComponent(this.line.geometry.components[index]);
+        this.removePoint();
+        this.finalize();
+    },
   
     /**
      * Method: dblclick 
-     * Handle double-clicks.  Finish the geometry and send it back
-     * to the control.
+     * Handle double-clicks.
      * 
      * Parameters:
      * evt - {Event} The browser event
@@ -289,10 +300,7 @@
      */
     dblclick: function(evt) {
         if(!this.freehandMode(evt)) {
-            var index = this.line.geometry.components.length - 1;
-            this.line.geometry.removeComponent(this.line.geometry.components[index]);
-            this.removePoint();
-            this.finalize();
+            this.finishGeometry();
         }
         return false;
     },

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Point.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Point.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Point.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Polygon.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Polygon.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/Polygon.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -19,7 +20,21 @@
  */
 OpenLayers.Handler.Polygon = OpenLayers.Class(OpenLayers.Handler.Path, {
     
+    /** 
+     * APIProperty: holeModifier
+     * {String} Key modifier to trigger hole digitizing.  Acceptable values are
+     *     "altKey", "shiftKey", or "ctrlKey".  If not set, no hole digitizing
+     *     will take place.  Default is null.
+     */
+    holeModifier: null,
+    
     /**
+     * Property: drawingHole
+     * {Boolean} Currently drawing an interior ring.
+     */
+    drawingHole: false,
+    
+    /**
      * Parameter: polygon
      * {<OpenLayers.Feature.Vector>}
      */
@@ -67,15 +82,152 @@
         this.line = new OpenLayers.Feature.Vector(
             new OpenLayers.Geometry.LinearRing([this.point.geometry])
         );
-        this.polygon = new OpenLayers.Feature.Vector(
-            new OpenLayers.Geometry.Polygon([this.line.geometry])
-        );
+        
+        // check for hole digitizing
+        var polygon;
+        if (this.holeModifier && (this.evt[this.holeModifier])) {
+            var geometry = this.point.geometry;
+            var features = this.control.layer.features;
+            var candidate;
+            // look for intersections, last drawn gets priority
+            for (var i=features.length-1; i>=0; --i) {
+                candidate = features[i].geometry;
+                if ((candidate instanceof OpenLayers.Geometry.Polygon || 
+                    candidate instanceof OpenLayers.Geometry.MultiPolygon) && 
+                    candidate.intersects(geometry)) {
+                    polygon = features[i];
+                    this.control.layer.removeFeatures([polygon], {silent: true});
+                    this.control.layer.events.registerPriority(
+                        "sketchcomplete", this, this.finalizeInteriorRing
+                    );
+                    this.control.layer.events.registerPriority(
+                        "sketchmodified", this, this.enforceTopology
+                    );
+                    polygon.geometry.addComponent(this.line.geometry);
+                    this.polygon = polygon;
+                    this.drawingHole = true;
+                    break;
+                }
+            }
+        }
+        if (!polygon) {
+            this.polygon = new OpenLayers.Feature.Vector(
+                new OpenLayers.Geometry.Polygon([this.line.geometry])
+            );
+        }
+        
         this.callback("create", [this.point.geometry, this.getSketch()]);
         this.point.geometry.clearBounds();
         this.layer.addFeatures([this.polygon, this.point], {silent: true});
     },
+    
+    /**
+     * Method: enforceTopology
+     * Simple topology enforcement for drawing interior rings.  Ensures vertices
+     *     of interior rings are contained by exterior ring.  Other topology 
+     *     rules are enforced in <finalizeInteriorRing> to allow drawing of 
+     *     rings that intersect only during the sketch (e.g. a "C" shaped ring
+     *     that nearly encloses another ring).
+     */
+    enforceTopology: function(event) {
+        var point = event.vertex;
+        var components = this.line.geometry.components;
+        // ensure that vertices of interior ring are contained by exterior ring
+        if (!this.polygon.geometry.intersects(point)) {
+            var last = components[components.length-3];
+            point.x = last.x;
+            point.y = last.y;
+        }
+    },
+    
+    /**
+     * Method: finalizeInteriorRing
+     * Enforces that new ring has some area and doesn't contain vertices of any
+     *     other rings.
+     */
+    finalizeInteriorRing: function() {
+        var ring = this.line.geometry;
+        // ensure that ring has some area
+        var modified = (ring.getArea() !== 0);
+        if (modified) {
+            // ensure that new ring doesn't intersect any other rings
+            var rings = this.polygon.geometry.components;
+            for (var i=rings.length-2; i>=0; --i) {
+                if (ring.intersects(rings[i])) {
+                    modified = false;
+                    break;
+                }
+            }
+            if (modified) {
+                // ensure that new ring doesn't contain any other rings
+                var target;
+                outer: for (var i=rings.length-2; i>0; --i) {
+                    var points = rings[i].components;
+                    for (var j=0, jj=points.length; j<jj; ++j) {
+                        if (ring.containsPoint(points[j])) {
+                            modified = false;
+                            break outer;
+                        }
+                    }
+                }
+            }
+        }
+        if (modified) {
+            if (this.polygon.state !== OpenLayers.State.INSERT) {
+                this.polygon.state = OpenLayers.State.UPDATE;
+            }
+        } else {
+            this.polygon.geometry.removeComponent(ring);
+        }
+        this.restoreFeature();
+        return false;
+    },
 
     /**
+     * APIMethod: cancel
+     * Finish the geometry and call the "cancel" callback.
+     */
+    cancel: function() {
+        if (this.drawingHole) {
+            this.polygon.geometry.removeComponent(this.line.geometry);
+            this.restoreFeature(true);
+        }
+        return OpenLayers.Handler.Path.prototype.cancel.apply(this, arguments);
+    },
+    
+    /**
+     * Method: restoreFeature
+     * Move the feature from the sketch layer to the target layer.
+     *
+     * Properties: 
+     * cancel - {Boolean} Cancel drawing.  If falsey, the "sketchcomplete" event
+     *     will be fired.
+     */
+    restoreFeature: function(cancel) {
+        this.control.layer.events.unregister(
+            "sketchcomplete", this, this.finalizeInteriorRing
+        );
+        this.control.layer.events.unregister(
+            "sketchmodified", this, this.enforceTopology
+        );
+        this.layer.removeFeatures([this.polygon], {silent: true});
+        this.control.layer.addFeatures([this.polygon], {silent: true});
+        this.drawingHole = false;
+        if (!cancel) {
+            // Re-trigger "sketchcomplete" so other listeners can do their
+            // business.  While this is somewhat sloppy (if a listener is 
+            // registered with registerPriority - not common - between the start
+            // and end of a single ring drawing - very uncommon - it will be 
+            // called twice).
+            // TODO: In 3.0, collapse sketch handlers into geometry specific
+            // drawing controls.
+            this.control.layer.events.triggerEvent(
+                "sketchcomplete", {feature : this.polygon}
+            );
+        }
+    },
+
+    /**
      * Method: destroyFeature
      * Destroy temporary geometries
      */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/RegularPolygon.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/RegularPolygon.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler/RegularPolygon.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Handler.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Icon.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Icon.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Icon.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,8 +1,8 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
-
 /**
  * Class: OpenLayers.Icon
  * 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ar.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ar.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ar.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Meno25
  *  - Mutarjem horr
@@ -39,4 +35,4 @@
 
     'S': "ج"
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/be-tarask.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/be-tarask.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/be-tarask.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - EugeneZelenko
  *  - Jim-by
@@ -81,4 +77,4 @@
 
     'filterEvaluateNotImplemented': "evaluate не рэалізаваны для гэтага тыпу фільтру."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/bg.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/bg.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/bg.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - DCLXVI
  */
@@ -30,4 +26,4 @@
 
     'methodDeprecated': "Този метод е остарял и ще бъде премахват в 3.0. Вместо него използвайте ${newMethod}."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/br.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/br.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/br.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Fulup
  */
@@ -80,4 +76,4 @@
 
     'filterEvaluateNotImplemented': "N\'eo ket bet emplementet ar priziañ evit seurt siloù c\'hoazh."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ca.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ca.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ca.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /**
  * @requires OpenLayers/Lang.js
  */
@@ -31,23 +27,23 @@
 
     'noFID': "No es pot actualitzar un element per al que no existeix FID.",
 
-    'errorLoadingGML': "Error caregant el fitxer GML ${url}",
+    'errorLoadingGML': "Error carregant el fitxer GML ${url}",
 
     'browserNotSupported':
-        "El seu navegador no suporta renderització vectorial. Els renderitzadors suportats actualmente són:\n${renderers}",
+        "El seu navegador no suporta renderització vectorial. Els renderitzadors suportats actualment són:\n${renderers}",
 
     'componentShouldBe': "addFeatures : el component ha de ser de tipus ${geomType}",
 
     // console message
     'getFeatureError':
-        "getFeatureFromEvent ha estat cridat a una capa sense renderizador. Això normalment vol dir que " +
+        "getFeatureFromEvent ha estat cridat des d'una capa sense renderizador. Això normalment vol dir que " +
         "s'ha eliminat una capa, però no el handler associat a ella.",
 
     // console message
     'minZoomLevelError':
         "La propietat minZoomLevel s'ha d'utilitzar només " +
         "amb les capes que tenen FixedZoomLevels. El fet que " +
-        "una capa wfs comprovi minZoomLevel és una reliquia del " +
+        "una capa wfs comprovi minZoomLevel és una relíquia del " +
         "passat. No podem, però, eliminar-la sense trencar " +
         "les aplicacions d'OpenLayers que en puguin dependre. " +
         "Així doncs estem fent-la obsoleta -- la comprovació " +
@@ -61,7 +57,7 @@
 
     'googleWarning':
         "La capa Google no s'ha pogut carregar correctament.<br><br>" +
-        "Per evitar aquest missatge, sel·leccioneu una nova Capa Base " +
+        "Per evitar aquest missatge, seleccioneu una nova Capa Base " +
         "al gestor de capes de la cantonada superior dreta.<br><br>" +
         "Probablement això és degut a que l'script de la biblioteca de " +
     "Google Maps no ha estat inclòs a la vostra pàgina, o no " +
@@ -71,7 +67,7 @@
         "target='_blank'>féu clic aquí</a>",
 
     'getLayerWarning':
-        "Per evitar aquest missatge, sel·leccioneu una nova Capa Base " +
+        "Per evitar aquest missatge, seleccioneu una nova Capa Base " +
         "al gestor de capes de la cantonada superior dreta.<br><br>" +
         "Probablement això és degut a que l'script de la biblioteca " +
         "${layerLib} " +
@@ -82,22 +78,29 @@
 
     'scale': "Escala = 1 : ${scaleDenom}",
 
+    //labels for the graticule control
+    'W': 'O',
+    'E': 'E',
+    'N': 'N',
+    'S': 'S',
+    'graticule': 'Retícula',    
+        
     // console message
     'layerAlreadyAdded':
-        "Heu intentat afegir la capa: ${layerName} al mapa, pero ja ha estat afegida anteriorment",
+        "Heu intentat afegir la capa: ${layerName} al mapa, però ja ha estat afegida anteriorment",
 
     // console message
     'reprojectDeprecated':
         "Esteu fent servir l'opció 'reproject' a la capa " +
         "${layerName}. Aquesta opció és obsoleta: el seu ús fou concebut " +
         "per suportar la visualització de dades sobre mapes base comercials, " + 
-        "però aquesta funcionalitat s'hauria d'assolir ara mitjançant el suport " +
+        "però ara aquesta funcionalitat s'hauria d'assolir mitjançant el suport " +
         "de la projecció Spherical Mercator. Més informació disponible a " +
         "http://trac.openlayers.org/wiki/SphericalMercator.",
 
     // console message
     'methodDeprecated':
-        "Aquest mètode és obsolet i s'eliminará a la versió 3.0. " +
+        "Aquest mètode és obsolet i s'eliminarà a la versió 3.0. " +
         "Si us plau feu servir em mètode alternatiu ${newMethod}.",
 
     // console message
@@ -119,6 +122,7 @@
     // console message
     'filterEvaluateNotImplemented': "evaluate no està implementat per aquest tipus de filtre.",
 
+    // **** end ****
     'end': ''
 
 };

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/cs-CZ.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/cs-CZ.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/cs-CZ.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Mormegil
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/da-DK.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/da-DK.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/da-DK.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /**
  * @requires OpenLayers/Lang.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/de.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/de.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/de.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Grille chompa
  *  - Nikiwaibel
@@ -82,4 +78,4 @@
 
     'filterEvaluateNotImplemented': "„evaluate“ ist für diesen Filter-Typ nicht implementiert."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/el.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/el.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/el.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Omnipaedista
  */
@@ -20,4 +16,4 @@
 
     'scale': "Κλίμακα ~ 1 : ${scaleDenom}"
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/en-CA.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/en-CA.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/en-CA.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /**
  * @requires OpenLayers/Lang/en.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/en.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/en.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/en.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /**
  * @requires OpenLayers/Lang.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/es.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/es.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/es.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /**
  * @requires OpenLayers/Lang.js
  */
@@ -23,7 +19,7 @@
     'baseLayer': "Capa Base",
 
     'sameProjection':
-        "El mini mapa sólo funciona si está en la misma proyección que el mapa principal",
+        "El mapa de vista general sólo funciona si está en la misma proyección que el mapa principal",
 
     'readNotImplemented': "Lectura no implementada.",
 
@@ -40,14 +36,14 @@
 
     // console message
     'getFeatureError':
-        "getFeatureFromEvent llamado en una capa sin renderizador. Esto normalmente quiere decir que " +
+        "getFeatureFromEvent se ha llamado desde una capa sin renderizador. Esto normalmente quiere decir que " +
         "se ha destruido una capa, pero no el manejador asociado a ella.",
 
     // console message
     'minZoomLevelError':
         "La propiedad minZoomLevel debe sólo utilizarse " +
         "con las capas que tienen FixedZoomLevels. El hecho de que " +
-        "una capa wfs compruebe minZoomLevel is una reliquia del " +
+        "una capa wfs compruebe minZoomLevel es una reliquia del " +
         "pasado. Sin embargo, no podemos eliminarla sin discontinuar " +
         "probablemente las aplicaciones OL que puedan depender de ello. " +
         "Así pues estamos haciéndolo obsoleto --la comprobación " +
@@ -83,6 +79,13 @@
 
     'scale': "Escala = 1 : ${scaleDenom}",
 
+    //labels for the graticule control
+    'W': 'O',
+    'E': 'E',
+    'N': 'N',
+    'S': 'S',
+    'graticule': 'Retícula',
+    
     // console message
     'layerAlreadyAdded':
         "Intentó añadir la capa: ${layerName} al mapa, pero ya había sido añadida previamente",
@@ -90,15 +93,15 @@
     // console message
     'reprojectDeprecated':
         "Está usando la opción 'reproject' en la capa " +
-        "${layerName}. Esta opción está obsoleta: su uso fue diseñado " +
+        "${layerName}. Esta opción es obsoleta: su uso fue diseñado " +
         "para soportar la visualización de datos sobre mapas base comerciales, " + 
-        "pero esa funcionalidad debería conseguirse ahora mediante el soporte " +
+        "pero ahora esa funcionalidad debería conseguirse mediante el soporte " +
         "de la proyección Spherical Mercator. Más información disponible en " +
         "http://trac.openlayers.org/wiki/SphericalMercator.",
 
     // console message
     'methodDeprecated':
-        "Este método está obsoleto y se eliminará en la versión 3.0. " +
+        "Este método es obsoleto y se eliminará en la versión 3.0. " +
         "Por favor utilice el método ${newMethod} en su lugar.",
 
     // console message
@@ -120,6 +123,7 @@
     // console message
     'filterEvaluateNotImplemented': "evaluate no está implementado para este tipo de filtro.",
 
+    // **** end ****
     'end': ''
 
 };

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fi.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fi.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fi.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Nike
  *  - Str4nd
@@ -35,4 +31,4 @@
 
     'S': "E"
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fr.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fr.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fr.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Damouns
  *  - IAlex
@@ -81,4 +77,4 @@
 
     'filterEvaluateNotImplemented': "évaluer n\'a pas encore été implémenté pour ce type de filtre."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fur.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fur.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/fur.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Klenje
  */
@@ -36,4 +32,4 @@
 
     'S': "S"
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/gl.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/gl.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/gl.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Toliño
  */
@@ -80,4 +76,4 @@
 
     'filterEvaluateNotImplemented': "avaliar non está implementado para este tipo de filtro."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/gsw.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/gsw.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/gsw.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Als-Holder
  */
@@ -80,4 +76,4 @@
 
     'filterEvaluateNotImplemented': "evaluiere isch nit implemäntiert in däm Filtertyp."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hr.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hr.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hr.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Mvrban
  */
@@ -62,4 +58,4 @@
 
     'pagePositionFailed': "OpenLayers.Util.pagePosition nije uspjelo: element sa id ${elemId} može biti krivo smješten."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hsb.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hsb.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hsb.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Michawiki
  */
@@ -80,4 +76,4 @@
 
     'filterEvaluateNotImplemented': "wuhódnoćenje njeje za tutón filtrowy typ implementowany."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hu.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hu.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/hu.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - City-busz
  *  - Glanthor Reviol
@@ -81,4 +77,4 @@
 
     'filterEvaluateNotImplemented': "ennél a szűrőtípusnál kiértékelés nem hajtódik végre."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ia.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ia.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ia.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - McDutchie
  */
@@ -80,4 +76,4 @@
 
     'filterEvaluateNotImplemented': "\"evaluate\" non es implementate pro iste typo de filtro."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/id.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/id.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/id.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Irwangatot
  *  - IvanLanin
@@ -81,4 +77,4 @@
 
     'filterEvaluateNotImplemented': "evaluasi tidak tersedia untuk tipe filter ini."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/io.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/io.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/io.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Malafaya
  */
@@ -20,4 +16,4 @@
 
     'scale': "Skalo = 1 : ${scaleDenom}"
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/is.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/is.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/is.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Ævar Arnfjörð Bjarmason
  */
@@ -38,4 +34,4 @@
 
     'methodDeprecated': "Þetta fall hefur verið úrelt og verður fjarlægt í 3.0. Notaðu ${newMethod} í staðin."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/it.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/it.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/it.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /**
  * @requires OpenLayers/Lang.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ja.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ja.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ja.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Fryed-peach
  *  - Mage Whopper
@@ -81,4 +77,4 @@
 
     'filterEvaluateNotImplemented': "このフィルター型について evaluate は実装されていません。"
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/km.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/km.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/km.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - វ័ណថារិទ្ធ
  */
@@ -26,4 +22,4 @@
 
     'scale': "មាត្រដ្ឋាន = ១ ៖ ${scaleDenom}"
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ksh.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ksh.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ksh.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Purodha
  */
@@ -80,4 +76,4 @@
 
     'filterEvaluateNotImplemented': "„\x3ccode lang=\"en\"\x3eevaluate\x3c/code\x3e“ es för di Zoot Fellter nit enjereschdt."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nb.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nb.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nb.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /**
  * @requires OpenLayers/Lang.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nds.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nds.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nds.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Slomox
  */
@@ -62,4 +58,4 @@
 
     'pagePositionFailed': "OpenLayers.Util.pagePosition güng nich: Element mit de Id ${elemId} is villicht an’n verkehrten Platz."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nl.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nl.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nl.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Siebrand
  */
@@ -80,4 +76,4 @@
 
     'filterEvaluateNotImplemented': "evalueren is niet geïmplementeerd voor dit filtertype."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nn.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nn.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/nn.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Harald Khan
  */
@@ -28,4 +24,4 @@
 
     'pixelAddError': "Du er nøydd til å gje både ein x- og ein y-verdi til «add»-funksjonen."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/oc.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/oc.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/oc.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Cedric31
  */
@@ -80,4 +76,4 @@
 
     'filterEvaluateNotImplemented': "evaluar es pas encara estat implementat per aqueste tipe de filtre."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/pt-BR.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/pt-BR.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/pt-BR.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Luckas Blade
  *  - Rodrigo Avila
@@ -81,4 +77,4 @@
 
     'filterEvaluateNotImplemented': "evaluete não está implementado para este tipo de filtro."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/pt.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/pt.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/pt.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Hamilton Abreu
  *  - Malafaya
@@ -82,4 +78,4 @@
 
     'filterEvaluateNotImplemented': "avaliar não está implementado para este tipo de filtro."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ru.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ru.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/ru.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Ferrer
  *  - Komzpa
@@ -83,4 +79,4 @@
 
     'filterEvaluateNotImplemented': "evaluate не реализовано для фильтра данного типа."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/sk.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/sk.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/sk.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Helix84
  */
@@ -72,4 +68,4 @@
 
     'filterEvaluateNotImplemented': "evaluate nie je implementovaný pre tento typ filtra"
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/sv-SE.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/sv-SE.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/sv-SE.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Sannab
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/te.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/te.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/te.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Veeven
  */
@@ -28,4 +24,4 @@
 
     'S': "ద"
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/vi.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/vi.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/vi.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /* Translators (2009 onwards):
  *  - Minh Nguyen
  */
@@ -80,4 +76,4 @@
 
     'filterEvaluateNotImplemented': "chưa hỗ trợ evaluate cho loại bộ lọc này."
 
-});
\ No newline at end of file
+});

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/zh-CN.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/zh-CN.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/zh-CN.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /**
  * @requires OpenLayers/Lang.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/zh-TW.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/zh-TW.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang/zh-TW.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,3 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
 /**
  * @requires OpenLayers/Lang.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Lang.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -57,7 +58,7 @@
     setCode: function(code) {
         var lang;
         if(!code) {
-            code = (OpenLayers.Util.getBrowserName() == "msie") ?
+            code = (OpenLayers.BROWSER_NAME == "msie") ?
                 navigator.userLanguage : navigator.language;
         }
         var parts = code.split('-');
@@ -100,7 +101,7 @@
      */
     translate: function(key, context) {
         var dictionary = OpenLayers.Lang[OpenLayers.Lang.getCode()];
-        var message = dictionary[key];
+        var message = dictionary && dictionary[key];
         if(!message) {
             // Message not found, fall back to message key
             message = key;

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/ArcGIS93Rest.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/ArcGIS93Rest.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/ArcGIS93Rest.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2008 Avencia, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/ArcIMS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/ArcIMS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/ArcIMS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2008 MetaCarta, Inc., published under the Clear BSD 
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the 
- * full text of the license. */ 
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Layer/Grid.js

Copied: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Bing.js (from rev 10991, trunk/openlayers/lib/OpenLayers/Layer/Bing.js)
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Bing.js	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Bing.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,312 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
+/**
+ * @requires OpenLayers/Layer/XYZ.js
+ */
+
+/** 
+ * Class: OpenLayers.Layer.Bing
+ * Bing layer using direct tile access as provided by Bing Maps REST Services.
+ * See http://msdn.microsoft.com/en-us/library/ff701713.aspx for more
+ * information.
+ * 
+ * Inherits from:
+ *  - <OpenLayers.Layer.XYZ>
+ */
+OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
+
+    /**
+     * Constant: RESOLUTIONS
+     */
+    RESOLUTIONS: [
+        78271.517,
+        39135.7585,
+        19567.87925,
+        9783.939625,
+        4891.9698125,
+        2445.98490625,
+        1222.992453125,
+        611.4962265625,
+        305.74811328125,
+        152.874056640625,
+        76.4370283203125,
+        38.21851416015625,
+        19.109257080078127,
+        9.554628540039063,
+        4.777314270019532,
+        2.388657135009766,
+        1.194328567504883,
+        0.5971642837524415,
+        0.29858214187622073,
+        0.14929107093811037,
+        0.07464553546905518,
+        0.03732276773452759,
+        0.018661383867263796
+    ],
+
+    /**
+     * Property: attributionTemplate
+     * {String}
+     */
+    attributionTemplate: '<span class="olBingAttribution ${type}">' +
+         '<div><a target="_blank" href="http://www.bing.com/maps/">' +
+         '<img src="${logo}"></img></div></a>${copyrights}' +
+         '<a style="white-space: nowrap" target="_blank" '+
+         'href="http://www.microsoft.com/maps/product/terms.html">' +
+         'Terms of Use</a></span>',
+
+    /**
+     * Property: sphericalMercator
+     * {Boolean} always true for this layer type
+     */
+    sphericalMercator: true,
+    
+    /**
+     * Property: metadata
+     * {Object} Metadata for this layer, as returned by the callback script
+     */
+    metadata: null,
+    
+    /**
+     * APIProperty: type
+     * {String} The layer identifier.  Any non-birdseye imageryType
+     *     from http://msdn.microsoft.com/en-us/library/ff701716.aspx can be
+     *     used.  Default is "Road".
+     */
+    type: "Road",
+
+    /**
+     * Constant: EVENT_TYPES
+     * {Array(String)} Supported application event types.  Register a listener
+     *     for a particular event with the following syntax:
+     * (code)
+     * layer.events.register(type, obj, listener);
+     * (end)
+     *
+     * Listeners will be called with a reference to an event object.  The
+     *     properties of this event depends on exactly what happened.
+     *
+     * All event objects have at least the following properties:
+     * object - {Object} A reference to layer.events.object.
+     * element - {DOMElement} A reference to layer.events.element.
+     *
+     * Supported map event types (in addition to those from <OpenLayers.Layer>):
+     * added - Triggered after the layer is added to a map.  Listeners
+     *      will receive an object with a *map* property referencing the
+     *      map and a *layer* property referencing the layer.
+     */
+    EVENT_TYPES: ["added"],
+
+    /**
+     * Constructor: OpenLayers.Layer.Bing
+     * Create a new Bing layer.
+     *
+     * Example:
+     * (code)
+     * var road = new OpenLayers.Layer.Bing({
+     *     name: "My Bing Aerial Layer",
+     *     type: "Aerial",
+     *     key: "my-api-key-here",
+     * });
+     * (end)
+     *
+     * Parameters:
+     * config - {Object} Configuration properties for the layer.
+     *
+     * Required configuration properties:
+     * key - {String} Bing Maps API key for your application. Get one at
+     *     http://bingmapsportal.com/.
+     * type - {String} The layer identifier.  Any non-birdseye imageryType
+     *     from http://msdn.microsoft.com/en-us/library/ff701716.aspx can be
+     *     used.
+     *
+     * Any other documented layer properties can be provided in the config object.
+     */
+    initialize: function(options) {
+        // concatenate events specific to vector with those from the base
+        this.EVENT_TYPES =
+            OpenLayers.Layer.Bing.prototype.EVENT_TYPES.concat(
+            OpenLayers.Layer.prototype.EVENT_TYPES
+        );
+        var name = options.name || "Bing " + (options.type || this.type);
+        var newArgs = [name, null, options];
+        OpenLayers.Layer.XYZ.prototype.initialize.apply(this, newArgs);
+        this.loadMetadata(this.type); 
+    },
+
+    /**
+     * Method: loadMetadata
+     *
+     * Parameters:
+     * imageryType - {String}
+     */
+    loadMetadata: function(imageryType) {
+        this._callbackId = "_callback_" + this.id.replace(/\./g, "_");
+        // link the processMetadata method to the global scope and bind it
+        // to this instance
+        window[this._callbackId] = OpenLayers.Function.bind(
+            OpenLayers.Layer.Bing.processMetadata, this
+        );
+        var url = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/" +
+            imageryType + "?key=" + this.key + "&jsonp=" + this._callbackId +
+            "&include=ImageryProviders";
+        var script = document.createElement("script");
+        script.type = "text/javascript";
+        script.src = url;
+        script.id = this._callbackId;
+        document.getElementsByTagName("head")[0].appendChild(script);
+    },
+    
+    /**
+     * Method: initLayer
+     *
+     * Sets layer properties according to the metadata provided by the API
+     */
+    initLayer: function() {
+        var res = this.metadata.resourceSets[0].resources[0];
+        var url = res.imageUrl.replace("{quadkey}", "${quadkey}");
+        this.url = [];
+        for (var i=0; i<res.imageUrlSubdomains.length; ++i) {
+            this.url.push(url.replace("{subdomain}", res.imageUrlSubdomains[i]));
+        };
+        
+        this.addOptions({
+            resolutions: this.RESOLUTIONS.slice(res.zoomMin-1, res.zoomMax-1),
+            zoomOffset: res.zoomMin
+        });
+        if (this.map) {
+            this.redraw();
+            this.updateAttribution();
+        }
+    },
+
+    /**
+     * Method: getURL
+     *
+     * Paramters:
+     * bounds - {<OpenLayers.Bounds>}
+     */
+    getURL: function(bounds) {
+        if (!this.url) {
+            return OpenLayers.Util.getImagesLocation() + "blank.gif";
+        }
+        var xyz = this.getXYZ(bounds), x = xyz.x, y = xyz.y, z = xyz.z;
+        var quadDigits = [];
+        for (var i = z; i > 0; --i) {
+            var digit = '0';
+            var mask = 1 << (i - 1);
+            if ((x & mask) != 0) {
+                digit++;
+            }
+            if ((y & mask) != 0) {
+                digit++;
+                digit++;
+            }
+            quadDigits.push(digit);
+        }
+        var quadKey = quadDigits.join("");
+        var url = this.selectUrl('' + x + y + z, this.url);
+
+        return OpenLayers.String.format(url, {'quadkey': quadKey});
+    },
+    
+    /**
+     * Method: updateAttribution
+     * Updates the attribution according to the requirements outlined in
+     * http://gis.638310.n2.nabble.com/Bing-imagery-td5789168.html
+     */
+    updateAttribution: function() {
+        var metadata = this.metadata;
+        if (!metadata || !this.map) {
+            return;
+        }
+        var res = metadata.resourceSets[0].resources[0];
+        var extent = this.map.getExtent().transform(
+            this.map.getProjectionObject(),
+            new OpenLayers.Projection("EPSG:4326")
+        );
+        var providers = res.imageryProviders, zoom = this.map.getZoom() + 1,
+            copyrights = "", provider, i, ii, j, jj, bbox, coverage;
+        for (i=0,ii=providers.length; i<ii; ++i) {
+            provider = providers[i];
+            for (j=0,jj=provider.coverageAreas.length; j<jj; ++j) {
+                coverage = provider.coverageAreas[j];
+                bbox = OpenLayers.Bounds.fromArray(coverage.bbox);
+                if (extent.intersectsBounds(bbox) &&
+                        zoom <= coverage.zoomMax && zoom >= coverage.zoomMin) {
+                    copyrights += provider.attribution + " ";
+                }
+            }
+        }
+        this.attribution = OpenLayers.String.format(this.attributionTemplate, {
+            type: this.type.toLowerCase(),
+            logo: metadata.brandLogoUri,
+            copyrights: copyrights
+        });
+        this.map && this.map.events.triggerEvent("changelayer", {layer: this});
+    },
+    
+    /**
+     * Method: setMap
+     */
+    setMap: function() {
+        OpenLayers.Layer.XYZ.prototype.setMap.apply(this, arguments);
+        if (this.map.getCenter()) {
+            this.updateAttribution();
+        }
+        this.map.events.register("moveend", this, this.updateAttribution);
+        // TODO: move this event to Layer
+        // http://trac.osgeo.org/openlayers/ticket/2983
+        this.events.triggerEvent("added", {map: this.map, layer: this});
+    },
+    
+    /**
+     * APIMethod: clone
+     * 
+     * Parameters:
+     * obj - {Object}
+     * 
+     * Returns:
+     * {<OpenLayers.Layer.Bing>} An exact clone of this <OpenLayers.Layer.Bing>
+     */
+    clone: function(obj) {
+        if (obj == null) {
+            obj = new OpenLayers.Layer.Bing(this.options);
+        }
+        //get all additions from superclasses
+        obj = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [obj]);
+        // copy/set any non-init, non-simple values here
+        return obj;
+    },
+    
+    /**
+     * Method: destroy
+     */
+    destroy: function() {
+        this.map &&
+            this.map.events.unregister("moveend", this, this.updateAttribution);
+        OpenLayers.Layer.XYZ.prototype.destroy.apply(this, arguments);
+    },
+    
+    CLASS_NAME: "OpenLayers.Layer.Bing"
+});
+
+/**
+ * Function: OpenLayers.Layer.Bing.processMetadata
+ * This function will be bound to an instance, linked to the global scope with
+ * an id, and called by the JSONP script returned by the API.
+ *
+ * Parameters:
+ * metadata - {Object} metadata as returned by the API
+ */
+OpenLayers.Layer.Bing.processMetadata = function(metadata) {
+    this.metadata = metadata;
+    this.initLayer();
+    var script = document.getElementById(this._callbackId);
+    script.parentNode.removeChild(script);
+    window[this._callbackId] = undefined; // cannot delete from window in IE
+    delete this._callbackId;
+};

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Boxes.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Boxes.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Boxes.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/EventPane.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/EventPane.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/EventPane.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -101,7 +102,7 @@
         this.pane.style.display = this.div.style.display;
         this.pane.style.width="100%";
         this.pane.style.height="100%";
-        if (OpenLayers.Util.getBrowserName() == "msie") {
+        if (OpenLayers.BROWSER_NAME == "msie") {
             this.pane.style.background = 
                 "url(" + OpenLayers.Util.getImagesLocation() + "blank.gif)";
         }

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/FixedZoomLevels.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/FixedZoomLevels.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/FixedZoomLevels.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/GML.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/GML.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/GML.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,11 +1,13 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Layer/Vector.js
  * @requires OpenLayers/Request/XMLHttpRequest.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/GeoRSS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/GeoRSS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/GeoRSS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Google/v3.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Google/v3.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Google/v3.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -89,7 +90,8 @@
                 keyboardShortcuts: false,
                 draggable: false,
                 disableDoubleClickZoom: true,
-                scrollwheel: false
+                scrollwheel: false,
+                streetViewControl: false
             });
             
             // cache elements for use by any other google layers added to

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Google.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Google.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Google.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -7,6 +8,7 @@
  * @requires OpenLayers/Layer/SphericalMercator.js
  * @requires OpenLayers/Layer/EventPane.js
  * @requires OpenLayers/Layer/FixedZoomLevels.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Grid.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Grid.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Grid.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -24,6 +25,12 @@
      */
     tileSize: null,
     
+    /** APIProperty: tileOptions
+     *  {Object} optional configuration options for <OpenLayers.Tile> instances
+     *  created by this Layer, if supported by the tile class.
+     */
+    tileOptions: null,
+    
     /**
      * Property: grid
      * {Array(Array(<OpenLayers.Tile>))} This is an array of rows, each row is 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/HTTPRequest.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/HTTPRequest.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/HTTPRequest.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Image.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Image.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Image.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
  
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/KaMap.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/KaMap.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/KaMap.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/KaMapCache.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/KaMapCache.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/KaMapCache.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapGuide.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapGuide.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapGuide.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * licence.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapServer/Untiled.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapServer/Untiled.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapServer/Untiled.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright 2006-2008 MetaCarta, Inc., published under the Clear BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full text
- * of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
  
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapServer.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapServer.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MapServer.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Markers.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Markers.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Markers.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MultiMap.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MultiMap.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/MultiMap.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,10 +1,12 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Layer/EventPane.js
  * @requires OpenLayers/Layer/FixedZoomLevels.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/PointTrack.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/PointTrack.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/PointTrack.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/SphericalMercator.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/SphericalMercator.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/SphericalMercator.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Layer.js
  * @requires OpenLayers/Projection.js
@@ -181,11 +186,32 @@
 };
 
 /**
- * Note: Two transforms declared
- * Transforms from EPSG:4326 to EPSG:900913 and from EPSG:900913 to EPSG:4326
- *     are set by this class.
+ * Note: Transforms for web mercator <-> EPSG:4326
+ * OpenLayers recognizes EPSG:3857, EPSG:900913, EPSG:102113 and EPSG:102100.
+ * OpenLayers originally started referring to EPSG:900913 as web mercator.
+ * The EPSG has declared EPSG:3857 to be web mercator.  
+ * ArcGIS 10 recognizes the EPSG:3857, EPSG:102113, and EPSG:102100 as 
+ * equivalent.  See http://blogs.esri.com/Dev/blogs/arcgisserver/archive/2009/11/20/ArcGIS-Online-moving-to-Google-_2F00_-Bing-tiling-scheme_3A00_-What-does-this-mean-for-you_3F00_.aspx#12084
  */
-OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:900913",
-    OpenLayers.Layer.SphericalMercator.projectForward);
-OpenLayers.Projection.addTransform("EPSG:900913", "EPSG:4326",
-    OpenLayers.Layer.SphericalMercator.projectInverse);
+(function() {
+    
+    // list of equivalent codes for web mercator
+    var codes = ["EPSG:900913", "EPSG:3857", "EPSG:102113", "EPSG:102100"];
+    
+    var add = OpenLayers.Projection.addTransform;
+    var merc = OpenLayers.Layer.SphericalMercator;
+    var same = OpenLayers.Projection.nullTransform;
+    
+    var i, len, code, other, j;
+    for (i=0, len=codes.length; i<len; ++i) {
+        code = codes[i];
+        add("EPSG:4326", code, merc.projectForward);
+        add(code, "EPSG:4326", merc.projectInverse);
+        for (j=i+1; j<len; ++j) {
+            other = codes[j];
+            add(code, other, same);
+            add(other, code, same);
+        }
+    }
+    
+})();

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/TMS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/TMS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/TMS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * licence.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Text.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Text.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Text.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/TileCache.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/TileCache.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/TileCache.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,10 +1,12 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * licence.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
 /**
  * @requires OpenLayers/Layer/Grid.js
+ * @requires OpenLayers/Tile/Image.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Vector/RootContainer.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Vector/RootContainer.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Vector/RootContainer.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Vector.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Vector.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Vector.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -8,6 +9,7 @@
  * @requires OpenLayers/StyleMap.js
  * @requires OpenLayers/Feature/Vector.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -63,6 +65,10 @@
      * featuresremoved - Triggered after features are removed. The event
      *      object passed to listeners will have a *features* property with a
      *      reference to an array of removed features.
+     * beforefeatureselected - Triggered after a feature is selected.  Listeners
+     *      will receive an object with a *feature* property referencing the
+     *      feature to be selected. To stop the feature from being selectd, a
+     *      listener should return false.
      * featureselected - Triggered after a feature is selected.  Listeners
      *      will receive an object with a *feature* property referencing the
      *      selected feature.
@@ -122,12 +128,6 @@
     isFixed: false,
 
     /** 
-     * APIProperty: isVector
-     * {Boolean} Whether the layer is a vector layer.
-     */
-    isVector: true,
-    
-    /** 
      * APIProperty: features
      * {Array(<OpenLayers.Feature.Vector>)} 
      */
@@ -474,21 +474,21 @@
 
             if (!dragging) {
                 this.renderer.root.style.visibility = "hidden";
-
+            
                 this.div.style.left = -parseInt(this.map.layerContainerDiv.style.left) + "px";
                 this.div.style.top = -parseInt(this.map.layerContainerDiv.style.top) + "px";
                 var extent = this.map.getExtent();
                 coordSysUnchanged = this.renderer.setExtent(extent, zoomChanged);
-
+            
                 this.renderer.root.style.visibility = "visible";
 
                 // Force a reflow on gecko based browsers to prevent jump/flicker.
                 // This seems to happen on only certain configurations; it was originally
                 // noticed in FF 2.0 and Linux.
-                if (navigator.userAgent.toLowerCase().indexOf("gecko") != -1) {
+                if (OpenLayers.IS_GECKO === true) {
                     this.div.scrollLeft = this.div.scrollLeft;
                 }
-
+            
                 if(!zoomChanged && coordSysUnchanged) {
                     for(var i in this.unrenderedFeatures) {
                         var feature = this.unrenderedFeatures[i];
@@ -895,6 +895,36 @@
     getFeatureByFid: function(featureFid) {
         return this.getFeatureBy('fid', featureFid);
     },
+    
+    /**
+     * APIMethod: getFeaturesByAttribute
+     * Returns an array of features that have the given attribute key set to the
+     * given value. Comparison of attribute values takes care of datatypes, e.g.
+     * the string '1234' is not equal to the number 1234.
+     *
+     * Parameters:
+     * attrName - {String}
+     * attrValue - {Mixed}
+     *
+     * Returns:
+     * Array(<OpenLayers.Feature.Vector>) An array of features that have the 
+     * passed named attribute set to the given value.
+     */
+    getFeaturesByAttribute: function(attrName, attrValue) {
+        var i,
+            feature,    
+            len = this.features.length,
+            foundFeatures = [];
+        for(i = 0; i < len; i++) {            
+            feature = this.features[i];
+            if(feature && feature.attributes) {
+                if (feature.attributes[attrName] === attrValue) {
+                    foundFeatures.push(feature);
+                }
+            }
+        }
+        return foundFeatures;
+    },
 
     /**
      * Unselect the selected features

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/VirtualEarth.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/VirtualEarth.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/VirtualEarth.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -7,6 +8,7 @@
  * @requires OpenLayers/Layer/SphericalMercator.js
  * @requires OpenLayers/Layer/EventPane.js
  * @requires OpenLayers/Layer/FixedZoomLevels.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WFS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WFS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WFS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -8,6 +9,7 @@
  * @requires OpenLayers/Layer/Vector.js
  * @requires OpenLayers/Layer/Markers.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS/Post.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS/Post.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS/Post.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
  
@@ -14,18 +15,16 @@
  * Web Mapping Services via HTTP-POST (application/x-www-form-urlencoded). 
  * Create a new WMS layer with the <OpenLayers.Layer.WMS.Post> constructor.
  *
+ * *Deprecated*. Instead of this layer, use <OpenLayers.Layer.WMS> with
+ * <OpenLayers.Tile.Image.maxGetUrlLength> configured in the layer's
+ * <OpenLayers.Layer.WMS.tileOptions>.
+ *
  * Inherits from:
  *  - <OpenLayers.Layer.WMS>
  */
 OpenLayers.Layer.WMS.Post = OpenLayers.Class(OpenLayers.Layer.WMS, {
 
     /**
-     * Property: tileClass
-     * {Object} Class, used to create tiles.
-     */
-    tileClass: null,
-
-    /**
      * APIProperty: unsupportedBrowsers
      * {Array} Array with browsers, which should use the HTTP-GET protocol 
      * instead of HTTP-POST for fetching tiles from a WMS .
@@ -34,7 +33,7 @@
      * effects of viewport-shaking when panning the map. Both browsers, Opera
      * and Firefox/Mozilla, have no problem with long urls, which is the reason
      * for using POST instead of GET. The strings to pass to this array are
-     * the ones returned by <OpenLayers.Util.getBrowserName()>.
+     * the ones returned by <OpenLayers.BROWSER_NAME>.
      */
     unsupportedBrowsers: ["mozilla", "firefox", "opera"],
 
@@ -45,6 +44,12 @@
      * possible to modify the initialized tiles (iframes)
      */
     SUPPORTED_TRANSITIONS: [],
+    
+    /**
+     * Property: usePost
+     * {Boolean}
+     */
+    usePost: null,
 
     /**
      * Constructor: OpenLayers.Layer.WMS.Post
@@ -71,10 +76,8 @@
         newArguments.push(name, url, params, options);
         OpenLayers.Layer.WMS.prototype.initialize.apply(this, newArguments);
 
-        this.tileClass = OpenLayers.Util.indexOf(
-            this.unsupportedBrowsers, OpenLayers.Util.getBrowserName()) != -1
-                ? OpenLayers.Tile.Image
-                : OpenLayers.Tile.Image.IFrame;
+        this.usePost = OpenLayers.Util.indexOf(
+            this.unsupportedBrowsers, OpenLayers.BROWSER_NAME) == -1;
     },
     
     /**
@@ -90,8 +93,10 @@
      * {<OpenLayers.Tile.Image.IFrame>} The added OpenLayers.Tile.Image.IFrame
      */
     addTile: function(bounds,position) {
-        return new this.tileClass(
-            this, position, bounds, null, this.tileSize);
+        return new OpenLayers.Tile.Image(
+            this, position, bounds, null, this.tileSize, {
+                maxGetUrlLength: this.usePost ? 0 : null
+            });
     },
 
     CLASS_NAME: 'OpenLayers.Layer.WMS.Post'

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS/Untiled.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS/Untiled.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS/Untiled.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
  

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -214,7 +215,7 @@
      */
     addTile:function(bounds,position) {
         return new OpenLayers.Tile.Image(this, position, bounds, 
-                                         null, this.tileSize);
+                                         null, this.tileSize, this.tileOptions);
     },
 
     /**
@@ -251,7 +252,10 @@
      * {String} 
      */
     getFullRequestString:function(newParams, altUrl) {
-        var projectionCode = this.map.getProjection();
+        var mapProjection = this.map.getProjectionObject();
+        var projectionCode = this.projection.equals(mapProjection) ?
+            this.projection.getCode() :
+            mapProjection.getCode();
         var value = (projectionCode == "none") ? null : projectionCode
         if (parseFloat(this.params.VERSION) >= 1.3) {
             this.params.CRS = value;

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMTS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMTS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WMTS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WorldWind.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WorldWind.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/WorldWind.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/XYZ.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/XYZ.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/XYZ.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -39,11 +40,20 @@
      *     for a requested tile.  For example, if you supply a zoomOffset
      *     of 3, when the map is at the zoom 0, tiles will be requested from
      *     level 3 of your cache.  Default is 0 (assumes cache level and map
-     *     zoom are equivalent).
+     *     zoom are equivalent).  Using <zoomOffset> is an alternative to
+     *     setting <serverResolutions> if you only want to expose a subset
+     *     of the server resolutions.
      */
     zoomOffset: 0,
     
     /**
+     * APIProperty: serverResolutions
+     * {Array} A list of all resolutions available on the server.  Only set this
+     *     property if the map resolutions differs from the server.
+     */
+    serverResolutions: null,
+
+    /**
      * Constructor: OpenLayers.Layer.XYZ
      *
      * Parameters:
@@ -97,7 +107,7 @@
     },    
 
     /**
-     * Method: getUrl
+     * Method: getURL
      *
      * Parameters:
      * bounds - {<OpenLayers.Bounds>}
@@ -108,23 +118,37 @@
      *          parameters
      */
     getURL: function (bounds) {
+        var xyz = this.getXYZ(bounds);
+        var url = this.url;
+        if (url instanceof Array) {
+            var s = '' + xyz.x + xyz.y + xyz.z;
+            url = this.selectUrl(s, url);
+        }
+        
+        return OpenLayers.String.format(url, xyz);
+    },
+    
+    /**
+     * Method: getXYZ
+     * Calculates x, y and z for the given bounds.
+     *
+     * Parameters:
+     * bounds - {<OpenLayers.Bounds>}
+     *
+     * Returns:
+     * {Object} - an object with x, y and z properties.
+     */
+    getXYZ: function(bounds) {
         var res = this.map.getResolution();
         var x = Math.round((bounds.left - this.maxExtent.left) 
             / (res * this.tileSize.w));
         var y = Math.round((this.maxExtent.top - bounds.top) 
             / (res * this.tileSize.h));
-        var z = this.map.getZoom() + this.zoomOffset;
+        var z = this.serverResolutions != null ?
+            OpenLayers.Util.indexOf(this.serverResolutions, res) :
+            this.map.getZoom() + this.zoomOffset;
 
-        var url = this.url;
-        var s = '' + x + y + z;
-        if (url instanceof Array)
-        {
-            url = this.selectUrl(s, url);
-        }
-        
-        var path = OpenLayers.String.format(url, {'x': x, 'y': y, 'z': z});
-
-        return path;
+        return {'x': x, 'y': y, 'z': z};
     },
     
     /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Yahoo.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Yahoo.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Yahoo.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -7,6 +8,7 @@
  * @requires OpenLayers/Layer/SphericalMercator.js
  * @requires OpenLayers/Layer/EventPane.js
  * @requires OpenLayers/Layer/FixedZoomLevels.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Zoomify.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Zoomify.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer/Zoomify.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,8 @@
-/* Copyright (c) 2008 Klokan Petr Pridal, published under the Clear BSD
- * licence.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
+
 /*
  * Development supported by a R&D grant DC08P02OUK006 - Old Maps Online
  * (www.oldmapsonline.org) from Ministry of Culture of the Czech Republic.
@@ -217,7 +219,7 @@
      */
     getImageSize: function() {
         if (arguments.length > 0) {
-            bounds = this.adjustBounds(arguments[0]);
+            var bounds = this.adjustBounds(arguments[0]);
             var res = this.map.getResolution();
             var x = Math.round((bounds.left - this.tileOrigin.lon) / (res * this.tileSize.w));
             var y = Math.round((this.tileOrigin.lat - bounds.top) / (res * this.tileSize.h));

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Layer.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -703,7 +704,9 @@
 
     /** 
      * APIMethod: display
-     * Hide or show the Layer
+     * Hide or show the Layer. This is designed to be used internally, and 
+     *     is not generally the way to enable or disable the layer. For that,
+     *     use the setVisibility function instead..
      * 
      * Parameters:
      * display - {Boolean}
@@ -798,7 +801,7 @@
         // get resolution data from layer config
         // (we also set alwaysInRange in the layer as appropriate)
         for(i=0, len=this.RESOLUTION_PROPERTIES.length; i<len; i++) {
-            var p = this.RESOLUTION_PROPERTIES[i]
+            var p = this.RESOLUTION_PROPERTIES[i];
             props[p] = this.options[p];
             if(alwaysInRange && this.options[p]) {
                 alwaysInRange = false;
@@ -822,7 +825,7 @@
         // in the map
         if(props.resolutions == null) {
             for(i=0, len=this.RESOLUTION_PROPERTIES.length; i<len; i++) {
-                var p = this.RESOLUTION_PROPERTIES[i]
+                var p = this.RESOLUTION_PROPERTIES[i];
                 props[p] = this.options[p] != null ?
                     this.options[p] : this.map[p];
             }
@@ -922,7 +925,7 @@
             resolutions[i] = OpenLayers.Util.getResolutionFromScale(
                 scales[i], this.units);
         }
-        return resolutions
+        return resolutions;
     },
 
     /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Map.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Map.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Map.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -7,6 +8,7 @@
  * @requires OpenLayers/Events.js
  * @requires OpenLayers/Tween.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -512,7 +514,7 @@
         this.viewPortDiv.appendChild(this.layerContainerDiv);
 
         this.events = new OpenLayers.Events(this, 
-                                            this.div, 
+                                            this.viewPortDiv, 
                                             this.EVENT_TYPES, 
                                             this.fallThrough, 
                                             {includeXY: true});
@@ -609,7 +611,6 @@
     render: function(div) {
         this.div = OpenLayers.Util.getElement(div);
         OpenLayers.Element.addClass(this.div, 'olMap');
-        this.events.attachToElement(this.div);
         this.viewPortDiv.parentNode.removeChild(this.viewPortDiv);
         this.div.appendChild(this.viewPortDiv);
         this.updateSize();

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Marker/Box.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Marker/Box.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Marker/Box.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Marker.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Marker.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Marker.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -21,9 +22,9 @@
  * var markers = new OpenLayers.Layer.Markers( "Markers" );
  * map.addLayer(markers);
  *
- * var size = new OpenLayers.Size(10,17);
+ * var size = new OpenLayers.Size(21,25);
  * var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
- * var icon = new OpenLayers.Icon('http://boston.openguides.org/markers/AQUA.png',size,offset);
+ * var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset);
  * markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon));
  * markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon.clone()));
  *

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/Anchored.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/Anchored.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/Anchored.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/AnchoredBubble.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/AnchoredBubble.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/AnchoredBubble.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/Framed.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/Framed.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/Framed.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/FramedCloud.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/FramedCloud.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup/FramedCloud.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Popup.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -336,7 +337,7 @@
         }
         
         //listen to movestart, moveend to disable overflow (FF bug)
-        if (!this.disableFirefoxOverflowHack && OpenLayers.Util.getBrowserName() == 'firefox') {
+        if (!this.disableFirefoxOverflowHack && OpenLayers.BROWSER_NAME == 'firefox') {
             this.map.events.register("movestart", this, function() {
                 var style = document.defaultView.getComputedStyle(
                     this.contentDiv, null
@@ -477,7 +478,7 @@
         //now if our browser is IE, we need to actually make the contents 
         // div itself bigger to take its own padding into effect. this makes 
         // me want to shoot someone, but so it goes.
-        if (OpenLayers.Util.getBrowserName() == "msie") {
+        if (OpenLayers.BROWSER_NAME == "msie") {
             this.contentSize.w += 
                 contentDivPadding.left + contentDivPadding.right;
             this.contentSize.h += 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Projection.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Projection.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Projection.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 /**
  * @requires OpenLayers/Util.js
@@ -25,6 +26,12 @@
      * {String}
      */
     projCode: null,
+    
+    /**
+     * Property: titleRegEx
+     * {RegEx} regular expression to strip the title from a proj4js definition
+     */
+    titleRegEx: /\+title=[^\+]*/,
 
     /**
      * Constructor: OpenLayers.Projection
@@ -91,11 +98,20 @@
      * {Boolean} The two projections are equivalent.
      */
     equals: function(projection) {
-        if (projection && projection.getCode) {
-            return this.getCode() == projection.getCode();
-        } else {
-            return false;
-        }    
+        var p = projection, equals = false;
+        if (p) {
+            if (window.Proj4js && this.proj.defData && p.proj.defData) {
+                equals = this.proj.defData.replace(this.titleRegEx, "") ==
+                    p.proj.defData.replace(this.titleRegEx, "");
+            } else if (p.getCode) {
+                var source = this.getCode(), target = p.getCode();
+                equals = source == target ||
+                    !!OpenLayers.Projection.transforms[source] &&
+                    OpenLayers.Projection.transforms[source][target] ===
+                        OpenLayers.Projection.nullTransform;
+            }
+        }
+        return equals;   
     },
 
     /* Method: destroy
@@ -175,3 +191,23 @@
     }
     return point;
 };
+
+/**
+ * APIFunction: nullTransform
+ * A null transformation - useful for defining projection aliases when
+ * proj4js is not available:
+ *
+ * (code)
+ * OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:3857",
+ *     OpenLayers.Layer.SphericalMercator.projectForward);
+ * OpenLayers.Projection.addTransform("EPSG:3857", "EPSG:3857",
+ *     OpenLayers.Layer.SphericalMercator.projectInverse);
+ * OpenLayers.Projection.addTransform("EPSG:3857", "EPSG:900913",
+ *     OpenLayers.Projection.nullTransform);
+ * OpenLayers.Projection.addTransform("EPSG:900913", "EPSG:3857",
+ *     OpenLayers.Projection.nullTransform);
+ * (end)
+ */
+OpenLayers.Projection.nullTransform = function(point) {
+    return point;
+};

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/HTTP.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/HTTP.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/HTTP.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,8 +1,10 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
+ * @requires OpenLayers/Console.js
  * @requires OpenLayers/Protocol.js
  * @requires OpenLayers/Feature/Vector.js
  * @requires OpenLayers/Filter/Spatial.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SOS/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SOS/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SOS/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SOS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SOS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SOS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SQL/Gears.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SQL/Gears.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SQL/Gears.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SQL.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SQL.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/SQL.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Protocol/WFS.js
  */
@@ -72,9 +77,15 @@
      *     the response with the default format (WFST) and we need a different 
      *     format for reading. 
      */ 
-    readFormat: null,     
+    readFormat: null,
     
     /**
+     * Property: readOptions
+     * {Object} Optional object to pass to format's read.
+     */
+    readOptions: null,
+    
+    /**
      * Constructor: OpenLayers.Protocol.WFS
      * A class for giving layers WFS protocol.
      *
@@ -131,12 +142,26 @@
     },
 
     /**
-     * Method: read
+     * APIMethod: read
      * Construct a request for reading new features.  Since WFS splits the
      *     basic CRUD operations into GetFeature requests (for read) and
      *     Transactions (for all others), this method does not make use of the
      *     format's read method (that is only about reading transaction
      *     responses).
+     *
+     * To use a configured protocol to get e.g. a WFS hit count, applications
+     * could do the following:
+     *
+     * (code)
+     * protocol.read({
+     *     readOptions: {output: "object"},
+     *     resultType: "hits",
+     *     maxFeatures: null,
+     *     callback: function(resp) {
+     *         // process resp.numberOfFeatures here
+     *     }
+     * });
+     * (end)
      */
     read: function(options) {
         OpenLayers.Protocol.prototype.read.apply(this, arguments);
@@ -169,11 +194,19 @@
      * options - {Object} The user options passed to the read call.
      */
     handleRead: function(response, options) {
+        options = OpenLayers.Util.extend({}, options);
+        OpenLayers.Util.applyDefaults(options, this.options);
+
         if(options.callback) {
             var request = response.priv;
             if(request.status >= 200 && request.status < 300) {
                 // success
-                response.features = this.parseFeatures(request);
+                if (options.readOptions && options.readOptions.output == "object") {
+                    OpenLayers.Util.extend(response, 
+                        this.parseResponse(request, options.readOptions));
+                } else {
+                    response.features = this.parseResponse(request, options.readOptions);
+                }
                 response.code = OpenLayers.Protocol.Response.SUCCESS;
             } else {
                 // failure
@@ -184,17 +217,20 @@
     },
 
     /**
-     * Method: parseFeatures
+     * Method: parseResponse
      * Read HTTP response body and return features
      *
      * Parameters:
      * request - {XMLHttpRequest} The request object
+     * options - {Object} Optional object to pass to format's read
      *
      * Returns:
-     * {Array({<OpenLayers.Feature.Vector>})} or
-     *     {<OpenLayers.Feature.Vector>} Array of features or a single feature.
+     * {Object} or {Array({<OpenLayers.Feature.Vector>})} or
+     *     {<OpenLayers.Feature.Vector>} 
+     * An object with a features property, an array of features or a single 
+     * feature.
      */
-    parseFeatures: function(request) {
+    parseResponse: function(request, options) {
         var doc = request.responseXML;
         if(!doc || !doc.documentElement) {
             doc = request.responseText;
@@ -203,7 +239,7 @@
             return null;
         }
         return (this.readFormat !== null) ? this.readFormat.read(doc) : 
-            this.format.read(doc);
+            this.format.read(doc, options);
     },
 
     /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1_0_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1_0_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1_0_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Protocol/WFS/v1.js
  * @requires OpenLayers/Format/WFST/v1_0_0.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1_1_0.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1_1_0.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS/v1_1_0.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Protocol/WFS/v1.js
  * @requires OpenLayers/Format/WFST/v1_1_0.js
@@ -37,7 +42,27 @@
      * featurePrefix - {String} Feature namespace alias (optional - only used
      *     if featureNS is provided).  Default is 'feature'.
      * geometryName - {String} Name of geometry attribute.  Default is 'the_geom'.
+     * outputFormat - {String} Optional output format to use for WFS GetFeature
+     *     requests. This can be any format advertized by the WFS's
+     *     GetCapabilities response. If set, an appropriate readFormat also
+     *     has to be provided, unless outputFormat is GML3, GML2 or JSON.
+     * readFormat - {<OpenLayers.Format>} An appropriate format parser if
+     *     outputFormat is none of GML3, GML2 or JSON.
      */
+    initialize: function(options) {
+        OpenLayers.Protocol.WFS.v1.prototype.initialize.apply(this, arguments);
+        if (this.outputFormat && !this.readFormat) {
+            if (this.outputFormat.toLowerCase() == "gml2") {
+                this.readFormat = new OpenLayers.Format.GML.v2({
+                    featureType: this.featureType,
+                    featureNS: this.featureNS,
+                    geometryName: this.geometryName
+                });
+            } else if (this.outputFormat.toLowerCase() == "json") {
+                this.readFormat = new OpenLayers.Format.GeoJSON();
+            }
+        }
+    },
    
     CLASS_NAME: "OpenLayers.Protocol.WFS.v1_1_0"
 });

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol/WFS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Protocol.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/Canvas.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/Canvas.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/Canvas.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -67,22 +68,6 @@
     },    
     
     /**
-     * Method: setExtent
-     * Set the visible part of the layer.
-     *
-     * Resolution has probably changed, so we nullify the resolution 
-     * cache (this.resolution), then redraw. 
-     *
-     * Parameters:
-     * extent - {<OpenLayers.Bounds>} 
-     */
-    setExtent: function(extent) {
-        this.extent = extent.clone();
-        this.resolution = null;
-        this.redraw();
-    },
-    
-    /**
      * Method: setSize
      * Sets the size of the drawing surface.
      *

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/Elements.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/Elements.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/Elements.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -508,10 +509,13 @@
         };
 
         rendered = false;
+        var removeBackground = false;
         if (style.display != "none") {
             if (style.backgroundGraphic) {
                 this.redrawBackgroundNode(geometry.id, geometry, style,
                     featureId);
+            } else {
+                removeBackground = true;
             }
             rendered = this.redrawNode(geometry.id, geometry, style,
                 featureId);
@@ -520,12 +524,18 @@
             var node = document.getElementById(geometry.id);
             if (node) {
                 if (node._style.backgroundGraphic) {
-                    node.parentNode.removeChild(document.getElementById(
-                        geometry.id + this.BACKGROUND_ID_SUFFIX));
+                    removeBackground = true;
                 }
                 node.parentNode.removeChild(node);
             }
         }
+        if (removeBackground) {
+            var node = document.getElementById(
+                geometry.id + this.BACKGROUND_ID_SUFFIX);
+            if (node) {
+                node.parentNode.removeChild(node);
+            }
+        }
         return rendered;
     },
     

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/NG.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/NG.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/NG.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/SVG.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/SVG.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/SVG.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -49,20 +50,6 @@
     symbolMetrics: null,
     
     /**
-     * Property: isGecko
-     * {Boolean}
-     */
-    isGecko: null,
-
-    /**
-     * Property: supportUse
-     * {Boolean} true if defs/use is supported - known to not work as expected
-     * at least in some applewebkit/5* builds.
-     * See https://bugs.webkit.org/show_bug.cgi?id=33322
-     */
-    supportUse: null,
-
-    /**
      * Constructor: OpenLayers.Renderer.SVG
      * 
      * Parameters:
@@ -75,8 +62,6 @@
         OpenLayers.Renderer.Elements.prototype.initialize.apply(this, 
                                                                 arguments);
         this.translationParameters = {x: 0, y: 0};
-        this.supportUse = (navigator.userAgent.toLowerCase().indexOf("applewebkit/5") == -1);
-        this.isGecko = (navigator.userAgent.toLowerCase().indexOf("gecko/") != -1);
         
         this.symbolMetrics = {};
     },
@@ -221,7 +206,7 @@
                 if (style.externalGraphic) {
                     nodeType = "image";
                 } else if (this.isComplexSymbol(style.graphicName)) {
-                    nodeType = this.supportUse === false ? "svg" : "use";
+                    nodeType = "svg";
                 } else {
                     nodeType = "circle";
                 }
@@ -312,17 +297,17 @@
                     parent.removeChild(node);
                 }
                 
-                if(this.supportUse === false) {
-                    // workaround for webkit versions that cannot do defs/use
-                    // (see https://bugs.webkit.org/show_bug.cgi?id=33322):
-                    // copy the symbol instead of referencing it
-                    var src = document.getElementById(id);
-                    node.firstChild && node.removeChild(node.firstChild);
-                    node.appendChild(src.firstChild.cloneNode(true));
-                    node.setAttributeNS(null, "viewBox", src.getAttributeNS(null, "viewBox"));
-                } else {
-                    node.setAttributeNS(this.xlinkns, "href", "#" + id);
-                }
+                // The more appropriate way to implement this would be use/defs,
+                // but due to various issues in several browsers, it is safer to
+                // copy the symbols instead of referencing them. 
+                // See e.g. ticket http://trac.osgeo.org/openlayers/ticket/2985 
+                // and this email thread
+                // http://osgeo-org.1803224.n2.nabble.com/Select-Control-Ctrl-click-on-Feature-with-a-graphicName-opens-new-browser-window-tc5846039.html
+                var src = document.getElementById(id);
+                node.firstChild && node.removeChild(node.firstChild);
+                node.appendChild(src.firstChild.cloneNode(true));
+                node.setAttributeNS(null, "viewBox", src.getAttributeNS(null, "viewBox"));
+                
                 node.setAttributeNS(null, "width", size);
                 node.setAttributeNS(null, "height", size);
                 node.setAttributeNS(null, "x", pos.x - offset);
@@ -340,19 +325,15 @@
             }
 
             var rotation = style.rotation;
+            
             if ((rotation !== undefined || node._rotation !== undefined) && pos) {
                 node._rotation = rotation;
                 rotation |= 0;
-                if(node.nodeName !== "svg") {
-                    node.setAttributeNS(null, "transform",
-                        "rotate(" + rotation + " " + pos.x + " " +
-                        pos.y + ")");
-                } else {
-                     var metrics = this.symbolMetrics[id];
-                     node.firstChild.setAttributeNS(null, "transform",
-                     "rotate(" + style.rotation + " " + metrics[1] +
-                         " " +  metrics[2] + ")");
-                }
+                var metrics = this.symbolMetrics[id];
+                node.firstChild.setAttributeNS(null, "transform", "rotate(" 
+                    + rotation + " " 
+                    + metrics[1] + " "
+                    + metrics[2] + ")");
             }
         }
         
@@ -734,7 +715,7 @@
         label.setAttributeNS(null, "text-anchor",
             OpenLayers.Renderer.SVG.LABEL_ALIGN[align[0]] || "middle");
 
-        if (this.isGecko) {
+        if (OpenLayers.IS_GECKO === true) {
             label.setAttributeNS(null, "dominant-baseline",
                 OpenLayers.Renderer.SVG.LABEL_ALIGN[align[1]] || "central");
         } else {
@@ -957,7 +938,7 @@
      */
     getFeatureIdFromEvent: function(evt) {
         var featureId = OpenLayers.Renderer.Elements.prototype.getFeatureIdFromEvent.apply(this, arguments);
-        if(this.supportUse === false && !featureId) {
+        if(!featureId) {
             var target = evt.target;
             featureId = target.parentNode && target != this.rendererRoot &&
                 target.parentNode._featureId;

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/SVG2.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/SVG2.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/SVG2.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -35,12 +36,6 @@
     symbolMetrics: null,
     
     /**
-     * Property: isGecko
-     * {Boolean}
-     */
-    isGecko: null,
-    
-    /**
      * Constant: labelNodeType
      * {String} The node type for text label containers.
      */
@@ -58,7 +53,6 @@
         }
         OpenLayers.Renderer.Elements.prototype.initialize.apply(this, 
                                                                 arguments);
-        this.isGecko = (navigator.userAgent.toLowerCase().indexOf("gecko/") != -1);
         
         this.symbolMetrics = {};
     },
@@ -610,7 +604,7 @@
         text.setAttributeNS(null, "text-anchor",
             OpenLayers.Renderer.SVG.LABEL_ALIGN[align[0]] || "middle");
 
-        if (this.isGecko) {
+        if (OpenLayers.IS_GECKO === true) {
             text.setAttributeNS(null, "dominant-baseline",
                 OpenLayers.Renderer.SVG.LABEL_ALIGN[align[1]] || "central");
         } else {

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/VML.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/VML.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer/VML.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -750,21 +751,43 @@
         var resolution = this.getResolution();
     
         var path = [];
-        var linearRing, i, j, len, ilen, comp, x, y;
-        for (j = 0, len=geometry.components.length; j<len; j++) {
-            linearRing = geometry.components[j];
-
+        var j, jj, points, area, first, second, i, ii, comp, pathComp, x, y;
+        for (j=0, jj=geometry.components.length; j<jj; j++) {
             path.push("m");
-            for (i=0, ilen=linearRing.components.length; i<ilen; i++) {
-                comp = linearRing.components[i];
+            points = geometry.components[j].components;
+            // we only close paths of interior rings with area
+            area = (j === 0);
+            first = null;
+            second = null;
+            for (i=0, ii=points.length; i<ii; i++) {
+                comp = points[i];
                 x = (comp.x / resolution - this.offset.x) | 0;
                 y = (comp.y / resolution - this.offset.y) | 0;
-                path.push(" " + x + "," + y);
+                pathComp = " " + x + "," + y;
+                path.push(pathComp)
                 if (i==0) {
                     path.push(" l");
                 }
+                if (!area) {
+                    // IE improperly renders sub-paths that have no area.
+                    // Instead of checking the area of every ring, we confirm
+                    // the ring has at least three distinct points.  This does
+                    // not catch all non-zero area cases, but it greatly improves
+                    // interior ring digitizing and is a minor performance hit
+                    // when rendering rings with many points.
+                    if (!first) {
+                        first = pathComp;
+                    } else if (first != pathComp) {
+                        if (!second) {
+                            second = pathComp;
+                        } else if (second != pathComp) {
+                            // stop looking
+                            area = true;
+                        }
+                    }
+                }
             }
-            path.push(" x ");
+            path.push(area ? " x " : " ");
         }
         path.push("e");
         node.path = path.join("");

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Renderer.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -180,8 +181,8 @@
                 if(style.display != "none" && style.label && rendered !== false) {
                     var location = feature.geometry.getCentroid(); 
                     if(style.labelXOffset || style.labelYOffset) {
-                        xOffset = isNaN(style.labelXOffset) ? 0 : style.labelXOffset;
-                        yOffset = isNaN(style.labelYOffset) ? 0 : style.labelYOffset;
+                        var xOffset = isNaN(style.labelXOffset) ? 0 : style.labelXOffset;
+                        var yOffset = isNaN(style.labelYOffset) ? 0 : style.labelYOffset;
                         var res = this.getResolution();
                         location.move(xOffset*res, yOffset*res);
                     }

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Request/XMLHttpRequest.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Request/XMLHttpRequest.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Request/XMLHttpRequest.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -24,14 +24,20 @@
     // Define on browser type
     var bGecko    = !!window.controllers,
         bIE        = window.document.all && !window.opera,
-        bIE7    = bIE && window.navigator.userAgent.match(/MSIE ([\.0-9]+)/) && RegExp.$1 == 7;
+        bIE7    = bIE && window.navigator.userAgent.match(/MSIE 7.0/);
 
-    // Constructor
-    function cXMLHttpRequest() {
+    // Enables "XMLHttpRequest()" call next to "new XMLHttpReques()"
+    function fXMLHttpRequest() {
         this._object    = oXMLHttpRequest && !bIE7 ? new oXMLHttpRequest : new window.ActiveXObject("Microsoft.XMLHTTP");
         this._listeners    = [];
     };
 
+    // Constructor
+    function cXMLHttpRequest() {
+        return new fXMLHttpRequest;
+    };
+    cXMLHttpRequest.prototype    = fXMLHttpRequest.prototype;
+
     // BUGFIX: Firefox with Firebug installed would break pages if not executed
     if (bGecko && oXMLHttpRequest.wrapped)
         cXMLHttpRequest.wrapped    = oXMLHttpRequest.wrapped;
@@ -50,6 +56,9 @@
     cXMLHttpRequest.prototype.status        = 0;
     cXMLHttpRequest.prototype.statusText    = '';
 
+    // Priority proposal
+    cXMLHttpRequest.prototype.priority        = "NORMAL";
+
     // Instance-level Events Handlers
     cXMLHttpRequest.prototype.onreadystatechange    = null;
 
@@ -85,7 +94,7 @@
                     oRequest.abort();
                 }
             };
-                window.attachEvent("onunload", fOnUnload);
+            window.attachEvent("onunload", fOnUnload);
         }
 
         // Add method sniffer
@@ -100,10 +109,8 @@
         else
             this._object.open(sMethod, sUrl, bAsync);
 
-        if (!bGecko && !bIE) {
-            this.readyState    = cXMLHttpRequest.OPENED;
-            fReadyStateChange(this);
-        }
+        this.readyState    = cXMLHttpRequest.OPENED;
+        fReadyStateChange(this);
 
         this._object.onreadystatechange    = function() {
             if (bGecko && !bAsync)
@@ -125,6 +132,10 @@
             }
 
             if (oRequest.readyState == cXMLHttpRequest.DONE) {
+                // Free up queue
+                delete oRequest._data;
+/*                if (bAsync)
+                    fQueue_remove(oRequest);*/
                 //
                 fCleanTransport(oRequest);
 // Uncomment this block if you need a fix for IE cache
@@ -140,7 +151,7 @@
                     // Re-send request
                     if (sUser) {
                          if (sPassword)
-                    oRequest._object.open(sMethod, sUrl, bAsync, sUser, sPassword);
+                            oRequest._object.open(sMethod, sUrl, bAsync, sUser, sPassword);
                         else
                             oRequest._object.open(sMethod, sUrl, bAsync, sUser);
                     }
@@ -205,38 +216,50 @@
             nState    = oRequest.readyState;
         }
     };
+    function fXMLHttpRequest_send(oRequest) {
+        oRequest._object.send(oRequest._data);
+
+        // BUGFIX: Gecko - missing readystatechange calls in synchronous requests
+        if (bGecko && !oRequest._async) {
+            oRequest.readyState    = cXMLHttpRequest.OPENED;
+
+            // Synchronize state
+            fSynchronizeValues(oRequest);
+
+            // Simulate missing states
+            while (oRequest.readyState < cXMLHttpRequest.DONE) {
+                oRequest.readyState++;
+                fReadyStateChange(oRequest);
+                // Check if we are aborted
+                if (oRequest._aborted)
+                    return;
+            }
+        }
+    };
     cXMLHttpRequest.prototype.send    = function(vData) {
         // Add method sniffer
         if (cXMLHttpRequest.onsend)
             cXMLHttpRequest.onsend.apply(this, arguments);
 
+        if (!arguments.length)
+            vData    = null;
+
         // BUGFIX: Safari - fails sending documents created/modified dynamically, so an explicit serialization required
         // BUGFIX: IE - rewrites any custom mime-type to "text/xml" in case an XMLNode is sent
         // BUGFIX: Gecko - fails sending Element (this is up to the implementation either to standard)
         if (vData && vData.nodeType) {
             vData    = window.XMLSerializer ? new window.XMLSerializer().serializeToString(vData) : vData.xml;
-            if (!this._headers["Content-Type"])
-                this._object.setRequestHeader("Content-Type", "application/xml");
+            if (!oRequest._headers["Content-Type"])
+                oRequest._object.setRequestHeader("Content-Type", "application/xml");
         }
 
-        this._object.send(vData);
-
-        // BUGFIX: Gecko - missing readystatechange calls in synchronous requests
-        if (bGecko && !this._async) {
-            this.readyState    = cXMLHttpRequest.OPENED;
-
-            // Synchronize state
-            fSynchronizeValues(this);
-
-            // Simulate missing states
-            while (this.readyState < cXMLHttpRequest.DONE) {
-                this.readyState++;
-                fReadyStateChange(this);
-                // Check if we are aborted
-                if (this._aborted)
-                    return;
-            }
-        }
+        this._data    = vData;
+/*
+        // Add to queue
+        if (this._async)
+            fQueue_add(this);
+        else*/
+            fXMLHttpRequest_send(this);
     };
     cXMLHttpRequest.prototype.abort    = function() {
         // Add method sniffer
@@ -251,6 +274,12 @@
 
         // BUGFIX: IE - memory leak
         fCleanTransport(this);
+
+        this.readyState    = cXMLHttpRequest.UNSENT;
+
+        delete this._data;
+/*        if (this._async)
+            fQueue_remove(this);*/
     };
     cXMLHttpRequest.prototype.getAllResponseHeaders    = function() {
         return this._object.getAllResponseHeaders();
@@ -361,7 +390,45 @@
         // BUGFIX: IE - memory leak (on-page leak)
         oRequest._object.onreadystatechange    = new window.Function;
     };
+/*
+    // Queue manager
+    var oQueuePending    = {"CRITICAL":[],"HIGH":[],"NORMAL":[],"LOW":[],"LOWEST":[]},
+        aQueueRunning    = [];
+    function fQueue_add(oRequest) {
+        oQueuePending[oRequest.priority in oQueuePending ? oRequest.priority : "NORMAL"].push(oRequest);
+        //
+        setTimeout(fQueue_process);
+    };
 
+    function fQueue_remove(oRequest) {
+        for (var nIndex = 0, bFound    = false; nIndex < aQueueRunning.length; nIndex++)
+            if (bFound)
+                aQueueRunning[nIndex - 1]    = aQueueRunning[nIndex];
+            else
+            if (aQueueRunning[nIndex] == oRequest)
+                bFound    = true;
+        if (bFound)
+            aQueueRunning.length--;
+        //
+        setTimeout(fQueue_process);
+    };
+
+    function fQueue_process() {
+        if (aQueueRunning.length < 6) {
+            for (var sPriority in oQueuePending) {
+                if (oQueuePending[sPriority].length) {
+                    var oRequest    = oQueuePending[sPriority][0];
+                    oQueuePending[sPriority]    = oQueuePending[sPriority].slice(1);
+                    //
+                    aQueueRunning.push(oRequest);
+                    // Send request
+                    fXMLHttpRequest_send(oRequest);
+                    break;
+                }
+            }
+        }
+    };
+*/
     // Internet Explorer 5.0 (missing apply)
     if (!window.Function.prototype.apply) {
         window.Function.prototype.apply    = function(oRequest, oArguments) {
@@ -381,4 +448,4 @@
      *     http://code.google.com/p/xmlhttprequest/.
      */
     OpenLayers.Request.XMLHttpRequest = cXMLHttpRequest;
-})();
\ No newline at end of file
+})();

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Request.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Request.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Request.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -168,7 +169,7 @@
             request.send(config.data);
         } else {
             window.setTimeout(function(){
-                if (request._aborted !== true) {
+                if (request.readyState !== 0) { // W3C: 0-UNSENT
                     request.send(config.data);
                 }
             }, 0);

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Rule.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Rule.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Rule.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
- * for the full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/SingleFile.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/SingleFile.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/SingleFile.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,9 +1,43 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 var OpenLayers = {
-    singleFile: true
-};
+    /**
+     * Constant: VERSION_NUMBER
+     */
+    VERSION_NUMBER: "$Revision$",
 
+    /**
+     * Constant: singleFile
+     * TODO: remove this in 3.0 when we stop supporting build profiles that
+     * include OpenLayers.js
+     */
+    singleFile: true,
 
+    /**
+     * Method: _getScriptLocation
+     * Return the path to this script. This is also implemented in
+     * OpenLayers.js
+     *
+     * Returns:
+     * {String} Path to this script
+     */
+    _getScriptLocation: (function() {
+        var r = new RegExp("(^|(.*?\\/))(OpenLayers\.js)(\\?|$)"),
+            s = document.getElementsByTagName('script'),
+            src, m, l = "";
+        for(var i=0, len=s.length; i<len; i++) {
+            src = s[i].getAttribute('src');
+            if(src) {
+                var m = src.match(r);
+                if(m) {
+                    l = m[1];
+                    break;
+                }
+            }
+        }
+        return (function() { return l; });
+    })()
+};


Property changes on: sandbox/ahocevar/renderer-ng/lib/OpenLayers/SingleFile.js
___________________________________________________________________
Added: svn:keywords
   + Revision

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/BBOX.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/BBOX.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/BBOX.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Cluster.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Cluster.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Cluster.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -158,7 +159,7 @@
                     feature = this.features[i];
                     if(feature.geometry) {
                         clustered = false;
-                        for(var j=0; j<clusters.length; ++j) {
+                        for(var j=clusters.length-1; j>=0; --j) {
                             cluster = clusters[j];
                             if(this.shouldCluster(cluster, feature)) {
                                 this.addToCluster(cluster, feature);
@@ -171,7 +172,7 @@
                         }
                     }
                 }
-                this.layer.destroyFeatures();
+                this.layer.removeAllFeatures();
                 if(clusters.length > 0) {
                     if(this.threshold > 1) {
                         var clone = clusters.slice();

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Filter.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Filter.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Filter.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Strategy.js
  * @requires OpenLayers/Filter.js
@@ -40,14 +45,10 @@
      *
      * Parameters:
      * options - {Object} Optional object whose properties will be set on the
-     *     instance.  Strategy must be constructed with at least a <filter> 
-     *     property.
+     *     instance.
      */
     initialize: function(options) {
         OpenLayers.Strategy.prototype.initialize.apply(this, [options]);
-        if (!this.filter || !(this.filter instanceof OpenLayers.Filter)) {
-            throw new Error("Filter strategy must be constructed with a filter");
-        }
     },
 
     /**
@@ -97,7 +98,7 @@
      * Method: handleAdd
      */
     handleAdd: function(event) {
-        if (!this.caching) {
+        if (!this.caching && this.filter) {
             var features = event.features;
             event.features = [];
             var feature;

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Fixed.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Fixed.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Fixed.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
@@ -97,13 +98,14 @@
      * options - {Object} options to pass to protocol read.
      */
     load: function(options) {
-        this.layer.events.triggerEvent("loadstart");
-        this.layer.protocol.read(OpenLayers.Util.applyDefaults({
-            callback: this.merge,
-            filter: this.layer.filter,
-            scope: this
+        var layer = this.layer;
+        layer.events.triggerEvent("loadstart");
+        layer.protocol.read(OpenLayers.Util.applyDefaults({
+            callback: OpenLayers.Function.bind(this.merge, this,
+                layer.map.getProjectionObject()),
+            filter: layer.filter
         }, options));
-        this.layer.events.un({
+        layer.events.un({
             "visibilitychanged": this.load,
             scope: this
         });
@@ -112,25 +114,28 @@
     /**
      * Method: merge
      * Add all features to the layer.
+     *
+     * Parameters:
+     * mapProjection - {OpenLayers.Projection} the map projection
+     * resp - {Object} options to pass to protocol read.
      */
-    merge: function(resp) {
-        this.layer.destroyFeatures();
+    merge: function(mapProjection, resp) {
+        var layer = this.layer;
+        layer.destroyFeatures();
         var features = resp.features;
         if (features && features.length > 0) {
-            var remote = this.layer.projection;
-            var local = this.layer.map.getProjectionObject();
-            if(!local.equals(remote)) {
+            if(!mapProjection.equals(layer.projection)) {
                 var geom;
                 for(var i=0, len=features.length; i<len; ++i) {
                     geom = features[i].geometry;
                     if(geom) {
-                        geom.transform(remote, local);
+                        geom.transform(layer.projection, mapProjection);
                     }
                 }
             }
-            this.layer.addFeatures(features);
+            layer.addFeatures(features);
         }
-        this.layer.events.triggerEvent("loadend");
+        layer.events.triggerEvent("loadend");
     },
 
     CLASS_NAME: "OpenLayers.Strategy.Fixed"

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Paging.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Paging.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Paging.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Refresh.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Refresh.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Refresh.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2009 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Save.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Save.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy/Save.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Strategy.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Style.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Style.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Style.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,6 +1,7 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
-  * full text of the license. */
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
 
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Style2.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Style2.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Style2.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Rule.js
  * @requires OpenLayers/Symbolizer/Point.js

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/StyleMap.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/StyleMap.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/StyleMap.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Line.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Line.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Line.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Symbolizer.js
  */
@@ -11,27 +16,31 @@
     /**
      * APIProperty: strokeColor
      * {String} Color for line stroke.  This is a RGB hex value (e.g. "#ff0000"
-     *     for red).
+     *     for red).  
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeColor: null,
     
     /**
      * APIProperty: strokeOpacity
      * {Number} Stroke opacity (0-1).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeOpacity: null,
     
     /**
      * APIProperty: strokeWidth
      * {Number} Pixel stroke width.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeWidth: null,
     
     /**
      * APIProperty: strokeLinecap
      * {String} Stroke cap type ("butt", "round", or "square").
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeLinecap: null,
     
     /**
      * Property: strokeDashstyle
@@ -39,8 +48,9 @@
      *     OpenLayers values for strokeDashstyle ("dot", "dash", "dashdot",
      *     "longdash", "longdashdot", or "solid") will not work in SLD, but
      *     most SLD patterns will render correctly in OpenLayers.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeDashstyle: null,
 
     /**
      * Constructor: OpenLayers.Symbolizer.Line

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Point.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Point.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Point.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Symbolizer.js
  */
@@ -12,26 +17,30 @@
      * APIProperty: strokeColor
      * {String} Color for line stroke.  This is a RGB hex value (e.g. "#ff0000"
      *     for red).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeColor: null,
     
     /**
      * APIProperty: strokeOpacity
      * {Number} Stroke opacity (0-1).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeOpacity: null,
     
     /**
      * APIProperty: strokeWidth
      * {Number} Pixel stroke width.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeWidth: null,
     
     /**
      * APIProperty: strokeLinecap
      * {String} Stroke cap type ("butt", "round", or "square").
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeLinecap: null,
     
     /**
      * Property: strokeDashstyle
@@ -39,80 +48,92 @@
      *     OpenLayers values for strokeDashstyle ("dot", "dash", "dashdot",
      *     "longdash", "longdashdot", or "solid") will not work in SLD, but
      *     most SLD patterns will render correctly in OpenLayers.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeDashstyle: null,
 
     /**
      * APIProperty: fillColor
      * {String} RGB hex fill color (e.g. "#ff0000" for red).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    fillColor: null,
     
     /**
      * APIProperty: fillOpacity
      * {Number} Fill opacity (0-1).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    fillOpacity: null, 
 
     /**
      * APIProperty: pointRadius
      * {Number} Pixel point radius.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    pointRadius: null,
 
     /**
      * APIProperty: externalGraphic
      * {String} Url to an external graphic that will be used for rendering 
      *     points.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    externalGraphic: null,
     
     /**
      * APIProperty: graphicWidth
      * {Number} Pixel width for sizing an external graphic.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    graphicWidth: null,
     
     /**
      * APIProperty: graphicHeight
      * {Number} Pixel height for sizing an external graphic.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    graphicHeight: null,
     
     /**
      * APIProperty: graphicOpacity
      * {Number} Opacity (0-1) for an external graphic.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    graphicOpacity: null,
     
     /**
      * APIProperty: graphicXOffset
      * {Number} Pixel offset along the positive x axis for displacing an 
      *     external graphic.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    graphicXOffset: null,
     
     /**
      * APIProperty: graphicYOffset
      * {Number} Pixel offset along the positive y axis for displacing an 
      *     external graphic.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    graphicYOffset: null,
 
     /**
      * APIProperty: rotation
      * {Number} The rotation of a graphic in the clockwise direction about its 
      *     center point (or any point off center as specified by 
      *     <graphicXOffset> and <graphicYOffset>).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    rotation: null,
     
     /**
      * APIProperty: graphicName
      * {String} Named graphic to use when rendering points.  Supported values 
      *     include "circle", "square", "star", "x", "cross", and "triangle".
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    graphicName: null,
     
     /**
      * Constructor: OpenLayers.Symbolizer.Point

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Polygon.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Polygon.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Polygon.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Symbolizer.js
  */
@@ -12,26 +17,30 @@
      * APIProperty: strokeColor
      * {String} Color for line stroke.  This is a RGB hex value (e.g. "#ff0000"
      *     for red).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeColor: null,
     
     /**
      * APIProperty: strokeOpacity
      * {Number} Stroke opacity (0-1).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeOpacity: null,
     
     /**
      * APIProperty: strokeWidth
      * {Number} Pixel stroke width.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeWidth: null,
     
     /**
      * APIProperty: strokeLinecap
      * {String} Stroke cap type ("butt", "round", or "square").
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeLinecap: null,
     
     /**
      * Property: strokeDashstyle
@@ -39,20 +48,23 @@
      *     OpenLayers values for strokeDashstyle ("dot", "dash", "dashdot",
      *     "longdash", "longdashdot", or "solid") will not work in SLD, but
      *     most SLD patterns will render correctly in OpenLayers.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    strokeDashstyle: null,
 
     /**
      * APIProperty: fillColor
      * {String} RGB hex fill color (e.g. "#ff0000" for red).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    fillColor: null,
     
     /**
      * APIProperty: fillOpacity
      * {Number} Fill opacity (0-1).
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    fillOpacity: null, 
 
     /**
      * Constructor: OpenLayers.Symbolizer.Polygon

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Raster.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Raster.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Raster.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Symbolizer.js
  */

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Text.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Text.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer/Text.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * @requires OpenLayers/Symbolizer.js
  */
@@ -11,32 +16,37 @@
     /** 
      * APIProperty: label
      * {String} The text for the label.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    label: null,
     
     /** 
      * APIProperty: fontFamily
      * {String} The font family for the label.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    fontFamily: null,
 
     /** 
      * APIProperty: fontSize
      * {String} The font size for the label.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    fontSize: null,
 
     /** 
      * APIProperty: fontWeight
      * {String} The font weight for the label.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    fontWeight: null,
     
     /**
      * Property: fontStyle
      * {String} The font style for the label.
+     * 
+     * No default set here.  Use OpenLayers.Renderer.defaultRenderer for defaults.
      */
-    fontStyle: null,
 
     /**
      * Constructor: OpenLayers.Symbolizer.Text

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Symbolizer.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+ * full text of the license. */
+
 /**
  * Class: OpenLayers.Symbolizer
  * Base class representing a symbolizer used for feature rendering.

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/Image/IFrame.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/Image/IFrame.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/Image/IFrame.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -8,87 +9,49 @@
  */
 
 /**
- * Class: OpenLayers.Tile.Image.IFrame
- * Instances of OpenLayers.Tile.Image.IFrame are used to manage the image tiles
- * used by Layer.WMS.Post loaded via HTTP-POST-protocol. Create a new image
- * tile with the <OpenLayers.Tile.Image.IFrame> constructor.
+ * Constant: OpenLayers.Tile.Image.IFrame
+ * Mixin for tiles that use form-encoded POST requests to get images from
+ * remote services. Images will be loaded using HTTP-POST into an IFrame.
  *
+ * This mixin will be applied to <OpenLayers.Tile.Image> instances
+ * configured with <OpenLayers.Tile.Image.allowPost> or
+ * <OpenLayers.Tile.Image.enforcePost> set to true.
+ *
  * Inherits from:
  *  - <OpenLayers.Tile.Image>
  */
-OpenLayers.Tile.Image.IFrame = OpenLayers.Class(OpenLayers.Tile.Image, {
+OpenLayers.Tile.Image.IFrame = {
     
     /**
-     * Property: layerAlphaHack
-     * {Boolean} Always false for an instance.
-     */
+     * Property: useIFrame
+     * {Boolean} true if we are currently using an IFrame to render POST
+     * responses, false if we are using an img element to render GET responses.
+     */ 
+    useIFrame: null,
 
     /**
-     * Constructor: OpenLayers.Tile.Image.IFrame
-     * Constructor for a new <OpenLayers.Tile.Image.IFrame> instance.
-     * 
-     * Parameters:
-     * layer - {<OpenLayers.Layer>} layer that the tile will go in.
-     * position - {<OpenLayers.Pixel>}
-     * bounds - {<OpenLayers.Bounds>}
-     * size - {<OpenLayers.Size>}
-     */   
-    initialize: function(layer, position, bounds, url, size) {
-        OpenLayers.Tile.Image.prototype.initialize.apply(this, arguments);
-        this.layerAlphaHack = false;
-    },
-
-    /** 
-     * Method: destroy
-     * nullify references to prevent circular references and memory leaks
-     */
-    destroy: function() {
-        if(this.imgDiv != null) {
-            // unregister the "load" handler
-            OpenLayers.Event.stopObservingElement(this.imgDiv.firstChild);
-        }
-        OpenLayers.Tile.Image.prototype.destroy.apply(this, arguments);
-    },
-
-    /**
      * Method: clear
      * Removes the iframe from DOM (avoids back-button problems).
      */
     clear: function() {
-        if(this.imgDiv) {
-            var iFrame = this.imgDiv.firstChild;
-            OpenLayers.Event.stopObservingElement(iFrame);
-            this.imgDiv.removeChild(iFrame);
+        if (this.useIFrame) {
+            if (this.imgDiv) {
+                var iFrame = this.imgDiv.firstChild;
+                OpenLayers.Event.stopObservingElement(iFrame);
+                this.imgDiv.removeChild(iFrame);
+                delete iFrame;
+            }
+        } else {
+            OpenLayers.Tile.Image.prototype.clear.apply(this, arguments)
         }
     },
 
     /**
-     * Method: clone
-     *
-     * Parameters:
-     * obj - {<OpenLayers.Tile.Image.IFrame>} The tile to be cloned
-     *
-     * Returns:
-     * {<OpenLayers.Tile.Image.IFrame>} An exact clone of this 
-     * <OpenLayers.Tile.Image.IFrame>
-     */
-    clone: function (obj) {
-        if (obj == null) {
-            obj = new OpenLayers.Tile.Image.IFrame(
-                this.layer, this.position, this.bounds, this.url, this.size);
-        } 
-        
-        //pick up properties from superclass
-        obj = OpenLayers.Tile.Image.prototype.clone.apply(this, [obj]);
-        
-        return obj;
-    },
-
-    /**
      * Method: renderTile
      */
      renderTile: function() {
-        if(OpenLayers.Tile.Image.prototype.renderTile.apply(this, arguments)) {
+        if (OpenLayers.Tile.Image.prototype.renderTile.apply(this, arguments) &&
+                                                            this.useIFrame) {
             // create a html form and add it temporary to the layer div
             var form = this.createRequestForm();
             this.imgDiv.appendChild(form);
@@ -96,7 +59,9 @@
             // submit the form (means fetching the image)
             form.submit();
             this.imgDiv.removeChild(form);
+            delete form;
         }
+        return true;
     },
 
     /**
@@ -104,49 +69,56 @@
      * Creates the imgDiv property on the tile.
      */
     initImgDiv: function() {
-        this.imgDiv = this.createImgDiv();
+        this.useIFrame = this.maxGetUrlLength !== null && !this.layer.async &&
+            this.url.length > this.maxGetUrlLength;
+        if (this.imgDiv != null) {
+            var nodeName = this.imgDiv.nodeName.toLowerCase();
+            if ((this.useIFrame && nodeName == "img") ||
+                                        (!this.useIFrame && nodeName == "div")) {
+                // switch between get and post
+                this.removeImgDiv();
+                this.imgDiv = null;
+            }
+        }
+        if (this.useIFrame) {
+            if (this.imgDiv == null) {
+                var eventPane = document.createElement("div");
 
-        OpenLayers.Util.modifyDOMElement(this.imgDiv, this.id, null,
-            this.layer.getImageSize(), "relative");
-        this.imgDiv.className = 'olTileImage';
+                if(OpenLayers.BROWSER_NAME == "msie") {
+                    // IE cannot handle events on elements without backgroundcolor.
+                    // So we use this little hack to make elements transparent
+                    eventPane.style.backgroundColor = '#FFFFFF';
+                    eventPane.style.filter          = 'chroma(color=#FFFFFF)';
+                }
 
-        this.frame.appendChild(this.imgDiv); 
-        this.layer.div.appendChild(this.frame); 
+                OpenLayers.Util.modifyDOMElement(eventPane, null,
+                    new OpenLayers.Pixel(0,0), this.layer.getImageSize(), "absolute");
 
-        if(this.layer.opacity != null) {
-            
-            OpenLayers.Util.modifyDOMElement(this.imgDiv, null, null, null,
-                                             null, null, null, 
-                                             this.layer.opacity);
-        }
+                this.imgDiv = document.createElement("div");
+                this.imgDiv.appendChild(eventPane);
 
-        // we need this reference to check back the viewRequestID
-        this.imgDiv.map = this.layer.map;
-    },
+                OpenLayers.Util.modifyDOMElement(this.imgDiv, this.id, null,
+                    this.layer.getImageSize(), "relative");
+                this.imgDiv.className = 'olTileImage';
 
-    /**
-     * Method: createImgDiv
-     * Creates a div with iframe.and eventPane
-     *
-     * Returns:
-     * {DOMElement}
-     */
-    createImgDiv: function() {
-        var eventPane = document.createElement("div");
+                this.frame.appendChild(this.imgDiv); 
+                this.layer.div.appendChild(this.frame); 
 
-        if(OpenLayers.Util.getBrowserName() == "msie") {
-            // IE cannot handle events on elements without backgroundcolor. So we
-            // use this little hack to make elements transparent
-            eventPane.style.backgroundColor = '#FFFFFF';
-            eventPane.style.filter          = 'chroma(color=#FFFFFF)';
-        }
+                if(this.layer.opacity != null) {
 
-        OpenLayers.Util.modifyDOMElement(eventPane, null,
-            new OpenLayers.Pixel(0,0), this.layer.getImageSize(), "absolute");
+                    OpenLayers.Util.modifyDOMElement(this.imgDiv, null, null,
+                                                     null, null, null, null, 
+                                                     this.layer.opacity);
+                }
 
-        var imgDiv = document.createElement("div");
-        imgDiv.appendChild(eventPane);
-        return imgDiv;
+                // we need this reference to check back the viewRequestID
+                this.imgDiv.map = this.layer.map;
+            }
+            this.imgDiv.viewRequestID = this.layer.map.viewRequestID;
+
+        } else {
+            OpenLayers.Tile.Image.prototype.initImgDiv.apply(this, arguments);
+        }
     },
 
     /**
@@ -159,7 +131,7 @@
     createIFrame: function() {
         var id = this.id+'_iFrame';
         var iframe;
-        if(OpenLayers.Util.getBrowserName() == "msie") {
+        if(OpenLayers.BROWSER_NAME == "msie") {
             // InternetExplorer does not set the name attribute of an iFrame 
             // properly via DOM manipulation, so we need to do it on our own with
             // this hack.
@@ -237,13 +209,7 @@
         // adding all parameters in layer params as hidden fields to the html
         // form element
         var imageSize = this.layer.getImageSize();
-        var params = OpenLayers.Util.extend(
-            {
-                "BBOX": this.encodeBBOX ? this.bounds.toBBOX() :
-                        this.bounds.toArray(),
-                "WIDTH": imageSize.w,
-                "HEIGHT": imageSize.h
-            }, this.layer.params);
+        var params = OpenLayers.Util.getParameters(this.url);
             
         for(var par in params) {
             var field = document.createElement('input');
@@ -254,8 +220,5 @@
         }   
 
         return form;
-    },
-    
-    CLASS_NAME: "OpenLayers.Tile.Image.IFrame"
-  }
-);
+    }
+}

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/Image.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/Image.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/Image.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
@@ -75,7 +76,24 @@
      *     effects when the tile is moved or changes resolution.
      */
     backBufferTile: null,
-
+    
+    /**
+     * APIProperty: maxGetUrlLength
+     * {Number} If set, requests that would result in GET urls with more
+     * characters than the number provided will be made using form-encoded
+     * HTTP POST. It is good practice to avoid urls that are longer than 2048
+     * characters.
+     *
+     * Caution:
+     * Older versions of Gecko based browsers (e.g. Firefox < 3.5) and
+     * Opera < 10.0 do not fully support this option.
+     *
+     * Note:
+     * Do not use this option for layers that have a transitionEffect
+     * configured - IFrame tiles from POST requests can not be resized.
+     */
+    maxGetUrlLength: null,
+    
     /** TBD 3.0 - reorder the parameters to the init function to remove 
      *             URL. the getUrl() function on the layer gets called on 
      *             each draw(), so no need to specify it here.
@@ -89,17 +107,22 @@
      * bounds - {<OpenLayers.Bounds>}
      * url - {<String>} Deprecated. Remove me in 3.0.
      * size - {<OpenLayers.Size>}
+     * options - {Object}
      */   
-    initialize: function(layer, position, bounds, url, size) {
+    initialize: function(layer, position, bounds, url, size, options) {
         OpenLayers.Tile.prototype.initialize.apply(this, arguments);
 
+        if (this.maxGetUrlLength != null) {
+            OpenLayers.Util.extend(this, OpenLayers.Tile.Image.IFrame);
+        }
+
         this.url = url; //deprecated remove me
         
         this.frame = document.createElement('div'); 
         this.frame.style.overflow = 'hidden'; 
         this.frame.style.position = 'absolute'; 
 
-        this.layerAlphaHack = this.layer.alpha && OpenLayers.Util.alphaHack();
+        this.layerAlphaHack = this.layer.alpha && OpenLayers.Util.alphaHack();        
     },
 
     /** 
@@ -108,22 +131,7 @@
      */
     destroy: function() {
         if (this.imgDiv != null)  {
-            if (this.layerAlphaHack) {
-                // unregister the "load" handler
-                OpenLayers.Event.stopObservingElement(this.imgDiv.childNodes[0]);                
-            }
-
-            // unregister the "load" and "error" handlers. Only the "error" handler if
-            // this.layerAlphaHack is true.
-            OpenLayers.Event.stopObservingElement(this.imgDiv);
-            
-            if (this.imgDiv.parentNode == this.frame) {
-                this.frame.removeChild(this.imgDiv);
-                this.imgDiv.map = null;
-            }
-            this.imgDiv.urls = null;
-            // abort any currently loading image
-            this.imgDiv.src = OpenLayers.Util.getImagesLocation() + "blank.gif";
+            this.removeImgDiv();
         }
         this.imgDiv = null;
         if ((this.frame != null) && (this.frame.parentNode == this.layer.div)) { 
@@ -141,7 +149,7 @@
         
         OpenLayers.Tile.prototype.destroy.apply(this, arguments);
     },
-
+    
     /**
      * Method: clone
      *
@@ -280,13 +288,8 @@
      *     position it correctly, and set its url.
      */
     renderTile: function() {
-        if (this.imgDiv == null) {
+        if (this.layer.async) {
             this.initImgDiv();
-        }
-
-        this.imgDiv.viewRequestID = this.layer.map.viewRequestID;
-        
-        if (this.layer.async) {
             // Asyncronous image requests call the asynchronous getURL method
             // on the layer to fetch an image that covers 'this.bounds', in the scope of
             // 'this', setting the 'url' property of the layer itself, and running
@@ -296,12 +299,9 @@
             // syncronous image requests get the url and position the frame immediately,
             // and don't wait for an image request to come back.
           
-            // needed for changing to a different server for onload error
-            if (this.layer.url instanceof Array) {
-                this.imgDiv.urls = this.layer.url.slice();
-            }
-          
             this.url = this.layer.getURL(this.bounds);
+
+            this.initImgDiv();
           
             // position the frame immediately
             this.positionImage(); 
@@ -355,94 +355,129 @@
      * Creates the imgDiv property on the tile.
      */
     initImgDiv: function() {
-        
-        var offset = this.layer.imageOffset; 
-        var size = this.layer.getImageSize(this.bounds); 
-     
-        if (this.layerAlphaHack) {
-            this.imgDiv = OpenLayers.Util.createAlphaImageDiv(null,
-                                                           offset,
-                                                           size,
-                                                           null,
-                                                           "relative",
-                                                           null,
-                                                           null,
-                                                           null,
-                                                           true);
-        } else {
-            this.imgDiv = OpenLayers.Util.createImage(null,
-                                                      offset,
-                                                      size,
-                                                      null,
-                                                      "relative",
-                                                      null,
-                                                      null,
-                                                      true);
-        }
-        
-        this.imgDiv.className = 'olTileImage';
+        if (this.imgDiv == null) {
+            var offset = this.layer.imageOffset; 
+            var size = this.layer.getImageSize(this.bounds); 
 
-        /* checkImgURL used to be used to called as a work around, but it
-           ended up hiding problems instead of solving them and broke things
-           like relative URLs. See discussion on the dev list:
-           http://openlayers.org/pipermail/dev/2007-January/000205.html
+            if (this.layerAlphaHack) {
+                this.imgDiv = OpenLayers.Util.createAlphaImageDiv(null,
+                                                               offset,
+                                                               size,
+                                                               null,
+                                                               "relative",
+                                                               null,
+                                                               null,
+                                                               null,
+                                                               true);
+            } else {
+                this.imgDiv = OpenLayers.Util.createImage(null,
+                                                          offset,
+                                                          size,
+                                                          null,
+                                                          "relative",
+                                                          null,
+                                                          null,
+                                                          true);
+            }
 
-        OpenLayers.Event.observe( this.imgDiv, "load",
-            OpenLayers.Function.bind(this.checkImgURL, this) );
-        */
-        this.frame.style.zIndex = this.isBackBuffer ? 0 : 1;
-        this.frame.appendChild(this.imgDiv); 
-        this.layer.div.appendChild(this.frame); 
+            // needed for changing to a different server for onload error
+            if (this.layer.url instanceof Array) {
+                this.imgDiv.urls = this.layer.url.slice();
+            }
+      
+            this.imgDiv.className = 'olTileImage';
 
-        if(this.layer.opacity != null) {
-            
-            OpenLayers.Util.modifyDOMElement(this.imgDiv, null, null, null,
-                                             null, null, null, 
-                                             this.layer.opacity);
-        }
+            /* checkImgURL used to be used to called as a work around, but it
+               ended up hiding problems instead of solving them and broke things
+               like relative URLs. See discussion on the dev list:
+               http://openlayers.org/pipermail/dev/2007-January/000205.html
 
-        // we need this reference to check back the viewRequestID
-        this.imgDiv.map = this.layer.map;
+            OpenLayers.Event.observe( this.imgDiv, "load",
+                OpenLayers.Function.bind(this.checkImgURL, this) );
+            */
+            this.frame.style.zIndex = this.isBackBuffer ? 0 : 1;
+            this.frame.appendChild(this.imgDiv); 
+            this.layer.div.appendChild(this.frame); 
 
-        //bind a listener to the onload of the image div so that we 
-        // can register when a tile has finished loading.
-        var onload = function() {
-            
-            //normally isLoading should always be true here but there are some 
-            // right funky conditions where loading and then reloading a tile
-            // with the same url *really*fast*. this check prevents sending 
-            // a 'loadend' if the msg has already been sent
-            //
-            if (this.isLoading) { 
-                this.isLoading = false; 
-                this.events.triggerEvent("loadend"); 
+            if(this.layer.opacity != null) {
+
+                OpenLayers.Util.modifyDOMElement(this.imgDiv, null, null, null,
+                                                 null, null, null, 
+                                                 this.layer.opacity);
             }
-        };
+
+            // we need this reference to check back the viewRequestID
+            this.imgDiv.map = this.layer.map;
+
+            //bind a listener to the onload of the image div so that we 
+            // can register when a tile has finished loading.
+            var onload = function() {
+
+                //normally isLoading should always be true here but there are some 
+                // right funky conditions where loading and then reloading a tile
+                // with the same url *really*fast*. this check prevents sending 
+                // a 'loadend' if the msg has already been sent
+                //
+                if (this.isLoading) { 
+                    this.isLoading = false; 
+                    this.events.triggerEvent("loadend"); 
+                }
+            };
+
+            if (this.layerAlphaHack) { 
+                OpenLayers.Event.observe(this.imgDiv.childNodes[0], 'load', 
+                                         OpenLayers.Function.bind(onload, this));    
+            } else { 
+                OpenLayers.Event.observe(this.imgDiv, 'load', 
+                                     OpenLayers.Function.bind(onload, this)); 
+            } 
+
+
+            // Bind a listener to the onerror of the image div so that we
+            // can registere when a tile has finished loading with errors.
+            var onerror = function() {
+
+                // If we have gone through all image reload attempts, it is time
+                // to realize that we are done with this image. Since
+                // OpenLayers.Util.onImageLoadError already has taken care about
+                // the error, we can continue as if the image was loaded
+                // successfully.
+                if (this.imgDiv._attempts > OpenLayers.IMAGE_RELOAD_ATTEMPTS) {
+                    onload.call(this);
+                }
+            };
+            OpenLayers.Event.observe(this.imgDiv, "error",
+                                     OpenLayers.Function.bind(onerror, this));
+        }
         
-        if (this.layerAlphaHack) { 
-            OpenLayers.Event.observe(this.imgDiv.childNodes[0], 'load', 
-                                     OpenLayers.Function.bind(onload, this));    
-        } else { 
-            OpenLayers.Event.observe(this.imgDiv, 'load', 
-                                 OpenLayers.Function.bind(onload, this)); 
-        } 
+        this.imgDiv.viewRequestID = this.layer.map.viewRequestID;
+    },
+
+    /**
+     * Method: removeImgDiv
+     * Removes the imgDiv from the DOM and stops listening to events on it.
+     */
+    removeImgDiv: function() {
+        // unregister the "load" and "error" handlers. Only the "error" handler if
+        // this.layerAlphaHack is true.
+        OpenLayers.Event.stopObservingElement(this.imgDiv);
         
+        if (this.imgDiv.parentNode == this.frame) {
+            this.frame.removeChild(this.imgDiv);
+            this.imgDiv.map = null;
+        }
+        this.imgDiv.urls = null;
 
-        // Bind a listener to the onerror of the image div so that we
-        // can registere when a tile has finished loading with errors.
-        var onerror = function() {
-
-            // If we have gone through all image reload attempts, it is time
-            // to realize that we are done with this image. Since
-            // OpenLayers.Util.onImageLoadError already has taken care about
-            // the error, we can continue as if the image was loaded
-            // successfully.
-            if (this.imgDiv._attempts > OpenLayers.IMAGE_RELOAD_ATTEMPTS) {
-                onload.call(this);
-            }
-        };
-        OpenLayers.Event.observe(this.imgDiv, "error",
-                                 OpenLayers.Function.bind(onerror, this));
+        var child = this.imgDiv.firstChild;
+        //check for children (alphaHack img or IFrame)
+        if (child) {
+            OpenLayers.Event.stopObservingElement(child);
+            this.imgDiv.removeChild(child);
+            delete child;
+        } else {
+            // abort any currently loading image
+            this.imgDiv.src = OpenLayers.Util.getImagesLocation() + "blank.gif";
+        }
     },
 
     /**
@@ -554,7 +589,7 @@
         // before continuing execution.
         if (OpenLayers.Util.indexOf(this.layer.SUPPORTED_TRANSITIONS, 
                 this.layer.transitionEffect) != -1) {
-            if (navigator.userAgent.toLowerCase().indexOf("gecko") != -1) { 
+            if (OpenLayers.IS_GECKO === true) { 
                 this.frame.scrollLeft = this.frame.scrollLeft; 
             } 
         }
@@ -573,5 +608,5 @@
 );
 
 OpenLayers.Tile.Image.useBlankTile = ( 
-    OpenLayers.Util.getBrowserName() == "safari" || 
-    OpenLayers.Util.getBrowserName() == "opera"); 
+    OpenLayers.BROWSER_NAME == "safari" || 
+    OpenLayers.BROWSER_NAME == "opera"); 

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/WFS.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/WFS.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile/WFS.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
  

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tile.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,11 +1,13 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 
 /*
  * @requires OpenLayers/Util.js
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /*
@@ -93,8 +95,9 @@
      * bounds - {<OpenLayers.Bounds>}
      * url - {<String>}
      * size - {<OpenLayers.Size>}
+     * options - {Object}
      */   
-    initialize: function(layer, position, bounds, url, size) {
+    initialize: function(layer, position, bounds, url, size, options) {
         this.layer = layer;
         this.position = position.clone();
         this.bounds = bounds.clone();
@@ -105,6 +108,8 @@
         this.id = OpenLayers.Util.createUniqueID("Tile_");
         
         this.events = new OpenLayers.Events(this, null, this.EVENT_TYPES);
+
+        OpenLayers.Util.extend(this, options);
     },
 
     /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tween.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tween.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Tween.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,5 +1,6 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers/Util.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers/Util.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers/Util.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,9 +1,11 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /**
  * @requires OpenLayers/Console.js
+ * @requires OpenLayers/Lang.js
  */
 
 /**
@@ -1061,12 +1063,26 @@
     for(var i=0, len=pairs.length; i<len; ++i) {
         var keyValue = pairs[i].split('=');
         if (keyValue[0]) {
-            var key = decodeURIComponent(keyValue[0]);
-            var value = keyValue[1] || ''; //empty string if no value
 
-            //decode individual values (being liberal by replacing "+" with " ")
-            value = decodeURIComponent(value.replace(/\+/g, " ")).split(",");
+            var key = keyValue[0];
+            try {
+                key = decodeURIComponent(key);
+            } catch (err) {
+                key = unescape(key);
+            }
+            
+            // being liberal by replacing "+" with " "
+            var value = (keyValue[1] || '').replace(/\+/g, " ");
 
+            try {
+                value = decodeURIComponent(value);
+            } catch (err) {
+                value = unescape(value);
+            }
+            
+            // follow OGC convention of comma delimited values
+            value = value.split(",")
+
             //if there's only one value, do not return as array                    
             if (value.length == 1) {
                 value = value[0];
@@ -1321,51 +1337,142 @@
 
 /**
  * Function: pagePositon
- * Calculates the position of an element on the page. 
+ * Calculates the position of an element on the page (see
+ * http://code.google.com/p/doctype/wiki/ArticlePageOffset)
  *
+ * OpenLayers.Util.pagePosition is based on Yahoo's getXY method, which is
+ * Copyright (c) 2006, Yahoo! Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use of this software in source and binary forms, with or
+ * without modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of Yahoo! Inc. nor the names of its contributors may be
+ *   used to endorse or promote products derived from this software without
+ *   specific prior written permission of Yahoo! Inc.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
  * Parameters:
  * forElement - {DOMElement}
  * 
  * Returns:
- * {Array} two item array, L value then T value.
+ * {Array} two item array, Left value then Top value.
  */
-OpenLayers.Util.pagePosition = function(forElement) {
-    var valueT = 0, valueL = 0;
+OpenLayers.Util.pagePosition =  function(forElement) {
+    // NOTE: If element is hidden (display none or disconnected or any the
+    // ancestors are hidden) we get (0,0) by default but we still do the
+    // accumulation of scroll position.
 
-    var element = forElement;
-    var child = forElement;
-    while(element) {
+    var pos = [0, 0];
+    var viewportElement = OpenLayers.Util.getViewportElement();
+    if (!forElement || forElement == window || forElement == viewportElement) {
+        // viewport is always at 0,0 as that defined the coordinate system for
+        // this function - this avoids special case checks in the code below
+        return pos;
+    }
 
-        if(element == document.body) {
-            if(OpenLayers.Element.getStyle(child, 'position') == 'absolute') {
-                break;
+    // Gecko browsers normally use getBoxObjectFor to calculate the position.
+    // When invoked for an element with an implicit absolute position though it
+    // can be off by one. Therefore the recursive implementation is used in
+    // those (relatively rare) cases.
+    var BUGGY_GECKO_BOX_OBJECT =
+        OpenLayers.IS_GECKO && document.getBoxObjectFor &&
+        OpenLayers.Element.getStyle(forElement, 'position') == 'absolute' &&
+        (forElement.style.top == '' || forElement.style.left == '');
+
+    var parent = null;
+    var box;
+
+    if (forElement.getBoundingClientRect) { // IE
+        box = forElement.getBoundingClientRect();
+        var scrollTop = viewportElement.scrollTop;
+        var scrollLeft = viewportElement.scrollLeft;
+
+        pos[0] = box.left + scrollLeft;
+        pos[1] = box.top + scrollTop;
+
+    } else if (document.getBoxObjectFor && !BUGGY_GECKO_BOX_OBJECT) { // gecko
+        // Gecko ignores the scroll values for ancestors, up to 1.9.  See:
+        // https://bugzilla.mozilla.org/show_bug.cgi?id=328881 and
+        // https://bugzilla.mozilla.org/show_bug.cgi?id=330619
+
+        box = document.getBoxObjectFor(forElement);
+        var vpBox = document.getBoxObjectFor(viewportElement);
+        pos[0] = box.screenX - vpBox.screenX;
+        pos[1] = box.screenY - vpBox.screenY;
+
+    } else { // safari/opera
+        pos[0] = forElement.offsetLeft;
+        pos[1] = forElement.offsetTop;
+        parent = forElement.offsetParent;
+        if (parent != forElement) {
+            while (parent) {
+                pos[0] += parent.offsetLeft;
+                pos[1] += parent.offsetTop;
+                parent = parent.offsetParent;
             }
         }
-        
-        valueT += element.offsetTop  || 0;
-        valueL += element.offsetLeft || 0;
 
-        child = element;
-        try {
-            // wrapping this in a try/catch because IE chokes on the offsetParent
-            element = element.offsetParent;
-        } catch(e) {
-            OpenLayers.Console.error(OpenLayers.i18n(
-                                  "pagePositionFailed",{'elemId':element.id}));
-            break;
+        var browser = OpenLayers.BROWSER_NAME;
+
+        // opera & (safari absolute) incorrectly account for body offsetTop
+        if (browser == "opera" || (browser == "safari" &&
+              OpenLayers.Element.getStyle(forElement, 'position') == 'absolute')) {
+            pos[1] -= document.body.offsetTop;
         }
-    }
 
-    element = forElement;
-    while(element) {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-        element = element.parentNode;
+        // accumulate the scroll positions for everything but the body element
+        parent = forElement.offsetParent;
+        while (parent && parent != document.body) {
+            pos[0] -= parent.scrollLeft;
+            // see https://bugs.opera.com/show_bug.cgi?id=249965
+            if (browser != "opera" || parent.tagName != 'TR') {
+                pos[1] -= parent.scrollTop;
+            }
+            parent = parent.offsetParent;
+        }
     }
     
-    return [valueL, valueT];
+    return pos;
 };
 
+/**
+ * Function: getViewportElement
+ * Returns die viewport element of the document. The viewport element is
+ * usually document.documentElement, except in IE,where it is either
+ * document.body or document.documentElement, depending on the document's
+ * compatibility mode (see
+ * http://code.google.com/p/doctype/wiki/ArticleClientViewportElement)
+ */
+OpenLayers.Util.getViewportElement = function() {
+    var viewportElement = arguments.callee.viewportElement;
+    if (viewportElement == undefined) {
+        viewportElement = (OpenLayers.BROWSER_NAME == "msie" &&
+            document.compatMode != 'CSS1Compat') ? document.body :
+            document.documentElement;
+        arguments.callee.viewportElement = viewportElement;
+    }
+    return viewportElement;
+};
 
 /** 
  * Function: isEquivalentUrl
@@ -1525,8 +1632,46 @@
     return head;
 };
 
+/**
+ * Constant: IS_GECKO
+ * {Boolean} True if the userAgent reports the browser to use the Gecko engine
+ */
+OpenLayers.IS_GECKO = (function() {
+    var ua = navigator.userAgent.toLowerCase();
+    return ua.indexOf("webkit") == -1 && ua.indexOf("gecko") != -1;
+})();
 
 /**
+ * Constant: BROWSER_NAME
+ * {String}
+ * A substring of the navigator.userAgent property.  Depending on the userAgent
+ *     property, this will be the empty string or one of the following:
+ *     * "opera" -- Opera
+ *     * "msie"  -- Internet Explorer
+ *     * "safari" -- Safari
+ *     * "firefox" -- FireFox
+ *     * "mozilla" -- Mozilla
+ */
+OpenLayers.BROWSER_NAME = (function() {
+    var name = "";
+    var ua = navigator.userAgent.toLowerCase();
+    if (ua.indexOf("opera") != -1) {
+        name = "opera";
+    } else if (ua.indexOf("msie") != -1) {
+        name = "msie";
+    } else if (ua.indexOf("safari") != -1) {
+        name = "safari";
+    } else if (ua.indexOf("mozilla") != -1) {
+        if (ua.indexOf("firefox") != -1) {
+            name = "firefox";
+        } else {
+            name = "mozilla";
+        }
+    }
+    return name;
+})();
+
+/**
  * Function: getBrowserName
  * 
  * Returns:
@@ -1544,29 +1689,9 @@
  *           return an empty string.
  */
 OpenLayers.Util.getBrowserName = function() {
-    var browserName = "";
-    
-    var ua = navigator.userAgent.toLowerCase();
-    if ( ua.indexOf( "opera" ) != -1 ) {
-        browserName = "opera";
-    } else if ( ua.indexOf( "msie" ) != -1 ) {
-        browserName = "msie";
-    } else if ( ua.indexOf( "safari" ) != -1 ) {
-        browserName = "safari";
-    } else if ( ua.indexOf( "mozilla" ) != -1 ) {
-        if ( ua.indexOf( "firefox" ) != -1 ) {
-            browserName = "firefox";
-        } else {
-            browserName = "mozilla";
-        }
-    }
-    
-    return browserName;
+    return OpenLayers.BROWSER_NAME;
 };
 
-
-
-    
 /**
  * Method: getRenderedDimensions
  * Renders the contentHTML offscreen to determine actual dimensions for

Modified: sandbox/ahocevar/renderer-ng/lib/OpenLayers.js
===================================================================
--- sandbox/ahocevar/renderer-ng/lib/OpenLayers.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/lib/OpenLayers.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,67 +1,64 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
+/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for 
+ * full list of contributors). Published under the Clear BSD license.  
+ * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
 
 /* 
  * @requires OpenLayers/BaseTypes.js
  * @requires OpenLayers/Lang/en.js
  * @requires OpenLayers/Console.js
- */ 
+ */
+ 
+/*
+ * TODO: In 3.0, we will stop supporting build profiles that include
+ * OpenLayers.js. This means we will not need the singleFile and scriptFile
+ * variables, because we don't have to handle the singleFile case any more.
+ */
 
 (function() {
     /**
      * Before creating the OpenLayers namespace, check to see if
      * OpenLayers.singleFile is true.  This occurs if the
      * OpenLayers/SingleFile.js script is included before this one - as is the
-     * case with single file builds.
+     * case with old single file build profiles that included both
+     * OpenLayers.js and OpenLayers/SingleFile.js.
      */
     var singleFile = (typeof OpenLayers == "object" && OpenLayers.singleFile);
     
     /**
-     * Cache for the script location returned from
-     * OpenLayers._getScriptLocation
+     * Relative path of this script.
      */
-    var scriptLocation;
+    var scriptName = (!singleFile) ? "lib/OpenLayers.js" : "OpenLayers.js";
     
     /**
      * Namespace: OpenLayers
      * The OpenLayers object provides a namespace for all things OpenLayers
      */
     window.OpenLayers = {
-        
         /**
-         * Property: _scriptName
-         * {String} Relative path of this script.
-         */
-        _scriptName: (!singleFile) ? "lib/OpenLayers.js" : "OpenLayers.js",
-
-        /**
-         * Function: _getScriptLocation
-         * Return the path to this script.
+         * Method: _getScriptLocation
+         * Return the path to this script. This is also implemented in
+         * OpenLayers/SingleFile.js
          *
          * Returns:
          * {String} Path to this script
          */
-        _getScriptLocation: function () {
-            if (scriptLocation != undefined) {
-                return scriptLocation;
-            }
-            scriptLocation = "";            
-            var isOL = new RegExp("(^|(.*?\\/))(" + OpenLayers._scriptName + ")(\\?|$)");
-         
-            var scripts = document.getElementsByTagName('script');
-            for (var i=0, len=scripts.length; i<len; i++) {
-                var src = scripts[i].getAttribute('src');
-                if (src) {
-                    var match = src.match(isOL);
-                    if(match) {
-                        scriptLocation = match[1];
+        _getScriptLocation: (function() {
+            var r = new RegExp("(^|(.*?\\/))(" + scriptName + ")(\\?|$)"),
+                s = document.getElementsByTagName('script'),
+                src, m, l = "";
+            for(var i=0, len=s.length; i<len; i++) {
+                src = s[i].getAttribute('src');
+                if(src) {
+                    var m = src.match(r);
+                    if(m) {
+                        l = m[1];
                         break;
                     }
                 }
             }
-            return scriptLocation;
-        }
+            return (function() { return l; });
+        })()
     };
     /**
      * OpenLayers.singleFile is a flag indicating this file is being included
@@ -72,7 +69,7 @@
      * 
      * When we *are* part of a SFL build we do not dynamically include the 
      * OpenLayers library code as it will be appended at the end of this file.
-      */
+     */
     if(!singleFile) {
         var jsfiles = new Array(
             "OpenLayers/Util.js",
@@ -130,6 +127,7 @@
             "OpenLayers/Layer/GeoRSS.js",
             "OpenLayers/Layer/Boxes.js",
             "OpenLayers/Layer/XYZ.js",
+            "OpenLayers/Layer/Bing.js",
             "OpenLayers/Layer/TMS.js",
             "OpenLayers/Layer/TileCache.js",
             "OpenLayers/Layer/Zoomify.js",
@@ -292,8 +290,8 @@
             "OpenLayers/Format/WMSGetFeatureInfo.js",
             "OpenLayers/Format/SOSCapabilities.js",
             "OpenLayers/Format/SOSCapabilities/v1_0_0.js",
-            "OpenLayers/Format/SOSGetObservation.js",
             "OpenLayers/Format/SOSGetFeatureOfInterest.js",
+            "OpenLayers/Format/SOSGetObservation.js",
             "OpenLayers/Format/OWSContext.js",
             "OpenLayers/Format/OWSContext/v0_3_1.js",
             "OpenLayers/Format/WMTSCapabilities.js",

Modified: sandbox/ahocevar/renderer-ng/license.txt
===================================================================
--- sandbox/ahocevar/renderer-ng/license.txt	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/license.txt	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,9 +1,10 @@
 This license applies to all code and content in the 'branches', 'trunk', and
 'project' directories of the Openlayers code repository at svn.openlayers.org,
 and applies to all release of OpenLayers later than 2.5.
+ 
+Copyright (c) 2005-2010 OpenLayers Contributors. See authors.txt for
+  full list.
 
-Copyright (c) 2005-2008 MetaCarta, Inc.
-
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -18,9 +19,9 @@
    documentation and/or other materials provided with the
    distribution.
 
- * Neither the name of MetaCarta, Inc. nor the names of its
-   contributors may be used to endorse or promote products derived
-   from this software without specific prior written permission.
+ * Neither the name of OpenLayers nor the names of its contributors 
+   may be used to endorse or promote products derived from this 
+   software without specific prior written permission.
 
 NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
 GRANTED BY THIS LICENSE.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT

Modified: sandbox/ahocevar/renderer-ng/readme.txt
===================================================================
--- sandbox/ahocevar/renderer-ng/readme.txt	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/readme.txt	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,7 +1,9 @@
 OpenLayers
 -=-=-=-=-=-
-Copyright (c) 2005-2008 MetaCarta, Inc.
 
+Copyright (c) 2005-2010 OpenLayers Contributors. See authors.txt for
+more details.
+
 OpenLayers is a JavaScript library for building map applications
 on the web. OpenLayers is made available under a BSD-license.
 Please see license.txt in this distribution for more details.
@@ -29,7 +31,7 @@
 
 As an example, using bash (with the release files in ~/openlayers ):
 $ cd /var/www/html
-$ cp ~/openlayers/build/OpenLayers.js ./
+$ cp ~/openlayers/OpenLayers.js ./
 $ cp -R ~/openlayers/theme ./
 $ cp -R ~/openlayers/img ./
 

Modified: sandbox/ahocevar/renderer-ng/release-license.txt
===================================================================
--- sandbox/ahocevar/renderer-ng/release-license.txt	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/release-license.txt	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,3 +1,3 @@
 This license information is now available at:
-
+ 
 http://svn.openlayers.org/trunk/openlayers/license.txt

Modified: sandbox/ahocevar/renderer-ng/tests/BaseTypes/Element.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/BaseTypes/Element.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/BaseTypes/Element.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -212,7 +212,7 @@
         style = "chickenHead";
         t.ok(OpenLayers.Element.getStyle(elem, style) == null, "get style on 'auto' style returns null");
 
-        if (OpenLayers.Util.getBrowserName() == "opera") {
+        if (OpenLayers.BROWSER_NAME == "opera") {
             elem.style.top = "15px";
             style = "top";
 

Modified: sandbox/ahocevar/renderer-ng/tests/Control/LayerSwitcher.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Control/LayerSwitcher.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Control/LayerSwitcher.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -71,7 +71,7 @@
 
     function test_Control_LayerSwitcher_redraw (t) {
 
-        t.plan( (OpenLayers.Util.getBrowserName() == "opera" ? 9 : 19 ) );
+        t.plan( (OpenLayers.BROWSER_NAME == "opera" ? 9 : 19 ) );
 
         map = new OpenLayers.Map('map');
         var layer = new OpenLayers.Layer.WMS("WMS", 
@@ -98,7 +98,7 @@
         t.eq(markersInput.value, markers.name, "wms correctly valued");
 
         t.eq(false, control.checkRedraw(), "check redraw is false");
-        if (OpenLayers.Util.getBrowserName() != "opera") { 
+        if (OpenLayers.BROWSER_NAME != "opera") { 
             control = new OpenLayers.Control.LayerSwitcher();
             var myredraw = control.redraw;
             control.redraw = function() { 

Modified: sandbox/ahocevar/renderer-ng/tests/Control/Measure.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Control/Measure.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Control/Measure.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -68,52 +68,297 @@
         
     }
 
-    function test_partial(t) {
-        t.plan(1);
+    function test_partial(t) {        
 
-        // set up
+        t.plan(28);        
+        
+        var map = new OpenLayers.Map({
+            div: "map",
+            units: "m",
+            resolutions: [1],
+            layers: [
+                new OpenLayers.Layer(null, {
+                    isBaseLayer: true
+                })
+            ],
+            center: new OpenLayers.LonLat(0, 0)
+        });
 
-        var map, layer, control, geometry, log;
+        var log = [];
+        var control = new OpenLayers.Control.Measure(
+            OpenLayers.Handler.Path, {persist: true, 
+                eventListeners: {
+                    measurepartial: function(evt) {
+                        log.push(evt);
+                    },
+                    measure: function(evt){
+                        log.push(evt);
+                    }
+                }
+            }
+        );
+        map.addControl(control);
+        control.activate();
+        
+        
+        // convenience function to trigger mouse events
+        function trigger(type, x, y) {
+            map.events.triggerEvent(type, {
+                xy: new OpenLayers.Pixel(x, y)
+            })
+        };
+        
+        // delay in seconds
+        var delay = control.partialDelay / 1000;
+        
+        // establish first point
+        trigger("mousedown", 0, 0);
+        trigger("mouseup", 0, 0);
 
-        map = new OpenLayers.Map("map", {units: "m"});
+        
+        // a) move 10 pixels and click
+        trigger("mousemove", 0, 10);
+        trigger("mousedown", 0, 10);
+        trigger("mouseup", 0, 10);
+        
+        // confirm measurepartial is not fired before delay
+        t.eq(log.length, 0, "a) no event fired yet")
 
-        layer = new OpenLayers.Layer(null, {isBaseLayer: true});
-        map.addLayer(layer);
+        t.delay_call( 
+            // wait for delay then confirm event was logged
+            delay, function() {
+                t.eq(log.length, 1, "a) event logged")
+                t.eq(log[0].type, "measurepartial", "a) event logged");
+                t.eq(log[0].measure, 10, "a) correct measure");
+                
+                // b) move 10 pixels and click
+                trigger("mousemove", 0, 20);
+                trigger("mousedown", 0, 20);
+                trigger("mouseup", 0, 20);
+                
+                // confirm measurepartial is not fired before delay
+                t.eq(log.length, 1, "b) no event fired yet")
+                
+            },
+            delay, function() {
+                t.eq(log.length, 2, "b) event logged");
+                t.eq(log[1].type, "measurepartial", "b) correct type");
+                t.eq(log[1].measure, 20, "b) correct measure");
 
-        map.zoomToMaxExtent();
+                // c) move 10 pixels and click
+                trigger("mousemove", 0, 30);
+                trigger("mousedown", 0, 30);
+                trigger("mouseup", 0, 30);
+            },
+            // wait for half delay and confirm event not logged
+            delay / 2, function() {
+                // confirm measurepartial is not fired before delay
+                t.eq(log.length, 2, "c) no event fired yet")
+            },
+            // wait for rest of delay and confirm event logged
+            delay / 2, function() {
+                t.eq(log.length, 3, "c) event logged");
+                t.eq(log[2].type, "measurepartial", "c) correct type");
+                t.eq(log[2].measure, 30, "c) correct measure");
+                
+                // d) move 10 pixels and click
+                trigger("mousemove", 0, 40);
+                trigger("mousedown", 0, 40);
+                trigger("mouseup", 0, 40);
 
-        control = new OpenLayers.Control.Measure(OpenLayers.Handler.Path, {
-            partialDelay: null
-        });
+                // confirm measurepartial is not fired before delay
+                t.eq(log.length, 3, "d) no event fired yet")
+                
+                // e) double click to finish
+                trigger("dblclick", 0, 40);
 
-        map.addControl(control);
-        control.activate();
+                t.eq(log.length, 4, "e) event logged");
+                t.eq(log[3].type, "measure", "e) correct type");
+                t.eq(log[3].measure, 40, "e) correct measure");                
+            },
+            // wait for rest of delay and confirm no measurepartial logged
+            delay, function() {
+                // confirm measurepartial is not fired after dblclick
+                t.eq(log.length, 4, "e) no additional event fired");
+                
+                // change to freehand mode and confirm synchronous event dispatch
+                control.handler.freehand = true;
+                // clear log
+                log = [];
+                
+                // f) establish first freehand point
+                trigger("mousedown", 0, 0);
+                t.eq(log.length, 0, "f) no event fired yet")
+                
+                // g) move 10 pixels
+                trigger("mousemove", 10, 0);
 
-        control.events.on({
-            "measurepartial": function(e) {
-                log.measure = e.measure;
+                t.eq(log.length, 1, "g) event logged");
+                t.eq(log[0].type, "measurepartial", "g) correct type");
+                t.eq(log[0].measure, 10, "g) correct measure");
+                
+                // h) move 10 pixels
+                trigger("mousemove", 20, 0);
+
+                t.eq(log.length, 2, "h) event logged");
+                t.eq(log[1].type, "measurepartial", "h) correct type");
+                t.eq(log[1].measure, 20, "h) correct measure");
+                
+                // i) mouse up to finish
+                trigger("mouseup", 20, 0);
+
+                t.eq(log.length, 3, "i) event logged");
+                t.eq(log[2].type, "measure", "i) correct type");
+                t.eq(log[2].measure, 20, "i) correct measure");
+                
+                // j) clean up
+                log = [];
+                map.destroy();
+            },
+            // wait for delay and confirm event not logged
+            delay, function() {
+                t.eq(log.length, 0, "j) no event fired after destroy");
             }
+        );
+        
+    }
+
+    function test_immediate(t) {
+        t.plan(29);
+        
+        var map = new OpenLayers.Map({
+            div: "map",
+            units: "m",
+            resolutions: [1],
+            layers: [
+                new OpenLayers.Layer(null, {
+                    isBaseLayer: true
+                })
+            ],
+            center: new OpenLayers.LonLat(0, 0)
         });
+        
+        var log = [];
+        var control = new OpenLayers.Control.Measure(
+            OpenLayers.Handler.Path, {
+                persist: true,
+                immediate: true,
+                eventListeners: {
+                    measurepartial: function(evt) {
+                        log.push(evt);
+                    },
+                    measure: function(evt){
+                        log.push(evt);
+                    }
+                }
+            }
+        );
+        map.addControl(control);
+        control.activate();
+        
+        // convenience function to trigger mouse events
+        function trigger(type, x, y) {
+            map.events.triggerEvent(type, {
+                xy: new OpenLayers.Pixel(x, y)
+            })
+        };
 
-        // test
+        // delay in seconds
+        var delay = control.partialDelay / 1000;
 
-        geometry = new OpenLayers.Geometry.LineString([
-            new OpenLayers.Geometry.Point(1, 1),
-            new OpenLayers.Geometry.Point(2, 1)
-        ]);
+        // a) establish first point
+        trigger("mousedown", 0, 0);
+        trigger("mouseup", 0, 0);
 
-        log = {};
-        control.measurePartial(null, geometry);
-        geometry.components[1].x = 3;
-        t.delay_call(0.2, function() {
+        // move 10 pixels
+        trigger("mousemove", 0, 10);
 
-            t.eq(log.measure, 1, "partial measure is correct");
+        t.eq(log.length, 0, "a) no event fired yet");
+        
+        t.delay_call(
+            delay, function() {
+                // confirm measurepartial is fired
+                t.eq(log.length, 1, "a) event logged");
+                t.eq(log[0].type, "measurepartial", "a) correct type");
+                // mousemove within the partialDelay fires no event, so the
+                // measure below is the one of the initial point
+                t.eq(log[0].measure, 0, "a) correct measure");
 
-            // tear down
-            map.destroy
-        });
-    };
+                // b) move 10 pixels
+                trigger("mousemove", 0, 20);
+                // c) move 10 pixels again
+                trigger("mousemove", 0, 30);
 
+                // confirm measurepartial is fired 2 times
+                t.eq(log.length, 3, "b) event logged");
+                t.eq(log[1].type, "measurepartial", "b) correct type");
+                t.eq(log[1].measure, 20, "b) correct measure");
+                t.eq(log[2].type, "measurepartial", "c) correct type");
+                t.eq(log[2].measure, 30, "c) correct measure");
+
+                // d) switch immediate measurement off
+                control.setImmediate(false);
+                t.eq(control.immediate, false, "d) immediate is false");
+
+                // e) move 10 pixels and click
+                trigger("mousemove", 0, 40);
+                trigger("mousedown", 0, 40);
+                trigger("mouseup", 0, 40);
+                // confirm measurepartial is not fired before delay
+                t.eq(log.length, 3, "e) no event fired yet")
+            },
+            // wait for delay then confirm event was logged
+            delay, function() {
+                t.eq(log.length, 4, "e) event logged")
+                t.eq(log[3].type, "measurepartial", "e) correct type");
+                t.eq(log[3].measure, 40, "e) correct measure");
+
+                // f) switch immediate measurement on
+                control.setImmediate(true);
+                t.eq(control.immediate, true, "f) immediate is true");
+
+                // g) move 10 pixels
+                trigger("mousemove", 0, 50);
+            },
+            delay, function() {
+                t.eq(log.length, 5, "g) event logged");
+                t.eq(log[4].type, "measurepartial", "g) correct type");
+                t.eq(log[4].measure, 50, "g) correct measure");
+
+                // h) move 10 pixels
+                trigger("mousemove", 0, 60);
+
+                t.eq(log.length, 6, "h) event logged");
+                t.eq(log[5].type, "measurepartial", "h) correct type");
+                t.eq(log[5].measure, 60, "h) correct measure");
+
+                // i) double click to finish
+                trigger("mousedown", 0, 60);
+                trigger("mouseup", 0, 60);
+                t.eq(log.length, 6, "i) no event fired yet");
+            },
+            delay, function() {
+                t.eq(log.length, 7, "i) event logged");
+                t.eq(log[6].type, "measurepartial", "i) correct type");
+                t.eq(log[6].measure, 60, "i) correct measure");
+                
+                trigger("dblclick", 0, 60);
+                t.eq(log.length, 8, "i) event logged");
+                t.eq(log[7].type, "measure", "i) correct type");
+                t.eq(log[7].measure, 60, "i) correct measure");
+                // clear log
+                log = [];
+
+                // j) clean up
+                map.destroy();
+                // wait for delay and confirm event not logged
+            },
+            delay, function() {
+                t.eq(log.length, 0, "j) no event fired after destroy");
+            }
+        );
+    }
+    
   </script>
 </head>
 <body>

Modified: sandbox/ahocevar/renderer-ng/tests/Control/ModifyFeature.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Control/ModifyFeature.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Control/ModifyFeature.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -473,9 +473,13 @@
     }
 
     function test_onModificationStart(t) {
-        t.plan(1);
+        t.plan(5);
         var map = new OpenLayers.Map("map");
-        var layer = new OpenLayers.Layer.Vector();
+        var layer = new OpenLayers.Layer.Vector(null, {
+            styleMap: new OpenLayers.StyleMap({
+                "vertex": new OpenLayers.Style({foo: "bar"})
+            }, {extendDefault: false})
+        });
         map.addLayer(layer);
         var control = new OpenLayers.Control.ModifyFeature(layer);
         map.addControl(control);
@@ -483,14 +487,38 @@
         
         // make sure onModificationStart is called on feature selection
         var testFeature = new OpenLayers.Feature.Vector(
-            new OpenLayers.Geometry.Point(Math.random(), Math.random())
+            OpenLayers.Geometry.fromWKT("LINESTRING(3 4,10 50,20 25)")
         );
+        layer.addFeatures([testFeature]);
         control.onModificationStart = function(feature) {
             t.eq(feature.id, testFeature.id,
                  "onModificationStart called with the right feature");
         };
         control.selectFeature(testFeature);
         
+        // make sure styles are set correctly from default style
+        t.eq(control.virtualStyle, OpenLayers.Util.applyDefaults({
+            strokeOpacity: 0.3,
+            fillOpacity: 0.3
+        }, OpenLayers.Feature.Vector.style["default"]), "virtual style set correctly");
+        var vertex = layer.features[layer.features.length-1];
+        t.eq(vertex.renderIntent, null, "vertex style set correctly - uses default style");
+        control.unselectFeature(testFeature);
+        
+        // make sure styles are set correctly with vertexRenderIntent
+        control = new OpenLayers.Control.ModifyFeature(layer, {vertexRenderIntent: "vertex"});
+        map.addControl(control);
+        control.activate();
+        control.selectFeature(testFeature);
+        t.eq(control.virtualStyle, {
+            strokeOpacity: 0.3,
+            fillOpacity: 0.3,
+            foo: "bar"
+        }, "virtual style set correctly");
+        var vertex = layer.features[layer.features.length-1];
+        t.eq(vertex.renderIntent, "vertex", "vertex style set correctly - uses 'vertex' renderIntent");
+        control.unselectFeature(testFeature);
+        
         map.destroy();
     }
     

Modified: sandbox/ahocevar/renderer-ng/tests/Control/PanZoom.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Control/PanZoom.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Control/PanZoom.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -43,7 +43,7 @@
 
     function test_Control_PanZoom_control_events (t) {
 
-        if ( !window.document.createEvent || OpenLayers.Util.getBrowserName() == "opera" || !t.open_window) {
+        if ( !window.document.createEvent || OpenLayers.BROWSER_NAME == "opera" || !t.open_window) {
             //ie can't simulate mouseclicks
             t.plan(0);
             t.debug_print("FIXME: This browser does not support the PanZoom test at this time.");

Modified: sandbox/ahocevar/renderer-ng/tests/Control/Panel.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Control/Panel.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Control/Panel.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -67,7 +67,7 @@
 
         panel.redrawsCount = 0;              
         panel.activateControl(toggleControl);
-        t.ok((panel.redrawsCount > 0),"Redraw called on activated toggle " +
+        t.eq(panel.redrawsCount, 1, "Redraw called on activated toggle " +
             panel.redrawsCount + " times.");
         t.ok(toolControl.active && !anotherToolControl.active && toggleControl.active,
               "activated the toggle control, which has no influence on the tool & togggle controls.");
@@ -211,6 +211,37 @@
         map.destroy();
     } 
 
+    function test_Control_Panel_autoActivate (t) {
+        t.plan(1);
+        var map = new OpenLayers.Map('map');
+        var controlNoDeactive = new OpenLayers.Control({autoActivate:true});
+        var chkDeactivate = function () {
+            t.ok(false, "Tool control autoActivate:true was deactivated unnecessarily");
+        };
+        controlNoDeactive.events.on({deactivate: chkDeactivate});
+        var panel = new OpenLayers.Control.Panel();
+        
+        map.addControl(panel);
+        panel.addControls([controlNoDeactive]);
+        controlNoDeactive.events.un({deactivate: chkDeactivate});
+        t.ok(!controlNoDeactive.active, "Tool control autoActivate:true is not active");
+        
+    }
+    function test_Control_Panel_deactivate (t) {
+        t.plan(2);
+        var map = new OpenLayers.Map('map');
+        var control = new OpenLayers.Control();
+        var panel = new OpenLayers.Control.Panel();        
+        map.addControl(panel);
+        panel.addControls([control]);        
+        t.ok(panel.div.innerHTML != "", "Panel displayed after activate");        
+        
+        panel.deactivate();
+        t.ok(panel.div.innerHTML == "", 
+            "Panel is not displayed after deactivate without any active control");
+
+        map.destroy();
+    }
   </script>
 </head>
 <body>

Modified: sandbox/ahocevar/renderer-ng/tests/Control/SLDSelect.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Control/SLDSelect.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Control/SLDSelect.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -31,7 +31,7 @@
     }
 
     function test_select(t) {
-        t.plan(8);
+        t.plan(9);
         var parser = new OpenLayers.Format.WFSDescribeFeatureType();
         var map = new OpenLayers.Map('map');
         var layer = new OpenLayers.Layer.WMS('Foo', 'http://foo', {LAYERS: 'AAA64'});
@@ -80,8 +80,9 @@
         control.select(geometry);
         control.events.unregister("selected", this, testEvent);
         t.eq(map.layers.length, 2, "Selection layer has been created and added to the map");
-        t.eq(map.layers[1] instanceof OpenLayers.Layer.WMS.Post, true, "A WMS Post layer has been created as the selection layer");
-        var expected_sld = '<sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><sld:NamedLayer><sld:Name>AAA64</sld:Name><sld:UserStyle><sld:Name>default</sld:Name><sld:FeatureTypeStyle><sld:Rule><sld:Name>default</sld:Name><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><ogc:PropertyName>geometry</ogc:PropertyName><gml:Box xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-3.5355339059327,-3.5355339059327 3.5355339059327,3.5355339059327</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter><sld:LineSymbolizer><sld:Stroke><sld:CssParameter name="stroke">#FF0000</sld:CssParameter><sld:CssParameter name="stroke-width">2</sld:CssParameter></sld:Stroke></sld:LineSymbol
 izer></sld:Rule></sld:FeatureTypeStyle></sld:UserStyle></sld:NamedLayer></sld:StyledLayerDescriptor>';
+        t.eq(map.layers[1] instanceof OpenLayers.Layer.WMS, true, "A WMS layer has been created as the selection layer");
+        t.eq(map.layers[1].tileOptions.maxGetUrlLength, 2048, "Selection layer will automatically switch to HTTP Post if content gets longer than 2048");
+        var expected_sld = '<sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><sld:NamedLayer><sld:Name>AAA64</sld:Name><sld:UserStyle><sld:Name>default</sld:Name><sld:FeatureTypeStyle><sld:Rule><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><ogc:PropertyName>geometry</ogc:PropertyName><gml:Box xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-3.5355339059327,-3.5355339059327 3.5355339059327,3.5355339059327</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter><sld:LineSymbolizer><sld:Stroke><sld:CssParameter name="stroke">#FF0000</sld:CssParameter><sld:CssParameter name="stroke-width">2</sld:CssParameter></sld:Stroke></sld:LineSymbolizer></sld:Rule></sld:Featur
 eTypeStyle></sld:UserStyle></sld:NamedLayer></sld:StyledLayerDescriptor>';
 
         t.xml_eq(map.layers[1].params.SLD_BODY, expected_sld, "SLD generated correctly");
 
@@ -168,7 +169,7 @@
         var geometry = OpenLayers.Geometry.Polygon.createRegularPolygon(
             new OpenLayers.Geometry.Point(0, 0), 5, 4);
         control.select(geometry);
-        var expected_sld = '<sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><sld:NamedLayer><sld:Name>KGNAT.VKUNSTWERK</sld:Name><sld:UserStyle><sld:Name>default</sld:Name><sld:FeatureTypeStyle><sld:Rule><sld:Name>default</sld:Name><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><ogc:PropertyName>geometry</ogc:PropertyName><gml:Box xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-3.5355339059327,-3.5355339059327 3.5355339059327,3.5355339059327</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter><sld:PolygonSymbolizer><sld:Fill><sld:CssParameter name="fill">#FF0000</sld:CssParameter></sld:Fill></sld:PolygonSymbolizer></sld:Rule></sld:FeatureTypeStyle></sld:Us
 erStyle></sld:NamedLayer><sld:NamedLayer><sld:Name>KGNAT.LKUNSTWERK</sld:Name><sld:UserStyle><sld:Name>default</sld:Name><sld:FeatureTypeStyle><sld:Rule><sld:Name>default</sld:Name><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><ogc:PropertyName>geometry</ogc:PropertyName><gml:Box xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-3.5355339059327,-3.5355339059327 3.5355339059327,3.5355339059327</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter><sld:LineSymbolizer><sld:Stroke><sld:CssParameter name="stroke">#FF0000</sld:CssParameter><sld:CssParameter name="stroke-width">2</sld:CssParameter></sld:Stroke></sld:LineSymbolizer></sld:Rule></sld:FeatureTypeStyle></sld:UserStyle></sld:NamedLayer><sld:NamedLayer><sld:Name>KGNAT.PKUNSTWERK</sld:Name><sld:UserStyle><sld:Name>default</sld:Name><sld:FeatureTypeStyle><sld:Rule><sld:Name>default</sld:Name><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><ogc:PropertyName>geometry</
 ogc:PropertyName><gml:Box xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-3.5355339059327,-3.5355339059327 3.5355339059327,3.5355339059327</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter><sld:PointSymbolizer><sld:Graphic><sld:Mark><sld:WellKnownName>square</sld:WellKnownName><sld:Fill><sld:CssParameter name="fill">#FF0000</sld:CssParameter></sld:Fill><sld:Stroke/></sld:Mark><sld:Size>10</sld:Size></sld:Graphic></sld:PointSymbolizer></sld:Rule></sld:FeatureTypeStyle></sld:UserStyle></sld:NamedLayer></sld:StyledLayerDescriptor>';
+        var expected_sld = '<sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><sld:NamedLayer><sld:Name>KGNAT.VKUNSTWERK</sld:Name><sld:UserStyle><sld:Name>default</sld:Name><sld:FeatureTypeStyle><sld:Rule><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><ogc:PropertyName>geometry</ogc:PropertyName><gml:Box xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-3.5355339059327,-3.5355339059327 3.5355339059327,3.5355339059327</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter><sld:PolygonSymbolizer><sld:Fill><sld:CssParameter name="fill">#FF0000</sld:CssParameter></sld:Fill></sld:PolygonSymbolizer></sld:Rule></sld:FeatureTypeStyle></sld:UserStyle></sld:NamedLayer><sl
 d:NamedLayer><sld:Name>KGNAT.LKUNSTWERK</sld:Name><sld:UserStyle><sld:Name>default</sld:Name><sld:FeatureTypeStyle><sld:Rule><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><ogc:PropertyName>geometry</ogc:PropertyName><gml:Box xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">-3.5355339059327,-3.5355339059327 3.5355339059327,3.5355339059327</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter><sld:LineSymbolizer><sld:Stroke><sld:CssParameter name="stroke">#FF0000</sld:CssParameter><sld:CssParameter name="stroke-width">2</sld:CssParameter></sld:Stroke></sld:LineSymbolizer></sld:Rule></sld:FeatureTypeStyle></sld:UserStyle></sld:NamedLayer><sld:NamedLayer><sld:Name>KGNAT.PKUNSTWERK</sld:Name><sld:UserStyle><sld:Name>default</sld:Name><sld:FeatureTypeStyle><sld:Rule><ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><ogc:PropertyName>geometry</ogc:PropertyName><gml:Box xmlns:gml="http://www.opengis.net/gml"><gml:coordinates de
 cimal="." cs="," ts=" ">-3.5355339059327,-3.5355339059327 3.5355339059327,3.5355339059327</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter><sld:PointSymbolizer><sld:Graphic><sld:Mark><sld:WellKnownName>square</sld:WellKnownName><sld:Fill><sld:CssParameter name="fill">#FF0000</sld:CssParameter></sld:Fill><sld:Stroke/></sld:Mark><sld:Size>10</sld:Size></sld:Graphic></sld:PointSymbolizer></sld:Rule></sld:FeatureTypeStyle></sld:UserStyle></sld:NamedLayer></sld:StyledLayerDescriptor>';
 
         t.xml_eq(map.layers[1].params.SLD_BODY, expected_sld, "SLD generated correctly");
         map.destroy();

Modified: sandbox/ahocevar/renderer-ng/tests/Control/WMSGetFeatureInfo.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Control/WMSGetFeatureInfo.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Control/WMSGetFeatureInfo.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -451,7 +451,38 @@
         t.eq(count, 2, "We expect 2 requests to go off");
         map.destroy();
     }
+    
+    function test_GetFeatureInfo_buildWMSOptions(t) {
+        t.plan(3);
+        
+        var map = new OpenLayers.Map("map", {
+            getExtent: function() {return(new OpenLayers.Bounds(-180,-90,180,90));},
+            projection: "EPSG:900913"
+        });
+        var a = new OpenLayers.Layer.WMS("dummy", "http://localhost/wms", {
+            layers: "a"
+        }, {projection: "EPSG:3857"});
+        var b = new OpenLayers.Layer.WMS("dummy", "http://localhost/wms", {
+            layers: "b"
+        });
+        var c = new OpenLayers.Layer.WMS("dummy", "http://localhost/wms", {
+            layers: "c"
+        }, {projection: "EPSG:4326"});
+        map.addLayers([a, b, c]);
+        var gfi = new OpenLayers.Control.WMSGetFeatureInfo();
+        map.addControl(gfi);
+        gfi.activate();
 
+        var options = gfi.buildWMSOptions("http://localhost/wms", [a], {xy: {x: 50, y: 50}}, "text/html");
+        t.eq(options.params.SRS, "EPSG:3857", "layer projection used if provided and equal map projection");
+
+        options = gfi.buildWMSOptions("http://localhost/wms", [b], {xy: {x: 50, y: 50}}, "text/html");
+        t.eq(options.params.SRS, "EPSG:900913", "map projection used if layer has no projection configured");
+
+        options = gfi.buildWMSOptions("http://localhost/wms", [b], {xy: {x: 50, y: 50}}, "text/html");
+        t.eq(options.params.SRS, "EPSG:900913", "map projection used if layer configured with an incompatible projection");
+    }
+
     function test_GetFeatureInfo_WMS13(t) {
         t.plan(4);
         var map = new OpenLayers.Map("map", {

Modified: sandbox/ahocevar/renderer-ng/tests/Feature.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Feature.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Feature.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -43,7 +43,7 @@
         feature = new OpenLayers.Feature(layer, lonlat, data);
         popup = feature.createPopup(); 
         //Safari 3 separates style overflow into overflow-x and overflow-y
-        var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow';
+        var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
         t.eq(popup.contentDiv.style[prop], "auto", 'overflow on popup is correct');
     }    
     function test_Feature_createMarker (t) {

Modified: sandbox/ahocevar/renderer-ng/tests/Format/GML.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Format/GML.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Format/GML.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -411,7 +411,7 @@
  ];
    
     var shell_start = '<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs"><gml:featureMember xmlns:gml="http://www.opengis.net/gml"><feature:features xmlns:feature="http://mapserver.gis.umn.edu/mapserver" fid="221"><feature:geometry>'; 
-    if (OpenLayers.Util.getBrowserName() == "opera") {
+    if (OpenLayers.BROWSER_NAME == "opera") {
         shell_start = '<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs"><gml:featureMember xmlns:gml="http://www.opengis.net/gml"><feature:features fid="221" xmlns:feature="http://mapserver.gis.umn.edu/mapserver"><feature:geometry>'; 
     }    
     var shell_end = '</feature:geometry></feature:features></gml:featureMember></wfs:FeatureCollection>';

Modified: sandbox/ahocevar/renderer-ng/tests/Format/SOSGetObservation.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Format/SOSGetObservation.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Format/SOSGetObservation.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -4,7 +4,7 @@
     <script type="text/javascript">
 
     function test_read_SOSGetObservation(t) {
-        t.plan(7);
+        t.plan(13);
 
         var parser = new OpenLayers.Format.SOSGetObservation();
         var text =
@@ -49,16 +49,131 @@
         t.eq(measurement.result.uom, "Cel", "Units of measurement correctly parsed");
         t.eq(measurement.result.value, "4.9", "Value correctly parsed");
         t.eq(measurement.samplingTime.timeInstant.timePosition, "2009-12-02T10:35:00.000+01:00", "Sampling time correctly parsed");
+
+        var response = [];
+        response.push('<?xml version="1.0" encoding="UTF-8"?>',
+'<om:ObservationCollection gml:id="oc_0" xsi:schemaLocation="http://www.opengis.net/om/1.0 http://schemas.opengis.net/om/1.0.0/om.xsd http://www.opengis.net/sampling/1.0 http://schemas.opengis.net/sampling/1.0.0/sampling.xsd" xmlns:om="http://www.opengis.net/om/1.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:swe="http://www.opengis.net/swe/1.0.1" xmlns:sa="http://www.opengis.net/sampling/1.0">',
+'  <gml:boundedBy>',
+'    <gml:Envelope srsName="urn:ogc:def:crs:EPSG:4326">',
+'      <gml:lowerCorner>46.611644 7.6103</gml:lowerCorner>',
+'      <gml:upperCorner>51.9412 13.883498</gml:upperCorner>',
+'    </gml:Envelope>',
+'  </gml:boundedBy>',
+'  <om:member>',
+'    <om:Observation gml:id="ot_583227">',
+'      <om:samplingTime>',
+'        <gml:TimePeriod xsi:type="gml:TimePeriodType">',
+'          <gml:beginPosition>2009-09-28T13:45:00.000+02:00</gml:beginPosition>',
+'          <gml:endPosition>2009-09-28T13:45:00.000+02:00</gml:endPosition>',
+'        </gml:TimePeriod>',
+'      </om:samplingTime>',
+'      <om:procedure xlink:href="urn:ogc:object:feature:OSIRIS-HWS:efeb807b-bd24-4128-a920-f6729bcdd111"/>',
+'      <om:observedProperty>',
+'        <swe:CompositePhenomenon gml:id="cpid0" dimension="1">',
+'          <gml:name>resultComponents</gml:name>',
+'          <swe:component xlink:href="urn:ogc:data:time:iso8601"/>',
+'          <swe:component xlink:href="urn:ogc:def:property:OGC::Precipitation1Hour"/>',
+'        </swe:CompositePhenomenon>',
+'      </om:observedProperty>',
+'      <om:featureOfInterest>',
+'        <gml:FeatureCollection>',
+'          <gml:featureMember>',
+'            <sa:SamplingPoint gml:id="urn:ogc:object:feature:OSIRIS-HWS:efeb807b-bd24-4128-a920-f6729bcdd111" xsi:schemaLocation=" http://www.opengis.net/sampling/1.0 http://schemas.opengis.net/sampling/1.0.0/sampling.xsd">',
+'              <gml:name>waether @ roof of the FH Kaernten, Villach, Austria</gml:name>',
+'              <sa:sampledFeature xlink:href="urn:ogc:def:nil:OGC:unknown"/>',
+'              <sa:position>',
+'                <gml:Point>',
+'                  <gml:pos srsName="urn:ogc:def:crs:EPSG:4326">46.611644 13.883498</gml:pos>',
+'                </gml:Point>',
+'              </sa:position>',
+'            </sa:SamplingPoint>',
+'          </gml:featureMember>',
+'        </gml:FeatureCollection>',
+'      </om:featureOfInterest>',
+'      <om:result>',
+'        <swe:DataArray>',
+'          <swe:elementCount>',
+'            <swe:Count>',
+'              <swe:value>1</swe:value>',
+'            </swe:Count>',
+'          </swe:elementCount>',
+'          <swe:elementType name="Components">',
+'            <swe:DataRecord>',
+'              <swe:field name="Time">',
+'                <swe:Time definition="urn:ogc:data:time:iso8601"/>',
+'              </swe:field>',
+'              <swe:field name="feature">',
+'                <swe:Text definition="urn:ogc:data:feature"/>',
+'              </swe:field>',
+'              <swe:field name="urn:ogc:def:property:OGC::Precipitation1Hour">',
+'                <swe:Quantity definition="urn:ogc:def:property:OGC::Precipitation1Hour">',
+'                  <swe:uom code="mm"/>',
+'                </swe:Quantity>',
+'              </swe:field>',
+'            </swe:DataRecord>',
+'          </swe:elementType>',
+'          <swe:encoding>',
+'            <swe:TextBlock decimalSeparator="." tokenSeparator="," blockSeparator=";"/>',
+'          </swe:encoding>',
+'          <swe:values>2009-09-28T13:45:00.000+02:00,urn:ogc:object:feature:OSIRIS-HWS:efeb807b-bd24-4128-a920-f6729bcdd111,0.0;</swe:values>',
+'        </swe:DataArray>',
+'      </om:result>',
+'    </om:Observation>',
+'  </om:member>',
+'</om:ObservationCollection>');
+        text = response.join("");
+        var res = parser.read(text);
+        t.eq(res.observations.length, 1, "1 observation parsed");
+        var observation = res.observations[0];
+        t.eq(observation.procedure, "urn:ogc:object:feature:OSIRIS-HWS:efeb807b-bd24-4128-a920-f6729bcdd111", "procedure parsed correctly");
+        t.eq(observation.fois.length, 1, "One foi parsed for the observation");
+        var foi = observation.fois[0];
+        var feature = foi.features[0];
+        t.eq(feature.attributes.id, "urn:ogc:object:feature:OSIRIS-HWS:efeb807b-bd24-4128-a920-f6729bcdd111", "Foi id correctly parsed");
+        t.eq(feature.attributes.name, "waether @ roof of the FH Kaernten, Villach, Austria", "Foi name correctly parsed");
+        t.ok(feature.geometry instanceof OpenLayers.Geometry.Point, "Geometry correctly parsed");
     }
 
     function test_write_SOSGetObservation(t) {
-        t.plan(1);
+        t.plan(2);
         var expect = '<GetObservation xmlns="http://www.opengis.net/sos/1.0" version="1.0.0" service="SOS" xsi:schemaLocation="http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetObservation.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><offering>TEMPERATURE</offering><eventTime><ogc:TM_Equals xmlns:ogc="http://www.opengis.net/ogc"><ogc:PropertyName>urn:ogc:data:time:iso8601</ogc:PropertyName><gml:TimeInstant xmlns:gml="http://www.opengis.net/gml"><gml:timePosition>latest</gml:timePosition></gml:TimeInstant></ogc:TM_Equals></eventTime><procedure>urn:ogc:object:feature:OSIRIS-HWS:4fc335bc-06d7-4d5e-a72a-1ac73b9f3b56</procedure><observedProperty>urn:x-ogc:def:property:OGC::Temperature</observedProperty><responseFormat>text/xml;subtype="om/1.0.0"</responseFormat><resultModel>Measurement</resultModel><responseMode>inline</responseMode></GetObservation>';
         var format = new OpenLayers.Format.SOSGetObservation();
         var output = format.write({eventTime: 'latest', resultModel: 'Measurement', responseMode: 'inline',
-            procedure: 'urn:ogc:object:feature:OSIRIS-HWS:4fc335bc-06d7-4d5e-a72a-1ac73b9f3b56', responseFormat: 'text/xml;subtype="om/1.0.0"',
-            offering: 'TEMPERATURE', observedProperty: 'urn:x-ogc:def:property:OGC::Temperature'});
+            procedures: ['urn:ogc:object:feature:OSIRIS-HWS:4fc335bc-06d7-4d5e-a72a-1ac73b9f3b56'], responseFormat: 'text/xml;subtype="om/1.0.0"',
+            offering: 'TEMPERATURE', observedProperties: ['urn:x-ogc:def:property:OGC::Temperature']});
         t.xml_eq(output, expect, "Request XML is written out correctly");
+
+        var expected = [];
+
+        expected.push('<?xml version="1.0" encoding="UTF-8"?>',
+'<GetObservation xmlns="http://www.opengis.net/sos/1.0"',
+'  xmlns:gml="http://www.opengis.net/gml"',
+'  xmlns:om="http://www.opengis.net/om/1.0"',
+'  xmlns:ogc="http://www.opengis.net/ogc"',
+'  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
+'  xsi:schemaLocation="http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetObservation.xsd"',
+'  service="SOS" version="1.0.0">',
+'  <offering>RAIN_GAUGE</offering>',
+'  <eventTime>',
+'    <ogc:TM_Equals>',
+'      <ogc:PropertyName>urn:ogc:data:time:iso8601</ogc:PropertyName>',
+'      <gml:TimeInstant>',
+'        <gml:timePosition>latest</gml:timePosition>',
+'      </gml:TimeInstant>',
+'    </ogc:TM_Equals>',
+'  </eventTime>',
+'  <observedProperty>urn:ogc:def:property:OGC::Precipitation1Hour</observedProperty>',
+'  <featureOfInterest>',
+'    <ObjectID>urn:ogc:object:feature:OSIRIS-HWS:3d3b239f-7696-4864-9d07-15447eae2b93</ObjectID>',
+'  </featureOfInterest>',
+'  <responseFormat>text/xml;subtype="om/1.0.0"</responseFormat>',
+'</GetObservation>');
+        expect = expected.join("");
+        var output = format.write({eventTime: 'latest', offering: 'RAIN_GAUGE',
+            observedProperties: ['urn:ogc:def:property:OGC::Precipitation1Hour'],
+            responseFormat: 'text/xml;subtype="om/1.0.0"',
+            foi: {objectId: 'urn:ogc:object:feature:OSIRIS-HWS:3d3b239f-7696-4864-9d07-15447eae2b93'}});
+        t.xml_eq(output, expect, "Request XML is written out correctly");
     }
 
     </script>

Modified: sandbox/ahocevar/renderer-ng/tests/Format/WFST/v1_1_0.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Format/WFST/v1_1_0.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Format/WFST/v1_1_0.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -40,6 +40,7 @@
             featureNS: "http://www.openplans.org/topp",
             featureType: "states",
             featurePrefix: "topp",
+            srsName: "urn:ogc:def:crs:EPSG::4326",
             geometryName: "the_geom"
         });
 
@@ -109,11 +110,11 @@
 </wfs:TransactionResponse>
 --></div>
 <div id="query0"><!--
-<wfs:Query xmlns:wfs="http://www.opengis.net/wfs" typeName="topp:states" xmlns:topp="http://www.openplans.org/topp">
+<wfs:Query xmlns:wfs="http://www.opengis.net/wfs" typeName="topp:states" srsName="urn:ogc:def:crs:EPSG::4326" xmlns:topp="http://www.openplans.org/topp">
     <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
         <ogc:BBOX>
             <ogc:PropertyName>the_geom</ogc:PropertyName>
-            <gml:Envelope xmlns:gml="http://www.opengis.net/gml">
+            <gml:Envelope xmlns:gml="http://www.opengis.net/gml" srsName="urn:ogc:def:crs:EPSG::4326">
                 <gml:lowerCorner>1 2</gml:lowerCorner>
                 <gml:upperCorner>3 4</gml:upperCorner>
             </gml:Envelope>
@@ -127,7 +128,7 @@
                 xmlns:ogc="http://www.opengis.net/ogc"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
-    <wfs:Query xmlns:wfs="http://www.opengis.net/wfs" typeName="topp:states" xmlns:topp="http://www.openplans.org/topp">
+    <wfs:Query xmlns:wfs="http://www.opengis.net/wfs" typeName="topp:states" srsName="urn:ogc:def:crs:EPSG::4326" xmlns:topp="http://www.openplans.org/topp">
         <wfs:PropertyName>STATE_NAME</wfs:PropertyName>
         <wfs:PropertyName>STATE_FIPS</wfs:PropertyName>
         <wfs:PropertyName>STATE_ABBR</wfs:PropertyName>

Modified: sandbox/ahocevar/renderer-ng/tests/Format/WKT.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Format/WKT.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Format/WKT.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -80,8 +80,15 @@
             polygons[1].geometry 
         ])
     ); 
+
+    var collection = new OpenLayers.Feature.Vector(
+        new OpenLayers.Geometry.Collection([ 
+            points[0].geometry,
+            linestrings[0].geometry
+        ])
+    ); 
      
-    var collection = [points[0], linestrings[0]]; 
+    var geom_array = [points[0], linestrings[0]]; 
      
     function test_Format_WKT_constructor(t) { 
         t.plan(4); 
@@ -96,7 +103,7 @@
     }
 
     function test_Format_WKT_write(t) { 
-        t.plan(7); 
+        t.plan(8); 
 
         var format = new OpenLayers.Format.WKT(); 
 
@@ -161,19 +168,27 @@
                                  points[11].geometry.x + " " + points[11].geometry.y + "," + 
                                  points[9].geometry.x + " " + points[9].geometry.y + ")))", 
              "format correctly writes MultiPolygon WKT"); 
-         
-        // test a geometrycollection 
+
+        // test geometrycollection
         t.eq(format.write(collection), 
              "GEOMETRYCOLLECTION(POINT(" + points[0].geometry.x + " " + points[0].geometry.y + ")," + 
                                 "LINESTRING(" + points[0].geometry.x + " " + points[0].geometry.y + "," + 
                                                 points[1].geometry.x + " " + points[1].geometry.y + "," + 
                                                 points[2].geometry.x + " " + points[2].geometry.y + "))", 
              "format correctly writes GeometryCollection WKT"); 
+         
+        // test writing an array of geometries 
+        t.eq(format.write(geom_array), 
+             "GEOMETRYCOLLECTION(POINT(" + points[0].geometry.x + " " + points[0].geometry.y + ")," + 
+                                "LINESTRING(" + points[0].geometry.x + " " + points[0].geometry.y + "," + 
+                                                points[1].geometry.x + " " + points[1].geometry.y + "," + 
+                                                points[2].geometry.x + " " + points[2].geometry.y + "))", 
+             "format correctly writes WKT for an array of Geometries"); 
  
     }
 
     function test_Format_WKT_read(t) { 
-        t.plan(7); 
+        t.plan(12); 
 
         var format = new OpenLayers.Format.WKT(); 
          
@@ -205,14 +220,16 @@
         // test a multipolygon 
         t.ok(multipolygon.geometry.equals(format.read(format.write(multipolygon)).geometry), 
              "format correctly reads MultiPolygon WKT"); 
-         
-        // test a geometrycollection 
-        t.eq(format.write(collection), 
-             "GEOMETRYCOLLECTION(POINT(" + points[0].geometry.x + " " + points[0].geometry.y + ")," + 
-                                "LINESTRING(" + points[0].geometry.x + " " + points[0].geometry.y + "," + 
-                                                points[1].geometry.x + " " + points[1].geometry.y + "," + 
-                                                points[2].geometry.x + " " + points[2].geometry.y + "))", 
-             "format correctly writes GeometryCollection WKT"); 
+             
+        // test a collection
+        var wkt = format.write(collection);
+        var got = format.read(wkt);
+        t.ok(got instanceof Array, "by default, reading a collection returns an array");
+        t.eq(got.length, 2, "read two items");
+        t.ok(got[0] instanceof OpenLayers.Feature.Vector, "first item is a feature");
+        t.geom_eq(got[0].geometry, points[0].geometry, "first feature's geometry is the correct point");
+        t.ok(got[1] instanceof OpenLayers.Feature.Vector, "second item is a feature");
+        t.geom_eq(got[1].geometry, linestrings[0].geometry, "second feature's geometry is the correct linestring");
  
     }
 

Modified: sandbox/ahocevar/renderer-ng/tests/Format/WMC/v1_1_0.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Format/WMC/v1_1_0.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Format/WMC/v1_1_0.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -4,7 +4,7 @@
     <script type="text/javascript">
 
     function test_write_wmc_Layer(t) {
-        if (OpenLayers.Util.getBrowserName() == "safari") {
+        if (OpenLayers.BROWSER_NAME == "safari") {
             t.plan(0);
             t.debug_print("Safari has wierd behavior with getElementsByTagNameNS: the result is that we can't run these tests there. Patches welcome.");
             return;

Modified: sandbox/ahocevar/renderer-ng/tests/Format/WMC.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Format/WMC.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Format/WMC.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -130,7 +130,7 @@
          */
 
         // test v1.1.0
-        if(OpenLayers.Util.getBrowserName()== "opera") {
+        if(OpenLayers.BROWSER_NAME== "opera") {
             t.plan(0);
             t.debug_print("WMC writing works but is not tested in Opera");
         } else {

Modified: sandbox/ahocevar/renderer-ng/tests/Geometry/Collection.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Geometry/Collection.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Geometry/Collection.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -392,6 +392,23 @@
         coll.destroy();
     }
 
+    function test_avoid_infinite_recursion(t) {
+        t.plan(1);
+
+        var g = new OpenLayers.Geometry.Polygon([
+            new OpenLayers.Geometry.LinearRing(),
+            new OpenLayers.Geometry.LinearRing()
+        ]);
+        var bounds;
+        try {
+            bounds = g.getBounds();
+            t.eq(bounds, null, "Polygon with empty linear ring has null bounds");
+        } catch (err) {
+            t.fail("Failed to get bounds of polygon with empty linear ring: " + err.message);
+        }
+
+    }
+
     
     function test_Collection_destroy(t) {
         t.plan( 3 );

Modified: sandbox/ahocevar/renderer-ng/tests/Geometry/LineString.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Geometry/LineString.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Geometry/LineString.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -374,7 +374,67 @@
             t.eq(Math.round(got), Math.round(cases[i].exp), "[case " + i + "] length calculated");
         }
         
-    }   
+    }
+    
+    function test_LineString_simplify(t){
+        t.plan(8);
+        var ls1 = new OpenLayers.Geometry.LineString([
+            new OpenLayers.Geometry.Point(0,0),
+            new OpenLayers.Geometry.Point(1,2.1),
+            new OpenLayers.Geometry.Point(1.8,3.8),
+            new OpenLayers.Geometry.Point(2,4),
+            new OpenLayers.Geometry.Point(3,4),
+            new OpenLayers.Geometry.Point(4,4.5),
+            new OpenLayers.Geometry.Point(5,5)
+            
+        ]);
+        var ls2 = new OpenLayers.Geometry.LineString([
+            new OpenLayers.Geometry.Point(0,0),
+            new OpenLayers.Geometry.Point(1,2.1),
+            new OpenLayers.Geometry.Point(1.8,3.8),
+            new OpenLayers.Geometry.Point(2,4),
+            new OpenLayers.Geometry.Point(3,4),
+            new OpenLayers.Geometry.Point(4,4.5),
+            new OpenLayers.Geometry.Point(5,5),
+            new OpenLayers.Geometry.Point(0,0)
+            
+        ]);
+        var ls3 = new OpenLayers.Geometry.LineString([
+            new OpenLayers.Geometry.Point(0,0),
+            new OpenLayers.Geometry.Point(1,1)
+        ]);
+        var ls5 = new OpenLayers.Geometry.LineString([
+            new OpenLayers.Geometry.Point(0,0),
+            new OpenLayers.Geometry.Point(1,1),
+            new OpenLayers.Geometry.Point(2,2),
+            new OpenLayers.Geometry.Point(3,3),
+            new OpenLayers.Geometry.Point(4,4),
+            new OpenLayers.Geometry.Point(5,5)
+            
+        ]);
+        var ls6 = new OpenLayers.Geometry.LineString([
+            new OpenLayers.Geometry.Point(0,0),
+            new OpenLayers.Geometry.Point(1,1),
+            new OpenLayers.Geometry.Point(1,1),
+            new OpenLayers.Geometry.Point(3,2)
+        ]);
+        
+        t.ok(ls1 instanceof OpenLayers.Geometry.LineString, 'LineString is instance of OpenLayers.Geometry.LineString');
+        var simplified1 = ls1.simplify(0.5);
+        t.ok(simplified1 instanceof OpenLayers.Geometry.LineString, 'Simplified LineString is instance of OpenLayers.Geometry.LineString');
+        t.ok(simplified1.getVertices().length <= ls1.getVertices().length, 'Simplified LineString has less or equal number of vertices');
+        // The simplified version is derived from PostGIS function ST_SIMPLIFY()
+        t.ok(simplified1.toString() === 'LINESTRING(0 0,1.8 3.8,5 5)', 'LineString 1 was simplified correctly');
+        var simplified2 = ls2.simplify(0.5);
+        // The simplified version is derived from PostGIS function ST_SIMPLIFY()
+        t.ok(simplified2.toString() === 'LINESTRING(0 0,1.8 3.8,5 5,0 0)', 'LineString 2 was simplified correctly');
+        var simplified3 = ls3.simplify(0.5);
+        t.ok(simplified3.toString() === ls3.toString(), 'LineString with 2 vertices is left untouched');
+        var simplified5 = ls5.simplify(0.0);
+        t.ok(simplified5.toString() === 'LINESTRING(0 0,5 5)', 'A tolerance of 0 returns the optimized version needless vertices');
+        var simplified6 = ls6.simplify(0.0);
+        t.ok(simplified6.toString() === 'LINESTRING(0 0,1 1,3 2)', 'A tolerance of 0 returns the optimized version without doubled vertices');
+    }
 
   </script>
 </head>

Modified: sandbox/ahocevar/renderer-ng/tests/Handler/Drag.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Handler/Drag.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Handler/Drag.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -251,7 +251,7 @@
             t.ok(evt.xy.x == testEvents.done.xy.x &&
                  evt.xy.y == testEvents.done.xy.y,
                  "mouseout calls Util.mouseLeft with the correct event");
-            t.eq(element.id, map.div.id,
+            t.eq(element.id, map.viewPortDiv.id,
                  "mouseout calls Util.mouseLeft with the correct element");
             return true;
         }

Modified: sandbox/ahocevar/renderer-ng/tests/Handler/Polygon.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Handler/Polygon.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Handler/Polygon.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -158,6 +158,187 @@
         map.destroy();
     }        
 
+    function test_rings(t) {
+        t.plan(12);
+
+        var log = [];
+        var map = new OpenLayers.Map({
+            div: "map",
+            resolutions: [1],
+            maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
+            layers: [
+                new OpenLayers.Layer.Vector(null, {
+                    isBaseLayer: true,
+                    eventListeners: {
+                        featureadded: function(event) {
+                            log.push(event);
+                        },
+                        sketchmodified: function(event) {
+                            log.push(event);
+                        },
+                        sketchcomplete: function(event) {
+                            log.push(event);
+                        }
+                    }
+                })
+            ],
+            center: new OpenLayers.LonLat(0, 0),
+            zoom: 0
+        });
+        
+        // create control for drawing polygons with holes
+        var draw = new OpenLayers.Control.DrawFeature(
+            map.layers[0],
+            OpenLayers.Handler.Polygon,
+            {handlerOptions: {holeModifier: "altKey"}}
+        );
+        map.addControl(draw);
+        draw.activate();
+        
+        var event;
+        function trigger(type, event) {
+            map.events.triggerEvent(type, OpenLayers.Util.extend({}, event));
+        }
+        
+        // a) draw a polygon
+        log = [];
+        // start at -9, 9
+        event = {xy: new OpenLayers.Pixel(-9, 9)};
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to -1, 9
+        event = {xy: new OpenLayers.Pixel(-1, 9)};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to -1, 1
+        event = {xy: new OpenLayers.Pixel(-1, 1)};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to -9, 1
+        event = {xy: new OpenLayers.Pixel(-9, 1)};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // finish
+        event = {xy: new OpenLayers.Pixel(-9, 1)};
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        trigger("dblclick", event);
+        
+        // make assertions
+        t.eq(log.length, 9, "a) correct number of events");
+        t.eq(log[log.length-1].type, "featureadded", "a) featureadded event last");
+        t.eq(log[log.length-1].feature.geometry.getArea(), 64, "a) correct polygon area");
+
+        // b) draw a hole
+        log = [];
+        // start at -6, 6
+        event = {xy: new OpenLayers.Pixel(-6, 6), altKey: true};
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to -3, 6
+        event = {xy: new OpenLayers.Pixel(-3, 6), altKey: true};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to -3, 3
+        event = {xy: new OpenLayers.Pixel(-3, 3), altKey: true};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to -6, 3
+        event = {xy: new OpenLayers.Pixel(-6, 3), altKey: true};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // finish
+        event = {xy: new OpenLayers.Pixel(-6, 3), altKey: true};
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        trigger("dblclick", event);
+        
+        // make assertions
+        t.eq(log.length, 8, "b) correct number of events");
+        t.eq(log[log.length-1].type, "sketchcomplete", "b) sketchcomplete event last");
+        t.eq(log[log.length-1].feature.geometry.getArea(), 55, "b) correct polygon area");
+        
+
+        // c) draw a polygon that overlaps the first
+        log = [];
+        // start at -2, 2
+        event = {xy: new OpenLayers.Pixel(-2, 2)};
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to 2, 2
+        event = {xy: new OpenLayers.Pixel(2, 2)};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to 2, -2
+        event = {xy: new OpenLayers.Pixel(2, -2)};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to -2, -2
+        event = {xy: new OpenLayers.Pixel(-2, -2)};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // finish
+        event = {xy: new OpenLayers.Pixel(-2, -2)};
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        trigger("dblclick", event);
+        
+        // make assertions
+        t.eq(log.length, 9, "c) correct number of events");
+        t.eq(log[log.length-1].type, "featureadded", "c) featureadded event last");
+        t.eq(log[log.length-1].feature.geometry.getArea(), 16, "c) correct polygon area");
+
+        // d) draw a hole that tries to go outside the exterior ring
+        log = [];
+        // start at -1, 1
+        event = {xy: new OpenLayers.Pixel(-1, 1), altKey: true};
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to 1, 1
+        event = {xy: new OpenLayers.Pixel(1, 1), altKey: true};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // try to draw to -8, 8 (ouside active polygon)
+        event = {xy: new OpenLayers.Pixel(-8, 8), altKey: true};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to 1, -1
+        event = {xy: new OpenLayers.Pixel(1, -1), altKey: true};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // draw to -1, -1
+        event = {xy: new OpenLayers.Pixel(-1, -1), altKey: true};
+        trigger("mousemove", event);
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        // finish
+        event = {xy: new OpenLayers.Pixel(-1, 1), altKey: true};
+        trigger("mousedown", event);
+        trigger("mouseup", event);
+        trigger("dblclick", event);
+        
+        // make assertions
+        t.eq(log.length, 11, "d) correct number of events");
+        t.eq(log[log.length-1].type, "sketchcomplete", "d) sketchcomplete event last");
+        t.eq(log[log.length-1].feature.geometry.getArea(), 12, "d) correct polygon area");
+        
+        
+        map.destroy();
+    }        
+
+
     function test_Handler_Polygon_destroy(t) {
         t.plan(8);
         var map = new OpenLayers.Map('map');

Copied: sandbox/ahocevar/renderer-ng/tests/Layer/Bing.html (from rev 10991, trunk/openlayers/tests/Layer/Bing.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/Bing.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/Bing.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,65 @@
+<html>
+<head>
+  <script src="../../lib/OpenLayers.js"></script>
+  <script type="text/javascript">
+    var layer; 
+
+    var layerType = 'Aerial';
+    var key = "AqTGBsziZHIJYYxgivLBf0hVdrAk9mWO5cQcb8Yux8sW5M8c8opEC2lZqKR1ZZXf";
+    
+    var options = {
+        type: layerType,
+        key: key
+    };
+
+    function test_constructor(t) {
+        t.plan(2);
+                       
+        var origProcessMetadata = OpenLayers.Layer.Bing.processMetadata;
+        var log = [];
+        OpenLayers.Layer.Bing.processMetadata = function(metadata) {
+            log.push(metadata);
+            origProcessMetadata.apply(this, arguments);
+        };
+        layer = new OpenLayers.Layer.Bing(options);
+        t.ok(layer instanceof OpenLayers.Layer.Bing, "returns OpenLayers.Layer.Bing object" );
+        t.delay_call(2, function() {
+            t.eq(log.length, 1, "processMetadata called");
+            OpenLayers.Layer.Bing.processMetadata = origProcessMetadata;
+            layer.destroy();
+        });
+    }
+    
+    function test_attribution(t) {
+        t.plan(3);
+        
+        var log = [];
+        var map = new OpenLayers.Map("map");
+        layer = new OpenLayers.Layer.Bing(options);
+        map.addLayer(layer);
+        map.zoomToMaxExtent();
+        
+        t.delay_call(2, function() {
+            t.ok(layer.attribution.indexOf('olBingAttribution aerial') !== -1, "Attribution has the correct css class");
+            t.ok(layer.attribution.indexOf('<img src="">') == -1, "Attribution contains a logo");
+            t.ok(layer.attribution.indexOf('</img></div></a><a style=') == -1 , "Attribution contains a copyright");
+            map.destroy();
+        });
+    }
+
+    function test_clone(t) {
+        t.plan(1);
+        
+        var clone;
+        
+        layer = new OpenLayers.Layer.Bing(options);
+        clone = layer.clone();
+        t.ok(clone instanceof OpenLayers.Layer.Bing, "clone is a Layer.Bing instance");
+    }
+
+  </script>
+</head>
+<body>
+<div id="map" style="width:500px;height:550px"></div>
+</body>
+</html>

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/EventPane.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/EventPane.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/EventPane.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -57,7 +57,7 @@
 // MOUSEMOVE test does not seem to work... 
 //         t.plan( 2 );    
 
-        if (OpenLayers.Util.getBrowserName() != "firefox" && OpenLayers.Util.getBrowserName() != "mozilla") {
+        if (OpenLayers.BROWSER_NAME != "firefox" && OpenLayers.BROWSER_NAME != "mozilla") {
           t.plan(4);
         } else {
           t.plan(0);

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/GeoRSS.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/GeoRSS.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/GeoRSS.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -172,7 +172,7 @@
         });
     }
     function test_Layer_GeoRSS_loadend_Event(t) {
-        var browserCode = OpenLayers.Util.getBrowserName();
+        var browserCode = OpenLayers.BROWSER_NAME;
         if (browserCode == "msie") {
             t.plan(1);
             t.ok(true, "IE fails the GeoRSS test. This could probably be fixed by someone with enough energy to fix it.");

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/Image.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/Image.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/Image.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -7,7 +7,7 @@
     function test_Layer_Image_constructor (t) {
         t.plan( 13 );
         
-        var options = { chicken: 151, foo: "bar", projection: "none" };
+        var options = { chicken: 151, foo: "bar", projection: "EPSG:4326" };
         var layer = new OpenLayers.Layer.Image('Test Layer',
                                         'http://earthtrends.wri.org/images/maps/4_m_citylights_lg.gif',
                                                                         new OpenLayers.Bounds(-180, -88.759, 180, 88.759),
@@ -18,7 +18,7 @@
 
         t.eq( layer.name, "Test Layer", "layer.name is correct" );
         t.ok( layer.id != null, "Layer is given an id");
-        t.eq( layer.projection, "none", "default layer projection correctly set");
+        t.eq( layer.projection.getCode(), "EPSG:4326", "default layer projection correctly set");
         t.ok( ((layer.chicken == 151) && (layer.foo == "bar")), "layer.options correctly set to Layer Object" );
         t.ok( ((layer.options["chicken"] == 151) && (layer.options["foo"] == "bar")), "layer.options correctly backed up" );
 

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/MapServer.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/MapServer.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/MapServer.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -226,7 +226,7 @@
                        (window.location.host == "localhost") ||
                        (window.location.host == "openlayers.org");
         
-        if (OpenLayers.Util.getBrowserName() == "opera" || OpenLayers.Util.getBrowserName() == "safari") {
+        if (OpenLayers.BROWSER_NAME == "opera" || OpenLayers.BROWSER_NAME == "safari") {
             t.plan(1);
             t.debug_print("Can't test google reprojection in Opera or Safari.");
         } else if(validkey) {

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/MultiMap.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/MultiMap.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/MultiMap.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -4,38 +4,51 @@
   <script type="text/javascript" src="http://developer.multimap.com/API/maps/1.2/OA10072915821139765"></script>
   <script src="../../lib/OpenLayers.js"></script>
   <script type="text/javascript">
-    var layer; 
+    var doTest = true;
+    function test_Layer_MultiMap_constructor (t) {
+        // WebKit browsers fail when the API key is for a different url, so we
+        // do not test in this case.
+        try {
+            var map = new OpenLayers.Map("map");
+            var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
+            map.addLayer(layer);
+        }
+        catch(e) {
+            doTest = false;
+        }
 
-    function test_Layer_MultiMap_constructor (t) {
+        if (!doTest) { t.plan(0); return; }
         t.plan( 4 );
         
         var map = new OpenLayers.Map('map');
-        var layer = new OpenLayers.Layer.MultiMap('Goog Layer');
+        var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
         map.addLayer(layer);
         
         
         t.ok( layer instanceof OpenLayers.Layer.MultiMap, "new OpenLayers.Layer.MultiMap returns object" );
         t.eq( layer.CLASS_NAME, "OpenLayers.Layer.MultiMap", "CLASS_NAME variable set correctly");
 
-        t.eq( layer.name, "Goog Layer", "layer.name is correct" );
+        t.eq( layer.name, "MultiMap Layer", "layer.name is correct" );
 
         t.ok ( layer.mapObject != null, "MultiMap Object correctly loaded");
     }
 
     function test_Layer_MultiMap_isBaseLayer (t) {
+        if (!doTest) { t.plan(0); return; }
         t.plan(1);
         
-        var layer = new OpenLayers.Layer.MultiMap('Goog Layer');
+        var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
 
-        t.ok(layer.isBaseLayer, "a default load of google layer responds as a base layer");
+        t.ok(layer.isBaseLayer, "a default load of multimap layer responds as a base layer");
     }    
 
     function test_Layer_MultiMap_Translation_lonlat (t) {
+        if (!doTest) { t.plan(0); return; }
         
         t.plan( 4 );
         
         var map = new OpenLayers.Map('map');
-        var layer = new OpenLayers.Layer.MultiMap('Goog Layer');
+        var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
         map.addLayer(layer);
 
      // these two lines specify an appropriate translation. 
@@ -56,11 +69,12 @@
     }
 
     function test_Layer_MultiMap_Translation_pixel (t) {
+        if (!doTest) { t.plan(0); return; }
         
         t.plan( 4 );
         
         var map = new OpenLayers.Map('map');
-        var layer = new OpenLayers.Layer.MultiMap('Goog Layer');
+        var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
         map.addLayer(layer);
 
      // these two lines specify an appropriate translation. 
@@ -82,6 +96,7 @@
 
 
     function test_Layer_destroy (t) {
+        if (!doTest) { t.plan(0); return; }
         t.plan( 5 );    
 
         var map = new OpenLayers.Map('map');

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/SphericalMercator.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/SphericalMercator.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/SphericalMercator.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -69,7 +69,7 @@
          
         t.eq(strToFixed(point.toString()), 
              strToFixed("POINT(10.000000828446318 20.000000618997227)"), 
-             "point transforms from EPSG:4326 to Spherical Mercator"); 
+             "point transforms from Spherical Mercator to EPSG:4326"); 
     }
     
     function test_SphericalMercator_addTransform(t) {
@@ -88,6 +88,48 @@
              "from EPSG:900913 to EPSG:4326 correctly defined");
     }
     
+    function test_equivalence(t) {
+
+        // list of equivalent codes for web mercator
+        var codes = ["EPSG:900913", "EPSG:3857", "EPSG:102113", "EPSG:102100"];
+        var len = codes.length;
+        
+        t.plan(len + (len * len));
+
+        var ggPoint = new OpenLayers.Geometry.Point(10, 20);
+        var smPoint = new OpenLayers.Geometry.Point(1113195, 2273031);
+        
+        var gg = new OpenLayers.Projection("EPSG:4326");
+        
+        var i, proj, forward, inverse, other, j, equiv;
+        for (i=0, len=codes.length; i<len; ++i) {
+            proj = new OpenLayers.Projection(codes[i]);
+            
+            // confirm that forward/inverse work
+            forward = ggPoint.clone().transform(gg, proj);
+            t.eq(
+                strToFixed(forward.toString()), 
+                strToFixed("POINT(1113194.9077777779 2273030.9266712805)"), 
+                "transforms from EPSG:4326 to " + proj
+            );
+            inverse = smPoint.clone().transform(proj, gg);
+            t.eq(
+                strToFixed(inverse.toString()), 
+                strToFixed("POINT(10.000000828446318 20.000000618997227)"), 
+                "transforms from " + proj + " to EPSG:4326"
+            ); 
+            
+            // confirm that null transform works
+            for (j=i+1; j<len; ++j) {
+                other = new OpenLayers.Projection(codes[j]);
+                equiv = ggPoint.clone().transform(proj, other);
+                t.ok(proj.equals(other),  proj + " and " + other + " are equivalent");
+                t.ok(ggPoint.equals(equiv), "transform from " + proj + " to " + other + " preserves geometry");                
+            }
+        }
+
+    }
+    
   </script> 
 </head>
 <body>

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/Text.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/Text.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/Text.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -132,7 +132,7 @@
           layer.markers[1].events.triggerEvent('click', event);
           t.eq(map.popups.length, 1, "1st popup gone, 2nd Popup opened correctly");
           //Safari 3 separates style overflow into overflow-x and overflow-y
-          var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow';
+          var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
           t.eq(map.popups[0].contentDiv.style[prop],"auto", "default Popup overflow correct");
         });
     }
@@ -151,12 +151,12 @@
           layer.markers[0].events.triggerEvent('click', event);
           t.eq(map.popups.length, 1, "Popup opened correctly");
           //Safari 3 separates style overflow into overflow-x and overflow-y
-          var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow';
+          var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
           t.eq(map.popups[0].contentDiv.style[prop],"auto", "Popup overflow read from file");
           layer.markers[1].events.triggerEvent('click', event);
           t.eq(map.popups.length, 1, "1st popup gone, 2nd Popup opened correctly");
           //Safari 3 separates style overflow into overflow-x and overflow-y
-          var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow';
+          var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
           t.eq(map.popups[0].contentDiv.style[prop],"hidden", "Popup overflow read from file");
         });
     }

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/Vector.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/Vector.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/Vector.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -194,6 +194,83 @@
         t.ok(layer.getFeatureBy('fid', 'some_fid_that_does_not_exist') == null,
              "OpenLayers.Layer.Vector.getFeatureBy('fid', ...) works like getFeatureByFid on non-existing feature fid");
     }
+    
+    function test_Layer_Vector_getFeaturesByAttribute(t) {
+        t.plan( 9 );
+        // setup layer
+        var layer = new OpenLayers.Layer.Vector(name);
+        
+        // feature_1
+        var geometry_1 = new OpenLayers.Geometry.Point(-28.63, 153.64);
+        var attributes_1 = {
+            humpty: 'dumpty',
+            clazz: 1
+        };
+        var feature_1 = new OpenLayers.Feature.Vector(geometry_1, attributes_1);
+        feature_1.fid = 'f_01'; // to identify later
+        
+        // feature_2
+        var geometry_2 = new OpenLayers.Geometry.Point(-27.48, 153.05);
+        var attributes_2 = {
+            // this feature has attribute humpty === undefined
+            clazz: '1'
+        };
+        var feature_2 = new OpenLayers.Feature.Vector(geometry_2, attributes_2);
+        feature_2.fid = 'f_02'; // to identify later
+        
+        // feature_3
+        var geometry_3 = new OpenLayers.Geometry.Point(-33.74, 150.3);
+        var attributes_3 = {
+            humpty: 'foobar',
+            clazz: 1
+        };
+        var feature_3 = new OpenLayers.Feature.Vector(geometry_3, attributes_3);
+        feature_3.fid = 'f_03'; // to identify later
+        
+        // Tests
+        
+        // don't find anything... no features added
+        // 1 test
+        t.ok(layer.getFeaturesByAttribute('humpty', 'dumpty').length === 0,
+             "OpenLayers.Layer.Vector.getFeaturesByAttribute returns an empty array while the layer is empty");
+        
+        layer.addFeatures([feature_1, feature_2, feature_3]);
+        
+        // simple use case: find 1 feature with an attribute and matching value
+        // 2 tests
+        var dumptyResults = layer.getFeaturesByAttribute('humpty', 'dumpty');
+        t.ok(dumptyResults.length === 1,
+             "OpenLayers.Layer.Vector.getFeaturesByAttribute returns an array with one feature for attribute 'humpty' with value 'dumpty'");
+        t.ok(dumptyResults[0].fid === 'f_01',
+             "OpenLayers.Layer.Vector.getFeaturesByAttribute returns the correct feature with attribute 'humpty' set to 'dumpty'");
+        
+        // simple use case: find 1 feature with an attribute and matching value
+        //                  and respect data types
+        // 2 tests
+        var strOneResults = layer.getFeaturesByAttribute('clazz', '1');
+        t.ok(strOneResults.length === 1,
+             "OpenLayers.Layer.Vector.getFeaturesByAttribute returns an array with one feature for attribute 'clazz' with value '1' (a string)");
+        t.ok(strOneResults[0].fid === 'f_02',
+             "OpenLayers.Layer.Vector.getFeaturesByAttribute returns the correct feature with attribute 'clazz' set to the string '1'");
+        
+        // simple use case: find 2 features with an attribute and matching value
+        //                  and respect data types
+        // 2 tests    
+        var numOneResults = layer.getFeaturesByAttribute('clazz', 1);
+        t.ok(numOneResults.length === 2,
+             "OpenLayers.Layer.Vector.getFeaturesByAttribute returns an array with two features for attribute 'clazz' with value 1 (a number)");
+        var bothFound = !!((numOneResults[0].fid === 'f_01' && numOneResults[1].fid === 'f_03') || (numOneResults[0].fid === 'f_03' && numOneResults[1].fid === 'f_01')); 
+        t.ok(bothFound,
+             "OpenLayers.Layer.Vector.getFeaturesByAttribute returns the correct features with attribute 'clazz' set to the number 1");
+        
+        // advanced use case: find the 1 feature, that has an attribute not set
+        var undefined;
+        var humptyNotSet = layer.getFeaturesByAttribute('humpty', undefined);
+        t.ok(humptyNotSet.length === 1,
+             "OpenLayers.Layer.Vector.getFeaturesByAttribute can be used to find features that have certain attributes not set");
+        t.ok(humptyNotSet[0].fid === 'f_02',
+             "OpenLayers.Layer.Vector.getFeaturesByAttribute found the correct featuren that has a certain attribute not set");
+    }
 
     function test_Layer_Vector_getDataExtent(t) {
         t.plan(1);
@@ -610,7 +687,7 @@
                 feature.style = customStyle5;
                 layer.drawFeature(feature);
                 t.eq(root.firstChild.getAttributeNS(null, 'style'),
-                             'opacity: '+customStyle5.graphicOpacity.toString()+((OpenLayers.Util.getBrowserName() == "opera" || OpenLayers.Util.getBrowserName() == "safari") ? "" : ';'),
+                             'opacity: '+customStyle5.graphicOpacity.toString()+((OpenLayers.BROWSER_NAME == "opera" || OpenLayers.BROWSER_NAME == "safari") ? "" : ';'),
                              "graphicOpacity correctly set");
                 feature.style = customStyle6;
                 layer.drawFeature(feature);

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/WMS/Post.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/WMS/Post.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/WMS/Post.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -16,19 +16,20 @@
         t.plan( 2 );
 
         var url = "http://octo.metacarta.com/cgi-bin/mapserv";
-        layer = new OpenLayers.Layer.WMS.Post(name, url, params);
+        var options = {unsupportedBrowsers: []};
+        layer = new OpenLayers.Layer.WMS.Post(name, url, params, options);
 
-        t.ok(
-            layer.tileClass == OpenLayers.Tile.Image.IFrame,
-            "instantiate OpenLayers.Tile.Image.IFrame tiles.");
+        t.eq(
+            layer.usePost, true,
+            "Supported browsers use IFrame tiles.");
 
         layer.destroy();
 
-        var options = { unsupportedBrowsers: [OpenLayers.Util.getBrowserName()]};
+        var options = { unsupportedBrowsers: [OpenLayers.BROWSER_NAME]};
         layer = new OpenLayers.Layer.WMS.Post(name, url, params, options);
-        t.ok(
-            layer.tileClass == OpenLayers.Tile.Image,
-            "unsupported browser instantiate Image tiles.");
+        t.eq(
+            layer.usePost, false,
+            "unsupported browsers use Image tiles.");
         layer.destroy();
     }
 
@@ -49,16 +50,15 @@
         }
         else {
             t.ok(
-                tile instanceof OpenLayers.Tile.Image.IFrame,
-                "tile is an instance of OpenLayers.Tile.Image.IFrame");
+                tile.useIFrame !== undefined,
+                "tile is created with the OpenLayers.Tile.Image.IFrame mixin");
         }
         map.destroy();
 
-        var browserName = OpenLayers.Util.getBrowserName();
-        var options = { unsupportedBrowsers: [browserName]};
-
         // test the unsupported browser
-        layer = new OpenLayers.Layer.WMS.Post(name, url, params, options);
+        layer = new OpenLayers.Layer.WMS.Post(name, url, params, {
+            unsupportedBrowsers: [OpenLayers.BROWSER_NAME]
+        });
         map   = new OpenLayers.Map('map');
         map.addLayer(layer);
         tile  = layer.addTile(bounds, pixel);
@@ -68,13 +68,14 @@
         layer.destroy();
 
         // test a supported browser
-        OpenLayers.Util.getBrowserName = function () { return 'not_' + browserName };
-        layer = new OpenLayers.Layer.WMS.Post(name, url, params, options);
+        layer = new OpenLayers.Layer.WMS.Post(name, url, params, {
+            unsupportedBrowsers: []
+        });
         map.addLayer(layer);
         var tile2 = layer.addTile(bounds, pixel);
         t.ok(
-            tile2 instanceof OpenLayers.Tile.Image.IFrame,
-            "supported browser: tile is an instance of Tile.Image.IFrame");
+            tile2.createIFrame,
+            "supported browser: tile is created with the Tile.Image.IFrame mixin");
         map.destroy();
     }
 

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/WMS.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/WMS.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/WMS.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -230,15 +230,15 @@
     function test_Layer_WMS_getFullRequestString (t) {
 
 
-        t.plan( 2 );
+        t.plan( 3 );
         var map = new OpenLayers.Map('map');
         map.projection = "xx";
-        tUrl = "http://octo.metacarta.com/cgi-bin/mapserv";
-        tParams = { layers: 'basic',
+        var tUrl = "http://octo.metacarta.com/cgi-bin/mapserv";
+        var tParams = { layers: 'basic',
                    format: 'image/png'};
         var tLayer = new OpenLayers.Layer.WMS(name, tUrl, tParams);
         map.addLayer(tLayer);
-        str = tLayer.getFullRequestString();
+        var str = tLayer.getFullRequestString();
         var tParams = {
             LAYERS: "basic", FORMAT: "image/png", SERVICE: "WMS",
             VERSION: "1.1.1", REQUEST: "GetMap", STYLES: "",
@@ -257,6 +257,20 @@
              tUrl + "?" + OpenLayers.Util.getParameterString(tParams),
              "getFullRequestString() by default does *not* add SRS value if projection is 'none'");
         map.destroy();
+        
+        map = new OpenLayers.Map("map", {projection: "EPSG:4326"});
+        var layerProj = new OpenLayers.Projection("FOO", {
+            equals: function() {return true},
+            getCode: function() {return "FOO"}
+        });
+        tLayer = new OpenLayers.Layer.WMS(name, tUrl, tParams, {projection: layerProj});
+        map.addLayer(tLayer);
+        str = tLayer.getFullRequestString();
+        tParams.SRS = "FOO";
+        t.eq(str,
+             tUrl + "?" + OpenLayers.Util.getParameterString(tParams),
+             "getFullRequestString() uses the layer projection if it equals the map projection");
+        map.destroy();
 
     }
 
@@ -289,7 +303,7 @@
         var validkey = (window.location.protocol == "file:") ||
                        (window.location.host == "localhost") ||
                        (window.location.host == "openlayers.org");
-        if (OpenLayers.Util.getBrowserName() == "opera" || OpenLayers.Util.getBrowserName() == "safari") {
+        if (OpenLayers.BROWSER_NAME == "opera" || OpenLayers.BROWSER_NAME == "safari") {
             t.plan(1);
             t.debug_print("Can't test google reprojection in Opera or Safari.");
         } else if(validkey) {

Modified: sandbox/ahocevar/renderer-ng/tests/Layer/XYZ.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Layer/XYZ.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Layer/XYZ.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -148,6 +148,31 @@
         map.destroy();
     }
 
+    function test_Layer_XYZ_serverResolutions(t) {
+        t.plan(2);
+
+        var map = new OpenLayers.Map('map', {
+            resolutions: [13,11]
+        });
+
+        var layer = new OpenLayers.Layer.XYZ(name, url, options);
+        map.addLayer(layer);
+        map.setCenter(new OpenLayers.LonLat(0,0), 1);
+
+        var tileurl = layer.getURL(new OpenLayers.Bounds(0,0,0,0));
+        var level = parseInt(tileurl.split('/')[7]);
+        t.eq(map.getZoom(), level, "Tile zoom level is correct without serverResolutions");
+
+        layer.serverResolutions = [14,13,12,11,10];
+        tileurl = layer.getURL(new OpenLayers.Bounds(0,0,0,0));
+        level = parseInt(tileurl.split('/')[7]);
+        var res = map.getResolution();
+        var gotLevel = OpenLayers.Util.indexOf(layer.serverResolutions, res);
+        t.eq(gotLevel, level, "Tile zoom level is correct with serverResolutions");
+
+        map.destroy();
+    }
+
     function test_zoomOffset(t) {
 
         t.plan(2);

Modified: sandbox/ahocevar/renderer-ng/tests/Marker/Box.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Marker/Box.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Marker/Box.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -26,7 +26,7 @@
         t.ok( box.bounds.equals(bounds), "bounds object correctly set");
         t.ok( box.div != null, "div created");
         //Safari 3 separates style overflow into overflow-x and overflow-y
-        var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow';
+        var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
         t.eq( box.div.style[prop], "hidden", "div style overflow hidden");
         t.ok( box.events != null, "events object created");
         t.eq( g_Color, borderColor, "setBorder called with correct border color");        

Deleted: sandbox/ahocevar/renderer-ng/tests/OpenLayers.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/OpenLayers.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/OpenLayers.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,31 +0,0 @@
-<html>
-<head>
-    <script src="bogus/1/OpenLayers.js-foo"></script>
-    <script src="bogus/2/foo-OpenLayers.js"></script>
-    <script id="script" src="../lib/OpenLayers.js"></script>
-    <script type="text/javascript">
-        function test_OpenLayers(t) {
-            t.plan(3);
-
-            var script = document.getElementById("script");
-
-            t.eq(OpenLayers._getScriptLocation(), "../", "Script location correctly detected.");
-            
-            // create a clone of OpenLayers._getScriptLocation
-            eval("var getScriptLocation = " + OpenLayers._getScriptLocation.toString());
-            var scriptLocation;
-            
-            script.setAttribute("src", "../lib/OpenLayers.js?foo");
-            t.eq(getScriptLocation(), "../", "Script location with search string correctly detected.");
-            scriptLocation = null;
-
-            // now pretend we're using a built script
-            OpenLayers._scriptName = "OpenLayers.js";
-            t.eq(getScriptLocation(), "../lib/", "not fooled by bogus paths");
-            
-        }
-    </script>
-</head>
-<body>
-</body>
-</html>

Copied: sandbox/ahocevar/renderer-ng/tests/OpenLayers1.html (from rev 10991, trunk/openlayers/tests/OpenLayers1.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/OpenLayers1.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/tests/OpenLayers1.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,16 @@
+<html>
+<head>
+    <script src="../lib/OpenLayers.js"></script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+
+            var script = document.getElementById("script");
+
+            t.eq(OpenLayers._getScriptLocation(), "../", "Script location correctly detected.");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/tests/OpenLayers2.html (from rev 10991, trunk/openlayers/tests/OpenLayers2.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/OpenLayers2.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/tests/OpenLayers2.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,19 @@
+<html>
+<head>
+    <script src="bogus/1/OpenLayers.js-foo"></script>
+    <script src="bogus/2/foo-OpenLayers.js"></script>
+    <script src="../lib/OpenLayers.js?foo"></script>
+    <script src="bogus/3/after-OpenLayers.js"></script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+
+            var script = document.getElementById("script");
+
+            t.eq(OpenLayers._getScriptLocation(), "../", "Script location with search string correctly detected, and not fooled by other scripts.");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/tests/OpenLayers3.html (from rev 10991, trunk/openlayers/tests/OpenLayers3.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/OpenLayers3.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/tests/OpenLayers3.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,19 @@
+<html>
+<head>
+    <script>
+    var OpenLayers = {singleFile: true};
+    </script>
+    <script src="../lib/OpenLayers.js"></script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+
+            var script = document.getElementById("script");
+
+            t.eq(OpenLayers._getScriptLocation(), "../lib/", "Script location for single file build correctly detected.");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/tests/OpenLayers4.html (from rev 10991, trunk/openlayers/tests/OpenLayers4.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/OpenLayers4.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/tests/OpenLayers4.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,18 @@
+<html>
+<head>
+    <script type="text/javascript">
+	OpenLayers = {singleFile: true}; // just to make the test run faster
+        document.write('<scr'+'ipt src="../lib/OpenLayers.js"></scr'+'ipt>');
+        document.write('<scr'+'ipt src="bogus/foo-/OpenLayers.js"></scr'+'ipt>');
+    </script>
+    <script type="text/javascript">
+        function test_OpenLayers(t) {
+            t.plan(1);
+            t.eq(OpenLayers._getScriptLocation(), "../lib/",
+                 "Script location correctly detected, and not fooled by other scripts.");
+        }
+    </script>
+</head>
+<body>
+</body>
+</html>

Modified: sandbox/ahocevar/renderer-ng/tests/Popup/Anchored.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Popup/Anchored.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Popup/Anchored.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,7 +11,7 @@
         popup = new OpenLayers.Popup.Anchored();
 
         t.ok( popup instanceof OpenLayers.Popup.Anchored, "new OpenLayers.Popup.Anchored returns Popup.Anchored object" );
-        t.ok(popup.id.startsWith("OpenLayers.Popup.Anchored"), "valid default popupid");
+        t.ok(OpenLayers.String.startsWith(popup.id, "OpenLayers.Popup.Anchored"), "valid default popupid");
         var firstID = popup.id;
         t.eq(popup.contentHTML, null, "good default popup.contentHTML");
 

Modified: sandbox/ahocevar/renderer-ng/tests/Popup.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Popup.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Popup.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -88,8 +88,8 @@
     }
     function test_Popup_keepInMap(t) {
         
-        var gb = OpenLayers.Util.getBrowserName;
-        OpenLayers.Util.getBrowserName = function() { return "mock"; }
+        var bn = OpenLayers.BROWSER_NAME;
+        OpenLayers.BROWSER_NAME = "mock";
         t.plan(3);
         var map = new OpenLayers.Map("map");
         map.addLayer(new OpenLayers.Layer("", {isBaseLayer: true}));
@@ -120,7 +120,7 @@
         t.ok(safeSizePan.equals(safeSizePanKeep), "Panning means that all sizes are equal");
         t.ok(safeSize.w < safeSizePan.w, "Width of non-panning is less");    
         t.ok(safeSize.h < safeSizePan.h, "Height of non-panning is less");    
-        OpenLayers.Util.getBrowserName = gb; 
+        OpenLayers.BROWSER_NAME = bn;
     }    
     function test_Popup_draw(t) {
         t.plan( 15 );
@@ -155,7 +155,7 @@
         t.eq(contentDiv.id, "chicken_contentDiv", "correct content div id");
         t.eq(contentDiv.style.position, "relative", "correct content div position");
         //Safari 3 separates style overflow into overflow-x and overflow-y
-        var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow';
+        var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
         t.eq(contentDiv.style[prop], "", "correct content div overflow");
         t.eq(contentDiv.innerHTML, content, "correct content div content");
 
@@ -169,7 +169,7 @@
             t.eq(popup.div.style.filter, "alpha(opacity=" + opacity*100 + ")", "good default popup.opacity");
         }
         //Safari 3 separates the border style into separate entities when reading it
-        if (OpenLayers.Util.getBrowserName() == 'safari') {
+        if (OpenLayers.BROWSER_NAME == 'safari') {
           var s = border.split(' ');
           t.ok(popup.div.style.borderTopWidth == s[0] && popup.div.style.borderTopStyle == s[1], "good default popup.border")
         } else {

Modified: sandbox/ahocevar/renderer-ng/tests/Projection.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Projection.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Projection.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -21,7 +21,47 @@
 
          t.eq(projection.equals(null), false, "equals on null projection returns false");
          t.eq(projection.equals({}), false, "equals on null projection object returns false (doesn't call getCode)");
-     } 
+     }
+     
+     function test_Projection_equals(t) {
+         t.plan(8);
+         var origTransforms = OpenLayers.Util.extend({}, OpenLayers.Projection.transforms);
+         OpenLayers.Projection.addTransform("EPSG:4326", "FOO", OpenLayers.Projection.nullTransform);
+         OpenLayers.Projection.addTransform("FOO", "EPSG:4326", OpenLayers.Projection.nullTransform);
+         var projection = new OpenLayers.Projection("FOO");
+         t.eq(projection.equals(new OpenLayers.Projection("EPSG:4326")), true, "EPSG:4326 and FOO are equal without proj4js");
+         t.eq(projection.equals(new OpenLayers.Projection("EPSG:900913")), false, "EPSG:900913 and FOO are not equal without proj4js");
+         t.eq(new OpenLayers.Projection("EPSG:4326").equals(new OpenLayers.Projection("EPSG:4326")), true, "EPSG:4326 and EPSG:4326 are equal without proj4js");
+         t.eq(new OpenLayers.Projection("BAR").equals(new OpenLayers.Projection("EPSG:4326")), false, "Projection.equals() returns false for unknown projections withoug proj4js");
+         OpenLayers.Projection.transforms = origTransforms;
+         
+         var proj1 = new OpenLayers.Projection("EPSG:4326");
+         var proj2 = new OpenLayers.Projection("FOO");
+         var proj3 = new OpenLayers.Projection("EPSG:900913");
+         var proj4 = new OpenLayers.Projection("EPSG:4326");
+         var proj5 = new OpenLayers.Projection("BAR");
+
+         // conditionally mock up proj4js
+         var hasProj = !!window.Proj4js;
+         if (!hasProj) {
+             window.Proj4js = true;
+         }
+         proj1.proj = {defData: "+title= WGS84 +foo=bar +x=0"};
+         proj2.proj = {defData: "+title=FOO +foo=bar +x=0", srsCode: "FOO"};
+         proj3.proj = {defData: "+title=Web Mercator +foo=bar +x=0 +I=am-different"};
+         proj4.proj = proj1.proj;
+         proj5.proj = {srsCode: "BAR"};
+
+         t.eq(proj2.equals(proj1), true, "EPSG:4326 and FOO are equal with proj4js");
+         t.eq(proj2.equals(proj3), false, "EPSG:900913 and FOO are not equal with proj4js");
+         t.eq(proj1.equals(proj4), true, "EPSG:4326 and EPSG:4326 are equal with proj4js");
+         t.eq(proj2.equals(proj5), false, "Projection.equals() returns false for unknown projections with proj4js");
+         
+         if (!hasProj) {
+             delete window.Proj4js
+         }
+         
+     }
        
     </script> 
   </head> 

Modified: sandbox/ahocevar/renderer-ng/tests/Protocol/WFS.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Protocol/WFS.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Protocol/WFS.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -25,14 +25,15 @@
     }
 
     function test_read(t) {
-        t.plan(6);
+        t.plan(7);
 
         var protocol = new OpenLayers.Protocol.WFS({
             url: "http://some.url.org",
             featureNS: "http://namespace.org",
             featureType: "type",
-            parseFeatures: function(request) {
-                t.eq(request.responseText, "foo", "parseFeatures called properly");
+            parseResponse: function(request, options) {
+                t.eq(request.responseText, "foo", "parseResponse called properly");
+                t.eq(options, {foo: "bar"}, "parseResponse receives readOptions");
                 return "foo";
             }
         });
@@ -44,14 +45,13 @@
             t.xml_eq(new OpenLayers.Format.XML().read(obj.data).documentElement, expected, "GetFeature request is correct");
             obj.status = status;
             obj.responseText = "foo";
-            obj.options = {};
             t.delay_call(0.1, function() {obj.callback.call(this)});
             return obj;
         };
 
         expected = readXML("GetFeature_1");
         status = 200;
-        var response = protocol.read({callback: function(response) {
+        var response = protocol.read({readOptions: {foo: "bar"}, callback: function(response) {
             t.eq(response.features, "foo", "user callback properly called with features");
             t.eq(response.code, OpenLayers.Protocol.Response.SUCCESS, "success reported properly");
         }});
@@ -95,7 +95,6 @@
         OpenLayers.Request.POST = function(obj) {
             t.xml_eq(new OpenLayers.Format.XML().read(obj.data).documentElement, expected, "Transaction XML with Insert, Update and Delete created correctly");
             obj.responseText = "foo";
-            obj.options = {};
             t.delay_call(0.1, function() {obj.callback.call(this)});
             return obj;
         };
@@ -225,10 +224,64 @@
 
         var request = {};
         request.responseText = '{"type":"FeatureCollection","features":[{"type":"Feature","id":"V_HECTOPUNTEN.108411","geometry":{"type":"MultiPoint","coordinates":[[190659.467,349576.19]]},"geometry_name":"ORA_GEOMETRY","properties":{"WEGNUMMER":"002","HECTOMTRNG_ORG":2200,"HECTOMTRNG":"220.00","bbox":[190659.467,349576.19,190659.467,349576.19]}}]}';
-        var features = protocol.parseFeatures(request);
+        var features = protocol.parseResponse(request);
         t.eq(features.length, 1, "the right format is used to read the request (GeoJSON)");
  	}
 
+    function test_outputFormat(t) {
+        t.plan(2);
+
+        var protocol = new OpenLayers.Protocol.WFS({
+            version: "1.1.0",
+            url: "http://some.url.org",
+            featureNS: "http://namespace.org",
+            featureType: "type",
+            outputFormat: 'json'
+        });
+
+        t.ok(protocol.readFormat instanceof OpenLayers.Format.GeoJSON, "the correct readFormat is used for outputFormat JSON");
+
+        protocol = new OpenLayers.Protocol.WFS({
+            version: "1.1.0",
+            url: "http://some.url.org",
+            featureNS: "http://namespace.org",
+            featureType: "type",
+            outputFormat: 'GML2'
+        });
+
+        t.ok(protocol.readFormat instanceof OpenLayers.Format.GML.v2, "the correct readFormat is used for outputFormat GML2");
+ 	}
+
+    function test_readOptions(t) {
+        t.plan(1);
+
+        var protocol = new OpenLayers.Protocol.WFS({
+            url: "http://some.url.org",
+            version: "1.1.0",
+            featureNS: "http://namespace.org",
+            featureType: "type",
+            readOptions: {'output': 'object'},
+            parseResponse: function(request, options) {
+                t.eq(options.output, "object", "Options object correctly set to pass on to Format's read");
+            }
+        });
+
+        var _POST = OpenLayers.Request.POST;
+
+        OpenLayers.Request.POST = function(obj) {
+            obj.status = 200;
+            obj.responseText = "foo";
+            t.delay_call(0.1, function() {obj.callback.call(this)});
+            return obj;
+        };
+
+        protocol.read({
+            callback: function() {}
+        });
+
+        OpenLayers.Request.POST = _POST;
+    }
+
     function readXML(id) {
         var xml = document.getElementById(id).firstChild.nodeValue;
         return new OpenLayers.Format.XML().read(xml).documentElement;

Modified: sandbox/ahocevar/renderer-ng/tests/Renderer/Canvas.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Renderer/Canvas.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Renderer/Canvas.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -23,7 +23,7 @@
         
         var extent = new OpenLayers.Bounds(1,2,3,4);
         r.resolution = 1;
-        r.setExtent(extent);
+        r.setExtent(extent, true);
         t.ok(r.extent.equals(extent), "extent is correctly set");
         t.eq(r.resolution, null, "resolution nullified");
     }

Modified: sandbox/ahocevar/renderer-ng/tests/Renderer/Elements.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Renderer/Elements.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Renderer/Elements.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -561,8 +561,63 @@
         tearDown();        
     }
 
+    function test_Elements_drawGeometry_3(t) {
+        t.plan(2);
 
+        setUp();
 
+        var r = create_renderer();
+        
+        var element = document.createElement("div");
+        r.vectorRoot = element;
+
+        r.nodeFactory = function(id, type) {
+            return document.createElement("div");
+        };
+        var g_Node = null;
+        var b_Node = null;
+        r.drawGeometryNode = function(node, geometry, style) {
+            g_Node = node;
+            return {node: node, complete: true};
+        };
+        r.redrawBackgroundNode = function(id, geometry, style, featureId) {
+            b_Node = r.nodeFactory();
+            b_Node.id = "foo_background";
+            element.appendChild(b_Node);
+        };
+
+        r.getNodeType = function(geometry, style) {
+            return "div";
+        };
+        var geometry = {
+            id: 'foo',
+            CLASS_NAME: 'bar',
+            getBounds: function() {return {bottom: 0}}
+        };
+        var style = {'backgroundGraphic': 'foo'};
+        var featureId = 'dude';
+        r.drawGeometry(geometry, style, featureId);
+        t.ok(b_Node.parentNode == element, "redrawBackgroundNode appended background node");
+
+        var returnNode = function(id) {
+        	return id == "foo_background" ? b_Node : g_Node;
+        }
+       	
+        var _getElement = document.getElementById;
+        document.getElementById = returnNode;
+        OpenLayers.Util.getElement = returnNode;
+
+        style = {};
+        r.drawGeometry(geometry, style, featureId);
+        t.ok(b_Node.parentNode != element, "background node correctly removed")
+            
+        document.getElementById = _getElement;
+
+        tearDown();
+    }
+
+
+
   </script>
 </head>
 <body>

Modified: sandbox/ahocevar/renderer-ng/tests/Renderer/SVG.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Renderer/SVG.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Renderer/SVG.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -378,23 +378,7 @@
         var string = r.getShortString(point);
         t.eq(string, "2,-4", "returned string is correct");
     }
-    
-    function test_svg_getnodetype(t) {
-        if (!OpenLayers.Renderer.SVG.prototype.supported()) {
-            t.plan(0);
-            return;
-        }
-
-        t.plan(1);
         
-        var r = new OpenLayers.Renderer.SVG(document.body);
-
-        var g = {CLASS_NAME: "OpenLayers.Geometry.Point"}
-        var s = {graphicName: "square"};
-        
-        t.eq(r.getNodeType(g, s), r.supportUse ? "use" : "svg", "Correct node type for well known symbols");
-    }
-        
     function test_svg_importsymbol(t) {
         if (!OpenLayers.Renderer.SVG.prototype.supported()) {
             t.plan(0);

Modified: sandbox/ahocevar/renderer-ng/tests/Renderer/VML.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Renderer/VML.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Renderer/VML.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -305,7 +305,7 @@
             return;
         }
         
-        t.plan(2);
+        t.plan(3);
         
         var r = new OpenLayers.Renderer.VML(document.body);
         r.offset = {x: 0, y: 0};
@@ -318,30 +318,16 @@
         
         var node = document.createElement('div');
         
-        var linearRing = {
-            components: [{
-                x: 1,
-                y: 2
-            },{
-                x: 3,
-                y: 4
-            }]
-        };
-        var linearRing2 = {
-            components: [{
-                x: 5,
-                y: 6
-            },{
-                x: 7,
-                y: 8
-            }]
-        };
-        var geometry = {
-            components: [linearRing, linearRing2]
-        };
+        var geometry = OpenLayers.Geometry.fromWKT(
+            "POLYGON((1 2, 3 4), (5 6, 7 8))"
+        );
         r.drawPolygon(node, geometry, true);
         t.ok(g_SetNodeDimension, "setNodeDimension is called");
-        t.eq(node.path, "m 2,4 l 6,8 x m 10,12 l 14,16 x e", "path attribute is correct");
+        t.eq(node.path, "m 2,4 l 6,8 2,4 x m 10,12 l 14,16 10,12 e", "path attribute is correct - inner ring has no area and is not closed");
+
+        geometry.components[1].addComponent(new OpenLayers.Geometry.Point(8, 7));
+        r.drawPolygon(node, geometry, true);
+        t.eq(node.path, "m 2,4 l 6,8 2,4 x m 10,12 l 14,16 16,14 10,12 x e", "path attribute is correct - inner ring has an area and is closed");        
     }
     
     function test_VML_drawrectangle(t) {

Modified: sandbox/ahocevar/renderer-ng/tests/Request/XMLHttpRequest.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Request/XMLHttpRequest.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Request/XMLHttpRequest.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -7,6 +7,51 @@
             t.ok(new OpenLayers.Request.XMLHttpRequest(),
                  "constructor didn't fail and we trust the code is well tested in OpenLayers.Request methods");
         }
+        function test_readyState(t) {
+        // Verify compliance of the standard (a part) See: http://www.w3.org/TR/XMLHttpRequest/
+        t.plan(9);
+        // Case 1: Request-A: open & abort
+            var requestA = new OpenLayers.Request.XMLHttpRequest();
+            //requestA.onreadystatechange = function() {};
+            t.eq(requestA.readyState, 0, "Request-A: readyState after new is 0-UNSENT");
+            requestA.open("GET", ".", true);
+            t.eq(requestA.readyState, 1, "Request-A: readyState after open is 1-OPENED");
+            requestA.abort();
+            t.eq(requestA.readyState, 0, "Request-A: readyState after abort is 0-UNSENT");
+
+        // Case 2: Request-B: open & send
+            var requestB = new OpenLayers.Request.XMLHttpRequest();
+            requestB.onreadystatechange = function() {
+                if (requestB.readyState == 4) {
+                    t.ok(true, "Request-B: triggered the event onreadystatechange when 4-DONE");
+                }
+            };
+            t.eq(requestB.readyState, 0, "Request-B: readyState after new is 0-UNSENT");
+            requestB.open("GET", ".", true);
+            t.eq(requestB.readyState, 1, "Request-B: readyState after open is 1-OPENED");
+            requestB.send();
+
+        // Case 3: Request-C: open, send & abort
+            var requestC = new OpenLayers.Request.XMLHttpRequest();
+            requestC.onreadystatechange = function() {
+                if (requestC.readyState == 4) {
+                    t.fail("Request-C: triggered the event onreadystatechange when 4-DONE after abort");
+                }
+            };
+            t.eq(requestC.readyState, 0, "Request-C: readyState after new is 0-UNSENT");
+            requestC.open("GET", ".", true);
+            t.eq(requestC.readyState, 1, "Request-C: readyState after open is 1-OPENED");
+            requestC.send();
+            requestC.abort();
+            t.eq(requestC.readyState, 0, "Request-C: readyState after abort is 0-UNSENT");
+
+        // delay destroy
+            t.delay_call( 
+                2, function() {
+                    // to await the end of requestB and requestC
+                }
+            );
+        }
     </script>
 </head>
 <body>

Modified: sandbox/ahocevar/renderer-ng/tests/Request.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Request.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Request.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -372,7 +372,45 @@
     }
 
     function test_abort(t) {
+
         t.plan(0);
+
+        var sendCalled;
+
+        // set up
+
+        var _open = OpenLayers.Request.XMLHttpRequest.prototype.open;
+        OpenLayers.Request.XMLHttpRequest.prototype.open = function() {
+            this.readyState = OpenLayers.Request.XMLHttpRequest.OPENED;
+        };
+
+        var _setRequestHeader = OpenLayers.Request.XMLHttpRequest.prototype.setRequestHeader;
+        OpenLayers.Request.XMLHttpRequest.prototype.setRequestHeader = function() {};
+
+        var _send = OpenLayers.Request.XMLHttpRequest.prototype.send;
+        OpenLayers.Request.XMLHttpRequest.prototype.send = function() {
+            sendCalled = true;
+        };
+
+        // test
+
+        sendCalled = false;
+        OpenLayers.Request.issue().abort();
+
+        t.delay_call(0.5, function() {
+            if (sendCalled) {
+                t.fail("Send should not be called because request is aborted");
+            }
+
+            // tear down
+            OpenLayers.Request.XMLHttpRequest.prototype.open = _open;
+            OpenLayers.Request.XMLHttpRequest.prototype.setRequestHeader = _setRequestHeader;
+            OpenLayers.Request.XMLHttpRequest.prototype.send = _send;
+        });
+    }
+
+    function test_abort2(t) {
+        t.plan(0);
         var fail = false;
         OpenLayers.Request.XMLHttpRequest.onsend = function(args) {
             fail = true;
@@ -383,10 +421,9 @@
             }
             OpenLayers.Request.XMLHttpRequest.onsend = null;
         });
-        var protocol = new OpenLayers.Protocol.HTTP();
-        protocol.abort(protocol.read());
+        var req = OpenLayers.Request.GET();
+        req.abort();
     }
-
     </script>
 </head>
 <body>

Modified: sandbox/ahocevar/renderer-ng/tests/Strategy/Filter.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Strategy/Filter.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Strategy/Filter.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -21,7 +21,7 @@
 
 function test_initialize(t) {
     
-    t.plan(3);
+    t.plan(4);
     
     var strategy = new OpenLayers.Strategy.Filter({filter: filter});
 
@@ -31,6 +31,14 @@
     t.ok(strategy.filter === filter, "has filter");
     
     strategy.destroy();
+    
+    try {
+        strategy = new OpenLayers.Strategy.Filter();
+        t.ok(true, "strategy without filter works");
+    } catch (err) {
+        t.fail("strategy without filter should not throw");
+    }
+    
 
 }
 

Modified: sandbox/ahocevar/renderer-ng/tests/Strategy/Fixed.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Strategy/Fixed.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Strategy/Fixed.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -153,7 +153,7 @@
         ];
 
         // call merge with a mocked up response
-        strategy.merge({features: features});
+        strategy.merge(new OpenLayers.Projection("EPSG:900913"), {features: features});
         
         // confirm that the original features were destroyed
         t.eq(layer.features.length, 2, "old features destroyed");
@@ -177,7 +177,7 @@
         ];
         
         // call merge again with mocked up response
-        strategy.merge({features: features});
+        strategy.merge(new OpenLayers.Projection("EPSG:900913"), {features: features});
 
         // test that feature geometries have not been transformed
         t.geom_eq(layer.features[0].geometry, features[0].geometry, "[same proj] feature 0 geometry not transformed");
@@ -185,6 +185,56 @@
         
     }
 
+    function test_load(t) {
+        t.plan(4);
+
+        // set up
+
+        var log;
+
+        var map = new OpenLayers.Map({
+            div: "map",
+            projection: new OpenLayers.Projection("EPSG:900913"),
+            layers: [new OpenLayers.Layer("", {isBaseLayer: true})]
+        });
+
+        var response = new OpenLayers.Protocol.Response();
+
+        var strategy = new OpenLayers.Strategy.Fixed({
+            merge: function(p, r) {
+                log = {scope: this, projection: p, response: r};
+            }
+        });
+
+        var layer = new OpenLayers.Layer.Vector("vector", {
+            strategies: [strategy],
+            protocol: {
+                read: function(o) {
+                    o.callback.call(o.scope, response);
+                }
+            }
+        });
+
+        map.addLayer(layer);
+
+        // test
+
+        strategy.load();
+
+        // verify that the callback is correctly bound
+        t.ok(log !== undefined,
+             "merge was called");
+        t.ok(log.scope == strategy,
+             "merge called with expected scope");
+        t.eq(log.projection.getCode(), map.getProjectionObject().getCode(),
+             "merge called the map projection as the first arg");
+        t.ok(log.response == response,
+             "merge called with response as the first arg");
+
+        // tear down
+
+        map.destroy();
+    }
   </script>
 </head>
 <body>

Modified: sandbox/ahocevar/renderer-ng/tests/Symbolizer/Line.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Symbolizer/Line.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Symbolizer/Line.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -24,6 +24,16 @@
         t.eq(clone.foo, "bar", "clone copies properties");
         
     }
+    
+    function test_defaults(t) {
+        t.plan(5);
+        var symbolizer = new OpenLayers.Symbolizer.Line();
+        t.ok(symbolizer.strokeColor === undefined, "no default strokeColor");
+        t.ok(symbolizer.strokeOpacity === undefined, "no default strokeOpacity");
+        t.ok(symbolizer.strokeWidth === undefined, "no default strokeWidth");
+        t.ok(symbolizer.strokeLinecap === undefined, "no default strokeLinecap");
+        t.ok(symbolizer.strokeDashstyle === undefined, "no default strokeDashstyle");
+    }
 
 
     </script> 

Modified: sandbox/ahocevar/renderer-ng/tests/Symbolizer/Point.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Symbolizer/Point.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Symbolizer/Point.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -25,6 +25,26 @@
         
     }
 
+    function test_defaults(t) {
+        t.plan(16);
+        var symbolizer = new OpenLayers.Symbolizer.Point();
+        t.ok(symbolizer.strokeColor === undefined, "no default strokeColor");
+        t.ok(symbolizer.strokeOpacity === undefined, "no default strokeOpacity");
+        t.ok(symbolizer.strokeWidth === undefined, "no default strokeWidth");
+        t.ok(symbolizer.strokeLinecap === undefined, "no default strokeLinecap");
+        t.ok(symbolizer.strokeDashstyle === undefined, "no default strokeDashstyle");
+        t.ok(symbolizer.fillColor === undefined, "no default fillColor");
+        t.ok(symbolizer.fillOpacity === undefined, "no default fillOpacity");
+        t.ok(symbolizer.pointRadius === undefined, "no default pointRadius");
+        t.ok(symbolizer.externalGraphic === undefined, "no default externalGraphic");
+        t.ok(symbolizer.graphicWidth === undefined, "no default graphicWidth");
+        t.ok(symbolizer.graphicHeight === undefined, "no default graphicHeight");
+        t.ok(symbolizer.graphicOpacity === undefined, "no default graphicOpacity");
+        t.ok(symbolizer.graphicXOffset === undefined, "no default graphicXOffset");
+        t.ok(symbolizer.graphicYOffset === undefined, "no default graphicYOffset");
+        t.ok(symbolizer.rotation === undefined, "no default rotation");
+        t.ok(symbolizer.graphicName === undefined, "no default graphicName");
+    }
 
     </script> 
 </head>

Modified: sandbox/ahocevar/renderer-ng/tests/Symbolizer/Polygon.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Symbolizer/Polygon.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Symbolizer/Polygon.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -25,7 +25,19 @@
         
     }
 
+    function test_defaults(t) {
+        t.plan(7);
+        var symbolizer = new OpenLayers.Symbolizer.Polygon();
+        t.ok(symbolizer.strokeColor === undefined, "no default strokeColor");
+        t.ok(symbolizer.strokeOpacity === undefined, "no default strokeOpacity");
+        t.ok(symbolizer.strokeWidth === undefined, "no default strokeWidth");
+        t.ok(symbolizer.strokeLinecap === undefined, "no default strokeLinecap");
+        t.ok(symbolizer.strokeDashstyle === undefined, "no default strokeDashstyle");
+        t.ok(symbolizer.fillColor === undefined, "no default fillColor");
+        t.ok(symbolizer.fillOpacity === undefined, "no default fillOpacity");
+    }
 
+
     </script> 
 </head>
 <body></body> 

Modified: sandbox/ahocevar/renderer-ng/tests/Symbolizer/Text.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Symbolizer/Text.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Symbolizer/Text.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -25,7 +25,17 @@
         
     }
 
+    function test_defaults(t) {
+        t.plan(5);
+        var symbolizer = new OpenLayers.Symbolizer.Point();
+        t.ok(symbolizer.label === undefined, "no default label");
+        t.ok(symbolizer.fontFamily === undefined, "no default fontFamily");
+        t.ok(symbolizer.fontSize === undefined, "no default fontSize");
+        t.ok(symbolizer.fontWeight === undefined, "no default fontWeight");
+        t.ok(symbolizer.fontStyle === undefined, "no default fontStyle");
+    }
 
+
     </script> 
 </head>
 <body></body> 

Modified: sandbox/ahocevar/renderer-ng/tests/Tile/Image/IFrame.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Tile/Image/IFrame.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Tile/Image/IFrame.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -14,66 +14,48 @@
     var name     = "OpenaLayers WMS";
     var wmsUrl   = "http://labs.metacarta.com/wms/vmap0?";
     
-    function test_Tile_Image_IFrame_constructor (t) {
-        t.plan( 2 );
-        layer = new OpenLayers.Layer.WMS.Post(name, wmsUrl, {layers: 'basic'}); 
-        var tile = new OpenLayers.Tile.Image.IFrame(layer, position, bounds, url, size);
-        
-        t.ok( tile instanceof OpenLayers.Tile.Image.IFrame, "new OpenLayers.Tile.Image.IFrame returns Tile object" );
-        t.eq( tile.layerAlphaHack, false, "layerAlphaHack is set to false.");
-    
-        layer.destroy();
-    }
-
-    function test_Tile_Image_IFrame_destroy (t) {
-        t.plan( 2 );
+    function test_Tile_Image_IFrame_create (t) {
+        t.plan( 3 );
         map   = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.WMS.Post(name, wmsUrl, {layers: 'basic'}); 
+        var bar = new Array(205).join("1234567890");
+        layer = new OpenLayers.Layer.WMS(name, wmsUrl, {layers: 'basic', foo: bar}, {tileOptions: {maxGetUrlLength: 2048}}); 
         map.addLayer(layer);
 
-        var tile = new OpenLayers.Tile.Image.IFrame(layer, position, bounds, null, size);
+        var tile = layer.addTile(bounds, position);
         tile.renderTile();
         tile.positionImage();
+        t.eq(tile.imgDiv.firstChild.nodeName.toLowerCase(), "iframe", "IFrame used for long URL");
         
+        layer.mergeNewParams({foo: null});
+        tile.renderTile();
+        tile.positionImage();
+        t.eq(tile.imgDiv.nodeName.toLowerCase(), "img", "IMG used for short URL");
+        
+        tile.maxGetUrlLength = 0;
+        tile.renderTile();
+        tile.positionImage();
+        t.eq(tile.imgDiv.firstChild.nodeName.toLowerCase(), "iframe", "IFrame used when maxGetUrlLength is 0");
+        
         tile.destroy();
-        t.eq( tile.imgDiv, null, "IFrame successfully removed from DOM");
-        t.eq( tile.frame, null, "Event div successfully removed from DOM");
-
+        layer.destroy();
         map.destroy();
     }
 
-    function test_Tile_Image_IFrame_clone (t) {
-        t.plan( 9 );
-        
-        layer = new OpenLayers.Layer.WMS.Post(name, wmsUrl, {layers: 'basic'}); 
-        tile  = new OpenLayers.Tile.Image.IFrame(layer, position, bounds, url, size);
-        tile.iFrame = {};
-        var clone = tile.clone();
-        
-        t.ok( clone instanceof OpenLayers.Tile.Image.IFrame, "clone is a Tile.Image.IFrame object" );
-        t.ok( clone.layer == layer, "clone.layer is set correctly");
-        t.ok( clone.position.equals(position), "clone.position is set correctly");
-        t.ok( clone.bounds.equals(bounds), "clone.bounds is set correctly");
-        t.eq( clone.url, url, "clone.url is set correctly");
-        t.ok( clone.size.equals(size), "clone.size is set correctly");
-        t.ok( clone.frame, "clone has a frame");
-        t.ok( clone.frame != tile.frame, "clone's frame is a new one");
-        t.ok( clone.imgDiv == null, "clone's imgDiv was not copied");
-    }
-    
     function test_Tile_Image_IFrame_clear (t) {
         t.plan( 1 );
         
         map   = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.WMS.Post(name, wmsUrl, {layers: 'basic'}); 
+        layer = new OpenLayers.Layer.WMS(name, wmsUrl, {layers: 'basic'}, {tileOptions: {maxGetUrlLength: 0}}); 
         map.addLayer(layer);  
-        tile = new OpenLayers.Tile.Image.IFrame(layer, position, bounds, url, size);
+        tile = layer.addTile(bounds, position);
         tile.draw();
         tile.clear();
 
-        t.ok(
-            tile.imgDiv.firstChild.nodeName != "IFRAME",
+        t.eq(
+            tile.imgDiv.firstChild.nodeName.toLowerCase(), "div",
             "IFrame successfully removed from DOM");
+        tile.destroy();
+        layer.destroy();
         map.destroy();
     }
 
@@ -81,9 +63,10 @@
         t.plan( 4 );
 
         map   = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.WMS.Post(name, wmsUrl, {layers: 'basic'}); 
+        layer = new OpenLayers.Layer.WMS(name, wmsUrl, {layers: 'basic'}, {tileOptions: {maxGetUrlLength: 0}}); 
         map.addLayer(layer);  
-        tile = new OpenLayers.Tile.Image.IFrame(layer, position, bounds, url, size);
+        tile = layer.addTile(bounds, position);
+        tile.url = layer.getURL(bounds);
         tile.initImgDiv();
 
         if(isMozilla) {
@@ -103,9 +86,9 @@
         t.plan( 3 );
 
         map   = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.WMS.Post(name, wmsUrl, {layers: 'basic'}); 
+        layer = new OpenLayers.Layer.WMS(name, wmsUrl, {layers: 'basic'}, {tileOptions: {maxGetUrlLength: 0}}); 
         map.addLayer(layer);  
-        var tile = new OpenLayers.Tile.Image.IFrame(layer, position, bounds, url, size);
+        var tile = layer.addTile(bounds, position);
         tile.renderTile();
         var imgDiv = tile.imgDiv;
         var iFrame    = imgDiv.firstChild;
@@ -128,9 +111,9 @@
         t.plan( 8 );
         
         map   = new OpenLayers.Map('map');
-        layer = new OpenLayers.Layer.WMS.Post(name, wmsUrl, {layers: 'basic'}); 
+        layer = new OpenLayers.Layer.WMS(name, wmsUrl, {layers: 'basic'}, {tileOptions: {maxGetUrlLength: 0}}); 
         map.addLayer(layer);  
-        var tile = new OpenLayers.Tile.Image.IFrame(layer, position, bounds, url, size);
+        var tile = layer.addTile(bounds, position);
         var iFrame = tile.createIFrame();
 
         var id = tile.id+'_iFrame';
@@ -161,15 +144,17 @@
             SRS: "EPSG:4326", BBOX: [1,2,3,4],
             WIDTH: String(size.w), HEIGHT: String(size.h)
         };
-        var newLayer = new OpenLayers.Layer.WMS.Post("Name",
-                                         "http://labs.metacarta.com/TESTURL",
-                                         tParams,
-                                         {tileSize: size});  
+        var newLayer = new OpenLayers.Layer.WMS("Name",
+                     "http://labs.metacarta.com/TESTURL",
+                     tParams,
+                     {tileSize: size, tileOptions: {maxGetUrlLength: 0}});  
         map = new OpenLayers.Map('map'); 
         map.addLayer(newLayer);  
-        tile = new OpenLayers.Tile.Image.IFrame(newLayer, position, bounds, url, size);
+        tile = newLayer.addTile(bounds, position);
+        tile.url = newLayer.getURL(bounds);
         tile.initImgDiv();
 
+        tile.url = newLayer.getURL(bounds);
         var form = tile.createRequestForm();
         if(isMozilla) {
             t.ok( form instanceof HTMLElement, "created html form successfully.");
@@ -187,25 +172,13 @@
         t.eq( form.target, tile.id+'_iFrame', "form target correctly set.");
         t.eq( form.action, url, "form action correctly set.");
 
-        var contain  = true;
+        var formParams = {};
         var children = form.childNodes;
-        for(var par in newLayer.params) {
-            var test = false;
-            
-            for(var i=0; i<children.length; i++) {
-                if(children.item(i).name == par && children.item(i).value == newLayer.params[par]) {
-                    test = true;
-                    break;
-                }
-            }
-
-            if(test == false) {
-                contain = false;
-                break;
-            }
-
+        for(var i=0; i<form.childNodes.length; i++) {
+            formParams[children[i].name] = children[i].value
         }
-        t.eq( contain, true, "html form elements equal layer's parameters.");
+        newLayer.params.BBOX = newLayer.params.BBOX.join(",");
+        t.eq(newLayer.params, formParams, "html form elements equal layer's parameters.");
 
         tile.draw();
         tile.clear();
@@ -214,7 +187,9 @@
             tile.imgDiv.firstChild.nodeName == "IFRAME",
             "Iframe has been reinserted properly"
         );
-
+        
+        tile.destroy();
+        newLayer.destroy();
         map.destroy();
     }
 </script>

Modified: sandbox/ahocevar/renderer-ng/tests/Tile/Image.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Tile/Image.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Tile/Image.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -87,6 +87,29 @@
         t.ok( clone.imgDiv == null, "clone's imgDiv was not copied");
     }
     
+    function test_Tile_Image_IFrame_viewRequestID (t) {
+        t.plan( 2 );
+        var map   = new OpenLayers.Map('map');
+        var layer = new OpenLayers.Layer.WMS(
+            "Name",
+            "http://labs.metacarta.com/TESTURL?",
+            {layers: 'basic'}
+        ); 
+        map.addLayer(layer);
+
+        var position = new OpenLayers.Pixel(20,30);
+        var bounds = new OpenLayers.Bounds(1,2,3,4);
+        tile = layer.addTile(bounds, position);
+        tile.renderTile();
+        t.eq(tile.imgDiv.viewRequestID, map.viewRequestID, "viewRequestID correct after renderTile");
+        map.viewRequestID++;
+        tile.renderTile();
+        t.eq(tile.imgDiv.viewRequestID, map.viewRequestID, "viewRequestID correct after subsequent renderTile");
+        tile.destroy();
+        layer.destroy();
+        map.destroy();
+    }
+
     function test_Tile_Image_draw (t) {
         t.plan( 7 );
 

Modified: sandbox/ahocevar/renderer-ng/tests/Util.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/Util.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/Util.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -1,10 +1,20 @@
 <html>
 <head>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
   <script>
     var custom$ = function() {};
     window.$ = custom$;
   </script>
-  <script src="../lib/OpenLayers.js"></script>
+  <script src="../lib/OpenLayers/SingleFile.js"></script>
+  <script src="../lib/OpenLayers/Util.js"></script>
+  <script src="../lib/OpenLayers/BaseTypes.js"></script>
+  <script src="../lib/OpenLayers/BaseTypes/Class.js"></script>
+  <script src="../lib/OpenLayers/BaseTypes/Element.js"></script>
+  <script src="../lib/OpenLayers/BaseTypes/LonLat.js"></script>
+  <script src="../lib/OpenLayers/BaseTypes/Pixel.js"></script>
+  <script src="../lib/OpenLayers/BaseTypes/Size.js"></script>
+  <script src="../lib/OpenLayers/Lang.js"></script>
+  <script src="../lib/OpenLayers/Console.js"></script>
   <script type="text/javascript">
     var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
     var map; 
@@ -96,7 +106,7 @@
 
         t.eq( div.style.position, position, "div.style.positionset correctly");    
         //Safari 3 separates the border style into separate entities when reading it
-        if (OpenLayers.Util.getBrowserName() == 'safari') {
+        if (OpenLayers.BROWSER_NAME == 'safari') {
           var s = border.split(' ');
           t.ok(div.style.borderTopWidth == s[0] && div.style.borderTopStyle == s[1], "good default popup.border")
         } else {
@@ -104,11 +114,11 @@
         }
             
         //Safari 3 separates style overflow into overflow-x and overflow-y
-        var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow';
+        var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
         t.eq( div.style[prop], overflow, "div.style.overflow set correctly");    
         t.eq( parseFloat(div.style.opacity), opacity, "element.style.opacity set correctly");    
         //Safari 3 returns null for this value, which is okay
-        var filterString = (OpenLayers.Util.getBrowserName() == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
+        var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
         t.eq( div.style.filter, filterString, "element.style.filter set correctly");
 
         //test defaults
@@ -129,13 +139,13 @@
 
         t.eq( div.style.position, "absolute", "div.style.positionset correctly");    
         //Safari 3 separates the border style into separate entities when reading it
-        if (OpenLayers.Util.getBrowserName() == 'safari') {
+        if (OpenLayers.BROWSER_NAME == 'safari') {
           t.ok(div.style.borderTopWidth == '' && div.style.borderTopStyle == '', "good default popup.border")
         } else {
           t.eq( div.style.border, "", "div.style.border set correctly");    
         }
         //Safari 3 separates style overflow into overflow-x and overflow-y
-        var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow';
+        var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
         t.eq(div.style[prop], "", "div.style.overflow set correctly");    
         t.ok( !div.style.opacity, "element.style.opacity set correctly");    
         t.ok( !div.style.filter, "element.style.filter set correctly");
@@ -167,7 +177,7 @@
         t.eq( image.style.height, sz.h + "px", "image.style.height set correctly");    
 
         //Safari 3 separates the border style into separate entities when reading it
-        if (OpenLayers.Util.getBrowserName() == 'safari') {
+        if (OpenLayers.BROWSER_NAME == 'safari') {
           var s = border.split(' ');
           t.ok(image.style.borderTopWidth == s[0] && image.style.borderTopStyle == s[1], "good default popup.border")
         } else {
@@ -177,7 +187,7 @@
         t.eq( image.style.position, position, "image.style.position set correctly");    
         t.eq( parseFloat(image.style.opacity), opacity, "image.style.opacity set correctly");    
         //Safari 3 returns null for this value, which is okay
-        var filterString = (OpenLayers.Util.getBrowserName() == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
+        var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
         t.eq( image.style.filter, filterString, "element.style.filter set correctly");
 
         //test defaults
@@ -368,7 +378,7 @@
             filterString = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://www.openlayers.org/images/OpenLayers.trac.png', sizingMethod='crop') alpha(opacity=50)";
         } else {
             //Safari 3 returns null for this value, which is okay
-            var filterString = (OpenLayers.Util.getBrowserName() == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
+            var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
         }        
         t.eq( imageDiv.style.filter, filterString, "element.style.filter set correctly");
 
@@ -384,7 +394,7 @@
         t.eq( image.style.height, sz.h + "px", "image.style.height set correctly");    
 
         //Safari 3 separates the border style into separate entities when reading it
-        if (OpenLayers.Util.getBrowserName() == 'safari') {
+        if (OpenLayers.BROWSER_NAME == 'safari') {
           var s = border.split(' ');
           t.ok(image.style.borderTopWidth == s[0] && image.style.borderTopStyle == s[1], "good default popup.border")
         } else {
@@ -436,7 +446,7 @@
         t.eq(parseFloat(element.style.opacity), opacity, 
              "element.style.opacity set correctly when opacity = " + opacity);
         //Safari 3 returns null for this value, which is okay
-        var filterString = (OpenLayers.Util.getBrowserName() == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
+        var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
         t.eq(element.style.filter, filterString, 
              "element.style.filter set correctly when opacity = " + opacity);
 
@@ -446,7 +456,7 @@
         t.eq(parseFloat(element.style.opacity), opacity, 
              "element.style.opacity not changed if the value is incorrect");
         //Safari 3 returns null for this value, which is okay
-        var filterString = (OpenLayers.Util.getBrowserName() == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
+        var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
         t.eq(element.style.filter, filterString, 
              "element.style.filter not changed if the value is incorrect");
 
@@ -456,7 +466,7 @@
         t.eq(parseFloat(element.style.opacity), opacity, 
              "element.style.opacity not changed if the value is incorrect");
         //Safari 3 returns null for this value, which is okay
-        var filterString = (OpenLayers.Util.getBrowserName() == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
+        var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
         t.eq(element.style.filter, filterString, 
              "element.style.filter not changed if the value is incorrect");
 
@@ -467,7 +477,7 @@
         t.eq(element.style.opacity, '', 
              "element.style.opacity is removed when opacity = " + opacity);
         //Safari 3 returns null for this value, which is okay
-        var filterString = (OpenLayers.Util.getBrowserName() == 'safari') ? null : '';
+        var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : '';
         t.eq(element.style.filter, filterString, 
              "element.style.filter is removed when opacity = " + opacity);
     }
@@ -497,18 +507,18 @@
 
         t.eq( element.style.position, position, "element.style.position set correctly");    
         //Safari 3 separates the border style into separate entities when reading it
-        if (OpenLayers.Util.getBrowserName() == 'safari') {
+        if (OpenLayers.BROWSER_NAME == 'safari') {
           var s = border.split(' ');
           t.ok(element.style.borderTopWidth == s[0] && element.style.borderTopStyle == s[1], "good default popup.border")
         } else {
           t.ok( (element.style.border.indexOf(border) != -1), "element.style.border set correctly");
         }
         //Safari 3 separates style overflow into overflow-x and overflow-y
-        var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow';
+        var prop = (OpenLayers.BROWSER_NAME == 'safari') ? 'overflowX' : 'overflow';
         t.eq( element.style[prop], overflow, "element.style.overflow set correctly");    
         t.eq( parseFloat(element.style.opacity), opacity, "element.style.opacity set correctly");    
         //Safari 3 returns null for this value, which is okay
-        var filterString = (OpenLayers.Util.getBrowserName() == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
+        var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
         t.eq( element.style.filter, filterString, "element.style.filter set correctly");
     }
 
@@ -552,7 +562,7 @@
             t.ok( true, "skipping element test outside of Mozilla");
         } else {
             //Safari 3 returns null for this value, which is okay
-            var filterString = (OpenLayers.Util.getBrowserName() == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
+            var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : 'alpha(opacity=' + (opacity * 100) + ')';
             t.ok( image.nodeName == "IMG", "createImage creates a valid HTMLImageElement" );
         }
         t.eq( imageDiv.style.filter, filterString, "element.style.filter set correctly");
@@ -562,7 +572,7 @@
         t.eq( image.style.height, sz.h + "px", "image.style.height set correctly");    
 
         //Safari 3 separates the border style into separate entities when reading it
-        if (OpenLayers.Util.getBrowserName() == 'safari') {
+        if (OpenLayers.BROWSER_NAME == 'safari') {
           var s = border.split(' ');
           t.ok(image.style.borderTopWidth == s[0] && image.style.borderTopStyle == s[1], "good default popup.border")
         } else {
@@ -894,7 +904,7 @@
     }
 
     function test_Util_getParameters(t) {
-        t.plan(13);
+        t.plan(17);
 
         t.eq(OpenLayers.Util.getParameters('http://www.example.com'), {},
              "getParameters works when args = ''");
@@ -952,6 +962,18 @@
         };
         var str = OpenLayers.Util.getParameterString(obj);
         t.eq(OpenLayers.Util.getParameters("?" + str), obj, "round tripped parameters");
+        
+        // try some oddly encoded strings
+        var url = "http://example.com/?C%E9sar=C%E9sar+Ch%E1vez";
+        var obj = OpenLayers.Util.getParameters(url);
+        t.ok("César" in obj, "got proper key from C%E9sar");
+        t.eq(obj["César"], "César Chávez", "got proper value from C%E9sar+Ch%E1vez");
+        
+        // try some properly encoded strings
+        var url = "http://example.com/?C%C3%A9sar=C%C3%A9sar+Ch%C3%A1vez";
+        var obj = OpenLayers.Util.getParameters(url);
+        t.ok("César" in obj, "got proper key from C%C3%A9sar");
+        t.eq(obj["César"], "César Chávez", "got proper value from C%E9sar+Ch%E1vez");
 
     }
 

Modified: sandbox/ahocevar/renderer-ng/tests/list-tests.html
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/list-tests.html	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/list-tests.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -125,6 +125,7 @@
     <li>Layer.html</li>
     <li>Layer/ArcIMS.html</li> 
     <li>Layer/ArcGIS93Rest.html</li>
+    <li>Layer/Bing.html</li>
     <li>Layer/EventPane.html</li>
     <li>Layer/FixedZoomLevels.html</li>
     <li>Layer/GeoRSS.html</li>
@@ -138,7 +139,7 @@
     <li>Layer/MapGuide.html</li>
     <li>Layer/MapServer.html</li>
     <li>Layer/Markers.html</li>
-    <script type="text/javascript">if(window.location.host.match(/^(www.)?openlayers.org$/)){document.write('<li>Layer/MultiMap.html</li>');}</script>
+    <li>Layer/MultiMap.html</li>
     <li>Layer/PointTrack.html</li>
     <li>Layer/SphericalMercator.html</li>
     <li>Layer/Text.html</li>
@@ -156,7 +157,10 @@
     <li>Map.html</li>
     <li>Marker.html</li>
     <li>Marker/Box.html</li>
-    <li>OpenLayers.html</li>
+    <li>OpenLayers1.html</li>
+    <li>OpenLayers2.html</li>
+    <li>OpenLayers3.html</li>
+    <li>OpenLayers4.html</li>
     <li>Popup.html</li>
     <li>Popup/Anchored.html</li>
     <li>Popup/AnchoredBubble.html</li>

Copied: sandbox/ahocevar/renderer-ng/tests/manual/google-v3-resize.html (from rev 10991, trunk/openlayers/tests/manual/google-v3-resize.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/manual/google-v3-resize.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/tests/manual/google-v3-resize.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,54 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>Google v3 Resize Test</title>
+    <link rel="stylesheet" href="../../theme/default/style.css" type="text/css" />
+    <link rel="stylesheet" href="../../examples/style.css" type="text/css" />
+    <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
+    <script src="../../lib/OpenLayers.js"></script>
+    <script type="text/javascript">
+        var map;
+
+        function init() {
+            var mapOptions = {
+                projection: "EPSG:900913",
+                displayProjection: new OpenLayers.Projection("EPSG:4326"), //Pour afficher les coord lat long
+                units: "m",
+                maxResolution: 156543.0339,
+                maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
+                controls: [new OpenLayers.Control.Navigation(), new OpenLayers.Control.LayerSwitcher()],
+                numZoomLevels: 20
+            };
+            map = new OpenLayers.Map('map', mapOptions);
+
+            var dummy = new OpenLayers.Layer(
+                "Dummy",
+                {isBaseLayer: true}
+            );
+            var gmap = new OpenLayers.Layer.Google(
+                "Google Streets", {sphericalMercator: true}
+            );
+
+            map.addLayers([dummy, gmap]);
+
+            map.setCenter(new OpenLayers.LonLat(-7712190.388467473, 6567469.498697457), 6);
+        }
+    </script>
+  </head>
+  <body onload="init()">
+    <h1 id="title">Google Layer Resize Issue</h1>
+
+    <div id="tags"></div>
+
+    <p id="shortdesc">
+        <ol>
+            <li>Click
+                <button onclick="var m = document.getElementById('map').style; m.height = '400px'; m.width = '800px';map.updateSize(); return false;">Resize</button></li>
+            <li>Open the LayerSwitcher and switch to Google Streets</li>
+            <li>Confirm that the whole map area is populated with tiles</li>
+        </ol>
+    </p>
+
+    <div id="map" style="width: 350px; height: 200px"></div>
+
+  </body>
+</html>

Copied: sandbox/ahocevar/renderer-ng/tests/manual/page-position.html (from rev 10991, trunk/openlayers/tests/manual/page-position.html)
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/manual/page-position.html	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/tests/manual/page-position.html	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML>
+<html>
+    <head>
+        <title>Page Position Test</title>
+        
+        <link rel="stylesheet" href="../../theme/default/style.css" type="text/css" />
+        <link rel="stylesheet" href="../../examples/style.css" type="text/css" />
+        <style type="text/css">
+            #mapwrap {
+                border: 10px solid red;
+                width: 532px;
+                height: 276px;
+            }
+            #map {
+                position: absolute;
+                border: 10px solid #ccc;
+                width: 512px;
+                height: 256px;
+            }
+            #controlToggle li {
+                list-style: none;
+            }
+            p {
+                width: 512px;
+            }
+            #scrollspace {
+                height: 500px;
+            }
+        </style>
+        <script src="../../lib/OpenLayers.js"></script>
+        <script type="text/javascript">
+            var map, drawControls;
+            function init(){
+                map = new OpenLayers.Map('map');
+
+                var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
+                    "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'});
+
+                var lineLayer = new OpenLayers.Layer.Vector("Line Layer");
+
+                map.addLayers([wmsLayer, lineLayer]);
+                map.addControl(new OpenLayers.Control.LayerSwitcher());
+                map.addControl(new OpenLayers.Control.MousePosition());
+
+                drawControl = new OpenLayers.Control.DrawFeature(lineLayer,
+                                OpenLayers.Handler.Path);
+
+                map.addControl(drawControl);
+
+                map.setCenter(new OpenLayers.LonLat(0, 0), 3);
+
+                document.getElementById('noneToggle').checked = true;
+            }
+
+            function toggleControl(element) {
+                var control = drawControl;
+                if(element.value == "draw" && element.checked) {
+                    control.activate();
+                } else {
+                    control.deactivate();
+                }
+            }
+        </script>
+    </head>
+    <body onload="init()">
+        <h1 id="title">OpenLayers Page Position Test</h1>
+
+        <p id="shortdesc">
+            Test if borders and scroll position cause unwanted offsets on the
+            mouse positions reported by map events.
+        </p>
+        <div id="mapwrap">
+            <div id="map"></div>
+        </div>
+
+        <ul id="controlToggle">
+            <li>
+                <input type="radio" name="type" value="none" id="noneToggle"
+                       onclick="toggleControl(this);" checked="checked" />
+                <label for="noneToggle">navigate</label>
+            </li>
+            <li>
+                <input type="radio" name="type" value="draw" id="lineToggle" onclick="toggleControl(this);" />
+                <label for="lineToggle">draw line</label>
+            </li>
+        </ul>
+
+        <div id="docs">
+            <p>This map's div has a border and absolute positioning, wrapped
+                by a container which also has a border. The page is also
+                scrollable. Neither the borders nor scrolling the page should
+                result in unwanted offsets on pixel positions reported by map
+                events.</p>
+            <p>With the line drawing control active, click on the map to add a
+                point.  The point should be drawn at the exact mouse location.</p>
+            <p>With the navigation control active, shift-drag a zoom rectangle.
+                The rectangle's corner should align exactly with the mouse
+                cursor.</p>
+            <p>Scroll the page and repeat the above tests.</p>
+            <div id="scrollspace"><div>
+        </div>
+    </body>
+</html>

Modified: sandbox/ahocevar/renderer-ng/tests/throws.js
===================================================================
--- sandbox/ahocevar/renderer-ng/tests/throws.js	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tests/throws.js	2011-01-03 15:30:11 UTC (rev 10994)
@@ -2,7 +2,7 @@
 
   throws.js -- Adds a `throws_` method to AnotherWay test objects.
 
-  Copyright 2005 MetaCarta, Inc., released under the BSD License.
+  Copyright 2005 OpenLayers Contributors. released under the BSD License.
 
 
   A reference to this file needs to be added to `run-tests.html` in the
@@ -79,4 +79,4 @@
     } else {
         this.fail(doc);
     }
-};
\ No newline at end of file
+};

Modified: sandbox/ahocevar/renderer-ng/theme/default/style.css
===================================================================
--- sandbox/ahocevar/renderer-ng/theme/default/style.css	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/theme/default/style.css	2011-01-03 15:30:11 UTC (rev 10994)
@@ -11,6 +11,7 @@
 
 div.olLayerDiv {
    -moz-user-select: none;
+   -khtml-user-select: none;
 }
 
 .olLayerGoogleCopyright {
@@ -322,6 +323,7 @@
 
 .olControlNoSelect {
  -moz-user-select: none;
+ -khtml-user-select: none;
 }
 
 .olImageLoadError {
@@ -395,3 +397,10 @@
     top: 5px;
     right: 0px;
 }
+
+.olBingAttribution {
+    color: #DDD;
+}
+.olBingAttribution.road {
+    color: #333;
+}

Modified: sandbox/ahocevar/renderer-ng/tools/exampleparser.py
===================================================================
--- sandbox/ahocevar/renderer-ng/tools/exampleparser.py	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tools/exampleparser.py	2011-01-03 15:30:11 UTC (rev 10994)
@@ -135,6 +135,10 @@
         title = doc.createElementNS(atomuri, "title")
         title.appendChild(doc.createTextNode(example["title"] or example["example"]))
         entry.appendChild(title)
+              
+        tags = doc.createElementNS(atomuri, "tags")
+        tags.appendChild(doc.createTextNode(example["tags"] or example["example"]))
+        entry.appendChild(tags)
         
         link = doc.createElementNS(atomuri, "link")
         link.setAttribute("href", "%s%s" % (feedPath, example["example"]))
@@ -171,7 +175,7 @@
     """
     index = {}
     unword = re.compile("\\W+")
-    keys = ["shortdesc", "title"]
+    keys = ["shortdesc", "title", "tags"]
     for i in range(len(examples)):
         for key in keys:
             text = examples[i][key]
@@ -204,7 +208,7 @@
     print 'Reading examples from %s and writing out to %s' % (examplesLocation, outFile.name)
    
     exampleList = []
-    docIds = ['title','shortdesc']
+    docIds = ['title','shortdesc','tags']
    
     #comment out option to create docs from online resource
     #examplesLocation = 'http://svn.openlayers.org/sandbox/docs/examples/'

Modified: sandbox/ahocevar/renderer-ng/tools/mergejs.py
===================================================================
--- sandbox/ahocevar/renderer-ng/tools/mergejs.py	2011-01-03 14:41:53 UTC (rev 10993)
+++ sandbox/ahocevar/renderer-ng/tools/mergejs.py	2011-01-03 15:30:11 UTC (rev 10994)
@@ -31,7 +31,7 @@
 #
 # Note: This is a very rough initial version of this code.
 #
-# -- Copyright 2005-2008 MetaCarta, Inc. / OpenLayers project --
+# -- Copyright 2005-2010 OpenLayers contributors / OpenLayers project --
 #
 
 # TODO: Allow files to be excluded. e.g. `Crossbrowser/DebugMode.js`?
@@ -94,6 +94,7 @@
 
         [exclude]
         3rd/logger.js
+        exclude/this/dir
 
     All headings are required.
 
@@ -122,6 +123,20 @@
         self.include =  lines[lines.index("[include]") + 1:lines.index("[exclude]")]
         self.exclude =  lines[lines.index("[exclude]") + 1:]
 
+def undesired(filepath, excludes):
+    # exclude file if listed
+    exclude = filepath in excludes
+    if not exclude:
+        # check if directory is listed
+        for excludepath in excludes:
+            if not excludepath.endswith("/"):
+                excludepath += "/"
+            if filepath.startswith(excludepath):
+                exclude = True
+                break
+    return exclude
+            
+
 def run (sourceDirectory, outputFilename = None, configFile = None):
     cfg = None
     if configFile:
@@ -138,7 +153,7 @@
                 if cfg and cfg.include:
                     if filepath in cfg.include or filepath in cfg.forceFirst:
                         allFiles.append(filepath)
-                elif (not cfg) or (filepath not in cfg.exclude):
+                elif (not cfg) or (not undesired(filepath, cfg.exclude)):
                     allFiles.append(filepath)
 
     ## Header inserted at the start of each file in the output

Copied: sandbox/ahocevar/renderer-ng/tools/mkrelease.sh (from rev 10991, trunk/openlayers/tools/mkrelease.sh)
===================================================================
--- sandbox/ahocevar/renderer-ng/tools/mkrelease.sh	                        (rev 0)
+++ sandbox/ahocevar/renderer-ng/tools/mkrelease.sh	2011-01-03 15:30:11 UTC (rev 10994)
@@ -0,0 +1,28 @@
+#!/bin/sh -x
+
+svn export http://svn.openlayers.org/tags/openlayers/release-$VERSION OpenLayers-$VERSION
+cd OpenLayers-$VERSION/build
+./build.py
+mkdir /osgeo/openlayers/docs/api/$VERSION
+cd ..
+cp build/OpenLayers.js /osgeo/openlayers/docs/api/$VERSION
+cp -a img/ /osgeo/openlayers/docs/api/$VERSION
+cp -a theme/ /osgeo/openlayers/docs/api/$VERSION
+
+
+# First remove all .pyc files from the directory.
+  rm tools/*.pyc
+  # move single file version
+  cp build/OpenLayers.js OpenLayers.js
+  rm build/OpenLayers.js
+  
+  cd ..
+  mkdir OpenLayers-$VERSION/doc/devdocs
+  naturaldocs -i OpenLayers-$VERSION/lib -o HTML OpenLayers-$VERSION/doc/devdocs -p OpenLayers-$VERSION/doc_config -s Default OL
+  mkdir OpenLayers-$VERSION/doc/apidocs
+  naturaldocs -i OpenLayers-$VERSION/lib -o HTML OpenLayers-$VERSION/doc/apidocs -p OpenLayers-$VERSION/apidoc_config -s Default OL
+
+  tar cvfz OpenLayers-$VERSION.tar.gz OpenLayers-$VERSION/
+  cp OpenLayers-$VERSION.tar.gz /osgeo/openlayers/docs/download
+  zip -9r OpenLayers-$VERSION.zip OpenLayers-$VERSION/
+



More information about the Commits mailing list